Web前端------緩動(dòng)框架的封裝、行內(nèi)樣式與內(nèi)嵌樣式等的獲取與修改勇边、手風(fēng)琴犹撒、走馬燈案例

之前版本的緩動(dòng)框架

原有的方法:div.style.width :這個(gè)方法比較固定,不能用變量或者字符串的形式更換屬性粒褒,不方便我傳值獲取屬性识颊,和給屬性賦值。

屬性值的獲取和屬性的賦值
div.style["width"] = "5000px";
可以通過(guò)傳字符串或者變量的方式獲取和賦值屬性奕坟。

缺點(diǎn):它的操作完全是對(duì)行內(nèi)式CSS來(lái)操作的祥款。賦值的時(shí)候毫無(wú)問(wèn)題。但是月杉,獲取值的時(shí)候有問(wèn)題了镰踏。
之前版本的緩動(dòng)動(dòng)畫(huà)框架

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute;
        }
    </style>
</head>
<body>

<button>運(yùn)動(dòng)到200</button>
<button>運(yùn)動(dòng)到400</button>
<div></div>


<script>

    var btnArr = document.getElementsByTagName("button");
    var div = document.getElementsByTagName("div")[0];

    btnArr[0].onclick = function () {
        animate(div,200);
    }

    btnArr[1].onclick = function () {
        animate(div,400);
    }


    //缺點(diǎn):1.只能獲取行內(nèi)式,不能獲取內(nèi)嵌和外鏈樣式沙合。導(dǎo)致我們獲取left值的時(shí)候,用offsetLeft模擬
          //2.只能放入一個(gè)屬性奠伪。(一個(gè)方法只能操作一個(gè)屬性)
            //3.一次性放入多個(gè)屬性值。


    function animate(ele,target){
        //清除定時(shí)器
        clearInterval(ele.timer);
        ele.timer = setInterval(function () {
            //四部:
            //獲取步長(zhǎng)
            var step = (target - ele.offsetLeft)/10;
            //二次處理步長(zhǎng)
            step = step>0?Math.ceil(step):Math.floor(step);
            //賦值
            ele.style.left = ele.offsetLeft + step + "px";
            //清除定時(shí)器
            console.log(1);
            if(Math.abs(target-ele.offsetLeft)<=Math.abs(step)){
                ele.style.left = target + "px";
                clearInterval(ele.timer);
            }
        },30);
    }


</script>

</body>
</html>
獲取行內(nèi)樣式首懈、內(nèi)嵌樣式绊率、外鏈樣式的方法介紹
只能獲取行內(nèi)式:(既能獲取又能賦值)
  • div.style.width 單個(gè)賦值
  • div.style[“width”] 變量賦值
獲取任意類型的CSS樣式的屬性值:(只能獲取)
  • div.currentStyle.width; 單個(gè)獲取 (IE678)
  • window.getComputedStyle(div,null).width;
example:
     div.currentStyle[“width”]; 變量獲取 (IE678) 
     window.getComputedStyle(div,null)[“width”]; 
參數(shù)1:獲取屬性的元素究履。 
參數(shù)2:偽元素滤否,C3學(xué)習(xí)。

代碼如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            background-color: pink;
            /*border: 1px solid #000;*/
            padding: 10px;
        }
    </style>
</head>
<body>

    <div style="width: 100px;height: 100px;"></div>


    <script>

        //賦值:div.style.....
        var div = document.getElementsByTagName("div")[0];
        div.style.width = "1000px";

        //獲取值:
//        console.log(div.offsetWidth);
//        console.log(div.style.width);
//        console.log(div.style.border);

        //獲取行內(nèi)式和內(nèi)嵌式
//        console.log(typeof window.getComputedStyle(div,null));
//        console.log(window.getComputedStyle(div,null).border);
//        console.log(window.getComputedStyle(div,null)["background-color"]);

//        console.log(div.currentStyle.padding);
//        console.log(div.currentStyle["background-color"]);


        console.log(getStyle(div,"padding"));
        console.log(getStyle(div,"background-color"));


        //兼容方法獲取元素樣式
        function getStyle(ele,attr){
            if(window.getComputedStyle){
                return window.getComputedStyle(ele,null)[attr];
            }
            return ele.currentStyle[attr];
        }



    </script>


</body>
</html>
修改后的多個(gè)版本的緩動(dòng)框架
  • 單個(gè)屬性的緩動(dòng)框架封裝
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>

    <button>運(yùn)動(dòng)到400</button>
    <button>寬度變?yōu)?00</button>
    <div></div>


    <script>

        var btnArr = document.getElementsByTagName("button");
        var div = document.getElementsByTagName("div")[0];

        btnArr[0].onclick = function () {
            animate(div,"left",400);
        }

        btnArr[1].onclick = function () {
            animate(div,"width",400);
        }


        //參數(shù)變?yōu)?個(gè)
        function animate(ele,attr,target){
            //先清定時(shí)器
            clearInterval(ele.timer);
            ele.timer = setInterval(function () {
                //四部
                var leader = parseInt(getStyle(ele,attr)) || 0;
                //1.獲取步長(zhǎng)
                var step = (target - leader)/10;
                //2.二次加工步長(zhǎng)
                step = step>0?Math.ceil(step):Math.floor(step);
                leader = leader + step;
                //3.賦值
                ele.style[attr] = leader + "px";
                 //4.清除定時(shí)器
                if(Math.abs(target-leader)<=Math.abs(step)){
                    ele.style[attr] = target + "px";
                    clearInterval(ele.timer);
                }

            },25);
        }




        //兼容方法獲取元素樣式
        function getStyle(ele,attr){
            if(window.getComputedStyle){
                return window.getComputedStyle(ele,null)[attr];
            }
            return ele.currentStyle[attr];
        }


    </script>


</body>
</html>
  • 多個(gè)屬性的緩動(dòng)框架的封裝(例子為:大小和距離)
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            position: absolute;
            top: 40px;
            left: 10px;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>

    <button>運(yùn)動(dòng)到400</button>
    <div></div>


    <script>

        var btnArr = document.getElementsByTagName("button");
        var div = document.getElementsByTagName("div")[0];

        btnArr[0].onclick = function () {
            var json = {"left":10,"top":200,"width":300,"height":200};
            animate(div,json);
        }



        //參數(shù)變?yōu)?個(gè)
        function animate(ele,json){
            //先清定時(shí)器
            clearInterval(ele.timer);
            ele.timer = setInterval(function () {
                //遍歷屬性和值最仑,分別單獨(dú)處理json
                //attr == k(鍵)    target == json[k](值)
                for(var k in json){
                    //四部
                    var leader = parseInt(getStyle(ele,k)) || 0;
                    //1.獲取步長(zhǎng)
                    var step = (json[k] - leader)/10;
                    //2.二次加工步長(zhǎng)
                    step = step>0?Math.ceil(step):Math.floor(step);
                    leader = leader + step;
                    //3.賦值
                    ele.style[k] = leader + "px";
                    console.log(1);
                    //4.清除定時(shí)器
//                    if(Math.abs(json[k]-leader)<=Math.abs(step)){
//                        ele.style[k] = json[k] + "px";
//                        clearInterval(ele.timer);
//                    }
                }
            },25);
        }




        //兼容方法獲取元素樣式
        function getStyle(ele,attr){
            if(window.getComputedStyle){
                return window.getComputedStyle(ele,null)[attr];
            }
            return ele.currentStyle[attr];
        }


    </script>


</body>
</html> 
  • 緩動(dòng)動(dòng)畫(huà)(清除定時(shí)器版)
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            position: absolute;
            top: 40px;
            left: 10px;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>

    <button>運(yùn)動(dòng)到400</button>
    <div></div>


    <script>

        var btnArr = document.getElementsByTagName("button");
        var div = document.getElementsByTagName("div")[0];

        btnArr[0].onclick = function () {
            var json = {"left":10,"top":200,"width":300,"height":200};
            animate(div,json);
        }



        //參數(shù)變?yōu)?個(gè)
        function animate(ele,json){
            //先清定時(shí)器
            clearInterval(ele.timer);
            ele.timer = setInterval(function () {
                //開(kāi)閉原則
                var bool = true;


                //遍歷屬性和值藐俺,分別單獨(dú)處理json
                //attr == k(鍵)    target == json[k](值)
                for(var k in json){
                    //四部
                    var leader = parseInt(getStyle(ele,k)) || 0;
                    //1.獲取步長(zhǎng)
                    var step = (json[k] - leader)/10;
                    //2.二次加工步長(zhǎng)
                    step = step>0?Math.ceil(step):Math.floor(step);
                    leader = leader + step;
                    //3.賦值
                    ele.style[k] = leader + "px";
                    //4.清除定時(shí)器
                    //判斷: 目標(biāo)值和當(dāng)前值的差大于步長(zhǎng),就不能跳出循環(huán)
                    //不考慮小數(shù)的情況:目標(biāo)位置和當(dāng)前位置不相等泥彤,就不能清除清除定時(shí)器欲芹。
                    if(json[k] !== leader){
                        bool = false;
                    }
                }

                console.log(1);
                //只有所有的屬性都到了指定位置,bool值才不會(huì)變成false吟吝;
                if(bool){
                    clearInterval(ele.timer);
                }
            },25);
        }




        //兼容方法獲取元素樣式
        function getStyle(ele,attr){
            if(window.getComputedStyle){
                return window.getComputedStyle(ele,null)[attr];
            }
            return ele.currentStyle[attr];
        }


    </script>


</body>
</html>
  • 實(shí)現(xiàn)回調(diào)函數(shù)
<!DOCTYPE html>
<html>
<head lang="en">
   <meta charset="UTF-8">
   <title></title>
   <style>
       div {
           position: absolute;
           top: 40px;
           left: 10px;
           width: 100px;
           height: 100px;
           background-color: pink;
       }
   </style>
</head>
<body>

   <button>運(yùn)動(dòng)到400然后回來(lái)</button>
   <div></div>


   <script>

       var btnArr = document.getElementsByTagName("button");
       var div = document.getElementsByTagName("div")[0];

       btnArr[0].onclick = function () {
           var json1 = {"left":300,"top":200,"width":300,"height":200};
           var json2 = {"left":10,"top":30,"width":100,"height":100};
           animate(div,json1, function () {
               animate(div,json2, function () {
                   animate(div,json1);
               });
           });

       }



       //參數(shù)變?yōu)?個(gè)
       function animate(ele,json,fn){
           //先清定時(shí)器
           clearInterval(ele.timer);
           ele.timer = setInterval(function () {
               //開(kāi)閉原則
               var bool = true;


               //遍歷屬性和值菱父,分別單獨(dú)處理json
               //attr == k(鍵)    target == json[k](值)
               for(var k in json){
                   //四部
                   var leader = parseInt(getStyle(ele,k)) || 0;
                   //1.獲取步長(zhǎng)
                   var step = (json[k] - leader)/10;
                   //2.二次加工步長(zhǎng)
                   step = step>0?Math.ceil(step):Math.floor(step);
                   leader = leader + step;
                   //3.賦值
                   ele.style[k] = leader + "px";
                   //4.清除定時(shí)器
                   //判斷: 目標(biāo)值和當(dāng)前值的差大于步長(zhǎng),就不能跳出循環(huán)
                   //不考慮小數(shù)的情況:目標(biāo)位置和當(dāng)前位置不相等剑逃,就不能清除清除定時(shí)器浙宜。
                   if(json[k] !== leader){
                       bool = false;
                   }
               }

               console.log(1);
               //只有所有的屬性都到了指定位置,bool值才不會(huì)變成false蛹磺;
               if(bool){
                   clearInterval(ele.timer);
                   //所有程序執(zhí)行完畢了粟瞬,現(xiàn)在可以執(zhí)行回調(diào)函數(shù)了
                   //只有傳遞了回調(diào)函數(shù),才能執(zhí)行
                   if(fn){
                       fn();
                   }
               }
           },25);
       }




       //兼容方法獲取元素樣式
       function getStyle(ele,attr){
           if(window.getComputedStyle){
               return window.getComputedStyle(ele,null)[attr];
           }
           return ele.currentStyle[attr];
       }

   </script>
</body>
</html>
手風(fēng)琴案例(圖片資源請(qǐng)自行配置)
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        ul{list-style: none}
        *{margin:0; padding:0;}
        div{
            width: 1150px;
            height: 400px;
            margin:50px auto;
            border:1px solid red;
            overflow: hidden;

        }
        div li {
            width: 240px;
            height: 400px;
            float: left;
        }
        div ul {
            width: 1300px;
        }
    </style>
    <script src="../jquery1.0.0.1.js"></script>
    <script>
        window.onload = function () {
            //需求:鼠標(biāo)放入到li中該盒子變寬萤捆,其他的盒子變窄裙品。移開(kāi)大盒子乓梨,回復(fù)原樣。
            //步驟:
            //1.給li添加背景
            //2.綁定onmouseover事件清酥,鼠標(biāo)放入到li中該盒子變寬,其他的盒子變窄
            //3.移開(kāi)大盒子蕴侣,回復(fù)原樣


            var div = document.getElementsByTagName("div")[0];
            var liArr = div.getElementsByTagName("li");
            //1.給li添加背景
            for(var i=0;i<liArr.length;i++){
                liArr[i].style.background = "url(images/"+(i+1)+".jpg) no-repeat";

                //2.綁定onmouseover事件焰轻,鼠標(biāo)放入到li中該盒子變寬,其他的盒子變窄
                liArr[i].onmouseover = function () {
                    //排他思想
                    for(var j=0;j<liArr.length;j++){
                        //引用框架實(shí)現(xiàn)寬度變窄
                        animate(liArr[j],{"width":100});
                    }
                    //剩下他自己
                    animate(this,{"width":800})
                }
            }

            //3.移開(kāi)大盒子昆雀,回復(fù)原樣
            div.onmouseout = function () {
                for(var j=0;j<liArr.length;j++){
                    //引用框架實(shí)現(xiàn)寬度變窄
                    animate(liArr[j],{"width":240});
                }
            }
        }
    </script>
</head>
<body>
<div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</div>
</body>
</html>

效果如下:


手風(fēng)琴.gif
360開(kāi)機(jī)動(dòng)畫(huà)
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box{
            width: 322px;
            position: fixed;
            bottom:0;
            right:0;
        }
        span{
            position: absolute;
            top:0;
            right:0;
            width:30px;
            height: 20px;
            cursor: pointer;
        }
    </style>
    <script src="../jquery1.0.0.1.js"></script>
    <script>
        window.onload = function () {
            //需求:下面的盒子高度變?yōu)?辱志,然后大盒子的寬在變?yōu)?.
            var guanbi = document.getElementById("guanbi");
            var box = guanbi.parentNode;
            var b = document.getElementById("b");

            guanbi.onclick = function () {
                //下面的盒子高度變?yōu)?,然后大盒子的寬在變?yōu)?.
                animate(b,{"height":0}, function () {
                    animate(box,{"width":0});
                });
            }
        }
    </script>
</head>
<body>
    <div class="box">
        <span id="guanbi"></span>
        <div class="hd" id="t">
            <img src="images/t.jpg" alt=""/>
        </div>
        <div class="bd" id="b">
            <img src="images/b.jpg" alt=""/>
        </div>
    </div>
</body>
</html>

效果如下:


360開(kāi)機(jī).gif

素材:
t.jpg
b.jpg
走馬燈效果

Html代碼

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>旋轉(zhuǎn)木馬輪播圖</title>
    <link rel="stylesheet" href="css/css.css"/>
    <script src="js/jquery1.0.0.1.js"></script>
    <script src="js/js.js"></script>
</head>
<body>

    <div class="wrap" id="wrap">
       <div class="slide" id="slide">
           <ul>
               <!--五張圖片-->
               <li><a href="#"><img src="images/slidepic1.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic2.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic3.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic4.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic5.jpg" alt=""/></a></li>
           </ul>
           <!--左右切換按鈕-->
           <div class="arrow" id="arrow">
               <a href="javascript:;" class="prev"></a>
               <a href="javascript:;" class="next"></a>
           </div>
       </div>
    </div>


</body>
</html>

css.css

@charset "UTF-8";
/*初始化  reset*/
blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}
body,button,input,select,textarea{font:12px/1.5 "Microsoft YaHei", "微軟雅黑", SimSun, "宋體", sans-serif;color: #666;}
ol,ul{list-style:none}
a{text-decoration:none}
fieldset,img{border:0;vertical-align:top;}
a,input,button,select,textarea{outline:none;}
a,button{cursor:pointer;}

.wrap{
    width:1200px;
    margin:10px auto;
}
.slide {
    height:500px;
    position: relative;
}
.slide li{
    position: absolute;
    left:200px;
    top:0;
}
.slide li img{
    width:100%;
}
.arrow{
    opacity: 0;
}
.prev,.next{
    width:76px;
    height:112px;
    position: absolute;
    top:50%;
    margin-top:-56px;
    background: url(../images/prev.png) no-repeat;
    z-index: 99;
}
.next{
    right:0;
    background-image: url(../images/next.png);
}

index.js

/**
 * Created by Lenovo on 2016/9/13.
 */
window.onload = function () {
    //需求:點(diǎn)擊足有按鈕實(shí)現(xiàn)旋轉(zhuǎn)木馬狞膘。
        //原理:點(diǎn)擊右側(cè)按鈕揩懒,讓3號(hào)盒子的樣式賦值給2號(hào)盒子,然后2->1,1->5,5->4,4->3挽封。已球。。
        //左側(cè)同理辅愿。
    //步驟:
    //1.鼠標(biāo)放到輪播圖上智亮,兩側(cè)的按鈕顯示,移開(kāi)隱藏点待。
    //2.讓頁(yè)面加載出所有的盒子的樣式阔蛉。
    //3.把兩側(cè)按鈕綁定事件。(調(diào)用同一個(gè)方法癞埠,只有一個(gè)參數(shù)状原,true為正向旋轉(zhuǎn),false為反向旋轉(zhuǎn))
    //4.書(shū)寫(xiě)函數(shù)苗踪。
        // (操作數(shù)組颠区。正向旋轉(zhuǎn):刪除數(shù)組中第一個(gè)樣式,添加到數(shù)組中的最后一位)
        // (操作數(shù)組通铲。反向旋轉(zhuǎn):刪除數(shù)組中最后一個(gè)樣式瓦呼,添加到數(shù)組中的第一位)


    var json = [
        {   //  1
            width:400,
            top:70,
            left:50,
            opacity:20,
            z:2
        },
        {  // 2
            width:600,
            top:120,
            left:0,
            opacity:80,
            z:3
        },
        {   // 3
            width:800,
            top:100,
            left:200,
            opacity:100,
            z:4
        },
        {  // 4
            width:600,
            top:120,
            left:600,
            opacity:80,
            z:3
        },
        {   //5
            width:400,
            top:70,
            left:750,
            opacity:20,
            z:2
        }
    ];

    //0.獲取元素
    var slide = document.getElementById("slide");
    var liArr = slide.getElementsByTagName("li");
    var arrow = slide.children[1];
    var arrowChildren = arrow.children;
    //設(shè)置一個(gè)開(kāi)閉原則變量,點(diǎn)擊以后修改這個(gè)值测暗。
    var flag = true;



    //1.鼠標(biāo)放到輪播圖上央串,兩側(cè)的按鈕顯示,移開(kāi)隱藏碗啄。
    slide.onmouseenter = function () {
        //arrow.style.opacity = 1;
        animate(arrow,{"opacity":100});
    }
    slide.onmouseleave = function () {
        //arrow.style.opacity = 1;
        animate(arrow,{"opacity":0});
    }

    //2.讓頁(yè)面加載出所有的盒子的樣式质和。
    //for(var i=0;i<liArr.length;i++){
    //    //利用animate()框架讓指定的屬性,緩慢運(yùn)動(dòng)到指定位置稚字。
    //    animate(liArr[i],{
    //        "width":json[i].width,  //第一個(gè)li饲宿,必須對(duì)應(yīng)第一個(gè)數(shù)組元素中的第一個(gè)的指定屬性
    //        "top":json[i].top,
    //        "left":json[i].left,
    //        "opacity":json[i].opacity,
    //        "zIndex":json[i].z
    //    });
    //    //liArr[i].style.width = json[i].width+"px";
    //    //liArr[i].style.top = json[i].top+"px";
    //    //liArr[i].style.left = json[i].left+"px";
    //    //liArr[i].style.opacity = json[i].opacity/100;
    //    //liArr[i].style.zIndex = json[i].z;
    //}


    move();
    //3.把兩側(cè)按鈕綁定事件厦酬。(調(diào)用同一個(gè)方法,只有一個(gè)參數(shù)瘫想,true為正向旋轉(zhuǎn)仗阅,false為反向旋轉(zhuǎn))
    //arrowChildren[0].
    //arrowChildren[1].
    //利用for...in...綁定事件。綁定后利用元素的className屬性知道是前一個(gè)還是后一個(gè)国夜,然后調(diào)用函數(shù)减噪。
    for(var k in arrowChildren){
        arrowChildren[k].onclick = function () {
            if(this.className === "prev"){
                if(flag === true){
                    flag = false;
                    move(true);
                    //點(diǎn)擊一次立刻修改為false,這樣兒別人就不能在點(diǎn)擊车吹。(點(diǎn)擊也不執(zhí)行move())
                }
            }else{
                if(flag){
                    flag = false;
                    move(false);
                }
            }
        }
    }

    //4.書(shū)寫(xiě)函數(shù)筹裕。
    // (操作數(shù)組。正向旋轉(zhuǎn):刪除數(shù)組中第一個(gè)樣式窄驹,添加到數(shù)組中的最后一位)
    // (操作數(shù)組朝卒。反向旋轉(zhuǎn):刪除數(shù)組中最后一個(gè)樣式,添加到數(shù)組中的第一位)
    function move(bool){
        //判斷:如果等于undefined,那么就不執(zhí)行這兩個(gè)if語(yǔ)句
        //if(bool === true || bool === false){
        if(bool !== undefined){
            if(bool){
                // (操作數(shù)組乐埠。反向旋轉(zhuǎn):刪除數(shù)組中最后一個(gè)元素抗斤,添加到數(shù)組中的第一位)
                //json.push();//在最后添加
                //json.pop();//刪除最后一位
                //json.unshift();//在最前面添加
                //json.shift();//刪除第一位

                //var ele = json.pop();
                //json.unshift(ele);
                json.unshift(json.pop());
            }else{
                // (操作數(shù)組。正向旋轉(zhuǎn):刪除數(shù)組中第一個(gè)元素丈咐,添加到數(shù)組中的最后一位)
                //var ele = json.shift();
                //json.push(ele);
                json.push(json.shift());
            }
        }
        //在次為頁(yè)面上的所有l(wèi)i賦值屬性豪治,利用緩動(dòng)框架
        for(var i=0;i<liArr.length;i++){
            //利用animate()框架讓指定的屬性,緩慢運(yùn)動(dòng)到指定位置扯罐。
            animate(liArr[i],{
                "width":json[i].width,  //第一個(gè)li负拟,必須對(duì)應(yīng)第一個(gè)數(shù)組元素中的第一個(gè)的指定屬性
                "top":json[i].top,
                "left":json[i].left,
                "opacity":json[i].opacity,
                "zIndex":json[i].z
            }, function () {
                //回調(diào)函數(shù),所有程序執(zhí)行完畢歹河,在初始化flag的值為true
                flag = true;
            });
        }
    }

}

jquery1.0.0.1.js

/**
 * Created by Lenovo on 2016/9/11.
 */
function show(ele){
    ele.style.display = "block";
}

/**
 * 獲取元素樣式兼容寫(xiě)法
 * @param ele
 * @param attr
 * @returns {*}
 */
function getStyle(ele,attr){
    if(window.getComputedStyle){
        return window.getComputedStyle(ele,null)[attr];
    }
    return ele.currentStyle[attr];
}

//參數(shù)變?yōu)?個(gè)
//參數(shù)變?yōu)?個(gè)
function animate(ele,json,fn){
    //先清定時(shí)器
    clearInterval(ele.timer);
    ele.timer = setInterval(function () {
        //開(kāi)閉原則
        var bool = true;


        //遍歷屬性和值掩浙,分別單獨(dú)處理json
        //attr == k(鍵)    target == json[k](值)
        for(var k in json){
            //四部
            var leader;
            //判斷如果屬性為opacity的時(shí)候特殊獲取值
            if(k === "opacity"){
                leader = getStyle(ele,k)*100 || 1;
            }else{
                leader = parseInt(getStyle(ele,k)) || 0;
            }

            //1.獲取步長(zhǎng)
            var step = (json[k] - leader)/10;
            //2.二次加工步長(zhǎng)
            step = step>0?Math.ceil(step):Math.floor(step);
            leader = leader + step;
            //3.賦值
            //特殊情況特殊賦值
            if(k === "opacity"){
                ele.style[k] = leader/100;
                //兼容IE678
                ele.style.filter = "alpha(opacity="+leader+")";
                //如果是層級(jí),一次行賦值成功秸歧,不需要緩動(dòng)賦值
                //為什么厨姚?需求!
            }else if(k === "zIndex"){
                ele.style.zIndex = json[k];
            }else{
                ele.style[k] = leader + "px";
            }
            //4.清除定時(shí)器
            //判斷: 目標(biāo)值和當(dāng)前值的差大于步長(zhǎng)键菱,就不能跳出循環(huán)
            //不考慮小數(shù)的情況:目標(biāo)位置和當(dāng)前位置不相等谬墙,就不能清除清除定時(shí)器。
            if(json[k] !== leader){
                bool = false;
            }
        }

        console.log(1);
        //只有所有的屬性都到了指定位置经备,bool值才不會(huì)變成false拭抬;
        if(bool){
            clearInterval(ele.timer);
            //所有程序執(zhí)行完畢了,現(xiàn)在可以執(zhí)行回調(diào)函數(shù)了
            //只有傳遞了回調(diào)函數(shù)侵蒙,才能執(zhí)行
            if(fn){
                fn();
            }
        }
    },25);
}



//獲取屏幕可視區(qū)域的寬高
function client(){
    if(window.innerHeight !== undefined){
        return {
            "width": window.innerWidth,
            "height": window.innerHeight
        }
    }else if(document.compatMode === "CSS1Compat"){
        return {
            "width": document.documentElement.clientWidth,
            "height": document.documentElement.clientHeight
        }
    }else{
        return {
            "width": document.body.clientWidth,
            "height": document.body.clientHeight
        }
    }
}

js.js

/**
 * Created by Lenovo on 2016/9/13.
 */
window.onload = function () {
    var arr = [
        {   //  1
            width:400,
            top:70,
            left:50,
            opacity:20,
            zIndex:2
        },
        {  // 2
            width:600,
            top:120,
            left:0,
            opacity:80,
            zIndex:3
        },
        {   // 3
            width:800,
            top:100,
            left:200,
            opacity:100,
            zIndex:4
        },
        {  // 4
            width:600,
            top:120,
            left:600,
            opacity:80,
            zIndex:3
        },
        {   //5
            width:400,
            top:70,
            left:750,
            opacity:20,
            zIndex:2
        }
    ];

    //0.獲取元素
    var slide = document.getElementById("slide");
    var liArr = slide.getElementsByTagName("li");
    var arrow = slide.children[1];
    var arrowChildren = arrow.children;
    //設(shè)置一個(gè)開(kāi)閉原則變量造虎,點(diǎn)擊以后修改這個(gè)值。
    var flag = true;

    //1.鼠標(biāo)放到輪播圖上纷闺,兩側(cè)的按鈕顯示算凿,移開(kāi)隱藏份蝴。
    slide.onmouseenter = function () {
        //arrow.style.opacity = 1;
        animate(arrow,{"opacity":100});
    }
    slide.onmouseleave = function () {
        //arrow.style.opacity = 1;
        animate(arrow,{"opacity":0});
    }

    move();
    //3.把兩側(cè)按鈕綁定事件。(調(diào)用同一個(gè)方法氓轰,只有一個(gè)參數(shù)婚夫,true為正向旋轉(zhuǎn),false為反向旋轉(zhuǎn))
    arrowChildren[0].onclick = function () {
        if(flag){
            flag = false;
            move(true);
        }
    }
    arrowChildren[1].onclick = function () {
        if(flag){
            flag = false;
            move(false);
        }
    }

    //4.書(shū)寫(xiě)函數(shù)署鸡。
    function move(bool){
        //判斷:如果等于undefined,那么就不執(zhí)行這兩個(gè)if語(yǔ)句
        if(bool === true || bool === false){
            if(bool){
                arr.unshift(arr.pop());
            }else{
                arr.push(arr.shift());
            }
        }
        //在次為頁(yè)面上的所有l(wèi)i賦值屬性案糙,利用緩動(dòng)框架
        for(var i=0;i<liArr.length;i++){
            animate(liArr[i],arr[i], function () {
                flag = true;
            });
        }
    }

}

其中圖片素材自己配置
效果展示:


走馬燈.gif

歡迎關(guān)注我的個(gè)人微信公眾號(hào),免費(fèi)送計(jì)算機(jī)各種最新視頻資源储玫!你想象不到的精彩!


0.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萤皂,一起剝皮案震驚了整個(gè)濱河市撒穷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裆熙,老刑警劉巖端礼,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異入录,居然都是意外死亡蛤奥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)僚稿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凡桥,“玉大人,你說(shuō)我怎么就攤上這事蚀同∶骞簦” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蠢络,是天一觀的道長(zhǎng)衰猛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)刹孔,這世上最難降的妖魔是什么啡省? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮髓霞,結(jié)果婚禮上卦睹,老公的妹妹穿的比我還像新娘。我一直安慰自己方库,他們只是感情好分预,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著薪捍,像睡著了一般笼痹。 火紅的嫁衣襯著肌膚如雪配喳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天凳干,我揣著相機(jī)與錄音晴裹,去河邊找鬼。 笑死救赐,一個(gè)胖子當(dāng)著我的面吹牛涧团,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播经磅,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泌绣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了预厌?” 一聲冷哼從身側(cè)響起阿迈,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轧叽,沒(méi)想到半個(gè)月后苗沧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炭晒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年待逞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片网严。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡识樱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出震束,到底是詐尸還是另有隱情牺荠,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布驴一,位于F島的核電站休雌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肝断。R本人自食惡果不足惜杈曲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胸懈。 院中可真熱鬧担扑,春花似錦、人聲如沸趣钱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)首有。三九已至燕垃,卻和暖如春枢劝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卜壕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工您旁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轴捎。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓鹤盒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親侦副。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦锯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容