zoukankan      html  css  js  c++  java
  • 图片轮播(左右切换)--JS原生和jQuery实现

    图片轮播(左右切换)--js原生和jquery实现

    左右切换的做法基本步骤跟 上一篇文章  淡入淡出 类似,只不过修改了一些特定的部分

    (1)首先是页面的结构部分

    对于我这种左右切换式

    1.首先是个外围部分(其实也就是最外边的整体wrapper)

    2.接着就是你设置图片轮播的地方(也就是一个banner吧)

    3.然后是一个图片组(可以用新的div 也可以直接使用 ul-->li形式)

    4.然后是图片两端的左箭头和右箭头
    5.然后是一个透明背景层,放在图片底部

    6.然后是一个图片描述info层,放在透明背景层的左下角(div 或 ul-->li)

    7.然后是一个按钮层,用来定位图片组的index吧,放在透明背景层的右下角(div 或 ul-->li)

    由此,可以先构造出html结构

    <div id="wrapper"><!-- 最外层部分 -->
            <div id="banner"><!-- 轮播部分 -->
                <ul class="imgList"><!-- 图片部分 -->
                <li><a href="#"><img src="./img/test1.jpg" width="400px" height="200px" alt="puss in boots1"></a></li>
                <li><a href="#"><img src="./img/test2.jpg" width="400px" height="200px" alt="puss in boots2"></a></li>
                <li><a href="#"><img src="./img/test3.jpg" width="400px" height="200px" alt="puss in boots3"></a></li>
                <li><a href="#"><img src="./img/test4.jpg" width="400px" height="200px" alt="puss in boots4"></a></li>
                <li><a href="#"><img src="./img/test5.jpg" width="400px" height="200px" alt="puss in boots5"></a></li>
                </ul>
                <img src="./img/prev.png" width="20px" height="40px" id="prev">
                <img src="./img/next.png" width="20px" height="40px" id="next">
                <div class="bg"></div> <!-- 图片底部背景层部分-->
                <ul class="infoList"><!-- 图片左下角文字信息部分 -->
                    <li class="infoOn">puss in boots1</li>
                    <li>puss in boots2</li>
                    <li>puss in boots3</li>
                    <li>puss in boots4</li>
                    <li>puss in boots5</li>
                </ul>
                <ul class="indexList"><!-- 图片右下角序号部分 -->
                    <li class="indexOn">1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                    <li>5</li>
                </ul>
            </div>
        </div>

    相对于之前,知识增多了两个箭头img标签

    (2)CSS样式部分(图片组的处理)跟淡入淡出式就不一样了

    淡入淡出只需要显示或者隐藏对应序号的图片就行了,直接通过display来设定

    左右切换式则是采用图片li 浮动,父层元素ul 总宽为总图片宽,并设定为有限banner宽度下隐藏超出宽度的部分

    然后当想切换到某序号的图片时,则采用其ul 定位 left样式设定相应属性值实现

    比如显示第一张图片初始定位left为0px, 要想显示第二张图片则需要left:-400px 处理

    <style type="text/css">
        body,div,ul,li,a,img{margin: 0;padding: 0;}
        ul,li{list-style: none;}
        a{text-decoration: none;}
    
        #wrapper{position: relative;margin: 30px auto;width: 400px;height: 200px;}
        #banner{position:relative;width: 400px;height: 200px;overflow: hidden;}
        .imgList{position:relative;width:2000px;height:200px;z-index: 10;overflow: hidden;}
        .imgList li{float:left;display: inline;}
        #prev,
        #next{position: absolute;top:80px;z-index: 20;cursor: pointer;opacity: 0.2;filter:alpha(opacity=20);}
        #prev{left: 10px;}
        #next{right: 10px;}
        #prev:hover,
        #next:hover{opacity: 0.5;filter:alpha(opacity=50);}
        .bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index:20;opacity: 0.4;filter:alpha(opacity=40);background: black;}
        .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}
        .infoList li{display: none;}
        .infoList .infoOn{display: inline;color: white;}
        .indexList{position: absolute;right: 10px;bottom: 5px;z-index: 30;}
        .indexList li{float: left;margin-right: 5px;padding: 2px 4px;border: 2px solid black;background: grey;cursor: pointer;}
        .indexList .indexOn{background: red;font-weight: bold;color: white;}
    </style>

    (3)页面基本已经构建好久可以进行js的处理了

    一、jQuery方式  demo

    照常先说jq处理

    1.全局变量等

     var curIndex = 0,  //当前index
                imgLen = $(".imgList li").length;  //图片总数

    2.自动切换定时器处理

          // 定时器自动变换2.5秒每次
        var autoChange = setInterval(function(){ 
            if(curIndex <  imgLen-1){ 
                curIndex ++; 
            }else{ 
                curIndex = 0;
            }
            //调用变换处理函数
            changeTo(curIndex);  
        },2500);

    3.为左右箭头添加事件处理

    左箭头

        //左箭头滑入滑出事件处理
        $("#prev").hover(function(){ 
            //滑入清除定时器
            clearInterval(autoChange);
        },function(){ 
            //滑出则重置定时器
            autoChangeAgain();
        });
        //左箭头点击处理
        $("#prev").click(function(){ 
            //根据curIndex进行上一个图片处理
            curIndex = (curIndex > 0) ? (--curIndex) : (imgLen - 1);
            changeTo(curIndex);
        });

    右箭头

     //右箭头滑入滑出事件处理
       $("#next").hover(function(){ 
            //滑入清除定时器
            clearInterval(autoChange);
        },function(){ 
            //滑出则重置定时器
            autoChangeAgain();
        });
        //右箭头点击处理
        $("#next").click(function(){ 
            curIndex = (curIndex < imgLen - 1) ? (++curIndex) : 0;
            changeTo(curIndex);
        });

    其中autoChangeAgain()就是一个重置定时器函数

    //清除定时器时候的重置定时器--封装
        function autoChangeAgain(){ 
                autoChange = setInterval(function(){ 
                if(curIndex < imgLen-1){ 
                    curIndex ++;
                }else{ 
                    curIndex = 0;
                }
            //调用变换处理函数
                changeTo(curIndex);  
            },2500);
            }

    其中changeTo()就是一个图片切换的处理函数

    function changeTo(num){ 
            var goLeft = num *  400;
            $(".imgList").animate({left: "-" + goLeft + "px"},500);
            $(".infoList").find("li").removeClass("infoOn").eq(num).addClass("infoOn");
            $(".indexList").find("li").removeClass("indexOn").eq(num).addClass("indexOn");
        }

    每传入一个图片序号,则按理进行goLeft

    4.为右下角的那几个li 按钮绑定事件处理

    //对右下角按钮index进行事件绑定处理等
        $(".indexList").find("li").each(function(item){ 
            $(this).hover(function(){ 
                clearInterval(autoChange);
                changeTo(item);
                curIndex = item;
            },function(){ 
                autoChangeAgain();
            });
        });

    jq就是这样,简便,原生代码量就有些多了

    完整代码

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5 <title>图片轮播 jq(左右切换)</title>
      6 <style type="text/css">
      7     body,div,ul,li,a,img{margin: 0;padding: 0;}
      8     ul,li{list-style: none;}
      9     a{text-decoration: none;}
     10 
     11     #wrapper{position: relative;margin: 30px auto;width: 400px;height: 200px;}
     12     #banner{position:relative;width: 400px;height: 200px;overflow: hidden;}
     13     .imgList{position:relative;width:2000px;height:200px;z-index: 10;overflow: hidden;}
     14     .imgList li{float:left;display: inline;}
     15     #prev,
     16     #next{position: absolute;top:80px;z-index: 20;cursor: pointer;opacity: 0.2;filter:alpha(opacity=20);}
     17     #prev{left: 10px;}
     18     #next{right: 10px;}
     19     #prev:hover,
     20     #next:hover{opacity: 0.5;filter:alpha(opacity=50);}
     21     .bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index:20;opacity: 0.4;filter:alpha(opacity=40);background: black;}
     22     .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}
     23     .infoList li{display: none;}
     24     .infoList .infoOn{display: inline;color: white;}
     25     .indexList{position: absolute;right: 10px;bottom: 5px;z-index: 30;}
     26     .indexList li{float: left;margin-right: 5px;padding: 2px 4px;border: 2px solid black;background: grey;cursor: pointer;}
     27     .indexList .indexOn{background: red;font-weight: bold;color: white;}
     28 </style>
     29 </head>
     30 <body>
     31     <div id="wrapper"><!-- 最外层部分 -->
     32         <div id="banner"><!-- 轮播部分 -->
     33             <ul class="imgList"><!-- 图片部分 -->
     34                 <li><a href="#"><img src="./img/test1.jpg" width="400px" height="200px" alt="puss in boots1"></a></li>
     35             <li><a href="#"><img src="./img/test2.jpg" width="400px" height="200px" alt="puss in boots2"></a></li>
     36             <li><a href="#"><img src="./img/test3.jpg" width="400px" height="200px" alt="puss in boots3"></a></li>
     37             <li><a href="#"><img src="./img/test4.jpg" width="400px" height="200px" alt="puss in boots4"></a></li>
     38             <li><a href="#"><img src="./img/test5.jpg" width="400px" height="200px" alt="puss in boots5"></a></li>
     39             </ul>
     40             <img src="./img/prev.png" width="20px" height="40px" id="prev">
     41             <img src="./img/next.png" width="20px" height="40px" id="next">
     42             <div class="bg"></div> <!-- 图片底部背景层部分-->
     43             <ul class="infoList"><!-- 图片左下角文字信息部分 -->
     44                 <li class="infoOn">puss in boots1</li>
     45                 <li>puss in boots2</li>
     46                 <li>puss in boots3</li>
     47                 <li>puss in boots4</li>
     48                 <li>puss in boots5</li>
     49             </ul>
     50             <ul class="indexList"><!-- 图片右下角序号部分 -->
     51                 <li class="indexOn">1</li>
     52                 <li>2</li>
     53                 <li>3</li>
     54                 <li>4</li>
     55                 <li>5</li>
     56             </ul>
     57         </div>
     58     </div>
     59     <script type="text/javascript" src="./js/jquery.min.js"></script>
     60     <script type="text/javascript">
     61     var curIndex = 0,  //当前index
     62             imgLen = $(".imgList li").length;  //图片总数
     63           // 定时器自动变换2.5秒每次
     64     var autoChange = setInterval(function(){ 
     65         if(curIndex <  imgLen-1){ 
     66             curIndex ++; 
     67         }else{ 
     68             curIndex = 0;
     69         }
     70         //调用变换处理函数
     71         changeTo(curIndex);  
     72     },2500);
     73 
     74      //左箭头滑入滑出事件处理
     75     $("#prev").hover(function(){ 
     76         //滑入清除定时器
     77         clearInterval(autoChange);
     78     },function(){ 
     79         //滑出则重置定时器
     80         autoChangeAgain();
     81     });
     82     //左箭头点击处理
     83     $("#prev").click(function(){ 
     84         //根据curIndex进行上一个图片处理
     85         curIndex = (curIndex > 0) ? (--curIndex) : (imgLen - 1);
     86         changeTo(curIndex);
     87     });
     88     
     89     //右箭头滑入滑出事件处理
     90    $("#next").hover(function(){ 
     91         //滑入清除定时器
     92         clearInterval(autoChange);
     93     },function(){ 
     94         //滑出则重置定时器
     95         autoChangeAgain();
     96     });
     97     //右箭头点击处理
     98     $("#next").click(function(){ 
     99         curIndex = (curIndex < imgLen - 1) ? (++curIndex) : 0;
    100         changeTo(curIndex);
    101     });
    102 
    103     //对右下角按钮index进行事件绑定处理等
    104     $(".indexList").find("li").each(function(item){ 
    105         $(this).hover(function(){ 
    106             clearInterval(autoChange);
    107             changeTo(item);
    108             curIndex = item;
    109         },function(){ 
    110             autoChangeAgain();
    111         });
    112     });
    113 
    114     //清除定时器时候的重置定时器--封装
    115     function autoChangeAgain(){ 
    116             autoChange = setInterval(function(){ 
    117             if(curIndex < imgLen-1){ 
    118                 curIndex ++;
    119             }else{ 
    120                 curIndex = 0;
    121             }
    122         //调用变换处理函数
    123             changeTo(curIndex);  
    124         },2500);
    125         }
    126 
    127     function changeTo(num){ 
    128         var goLeft = num *  400;
    129         $(".imgList").animate({left: "-" + goLeft + "px"},500);
    130         $(".infoList").find("li").removeClass("infoOn").eq(num).addClass("infoOn");
    131         $(".indexList").find("li").removeClass("indexOn").eq(num).addClass("indexOn");
    132     }
    133     </script>
    134 </body>
    135 </html>
    View Code

    二、js 原生实现  demo

    js原生大概也就是模拟jq的实现思路

    1.全局变量等

    var curIndex = 0,  //当前index
                imgArr = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //获取图片组
                imgLen = imgArr.length,
                infoArr = getElementsByClassName("infoList")[0].getElementsByTagName("li"), //获取图片info组
                indexArr = getElementsByClassName("indexList")[0].getElementsByTagName("li"); //获取控制index组

    2.自动切换定时器处理

           // 定时器自动变换2.5秒每次
        var autoChange = setInterval(function(){ 
            if(curIndex < imgLen -1){ 
                curIndex ++; 
            }else{ 
                curIndex = 0;
            }
            //调用变换处理函数
            changeTo(curIndex);  
        },2500);

    同样的,有一个重置定时器的函数

      //清除定时器时候的重置定时器--封装
        function autoChangeAgain(){ 
                autoChange = setInterval(function(){ 
                if(curIndex < imgLen -1){ 
                    curIndex ++;
                }else{ 
                    curIndex = 0;
                }
            //调用变换处理函数
                changeTo(curIndex);  
            },2500);
            }

    3.因为有一些class呀,所以来几个class函数的模拟也是需要的

     //通过class获取节点
        function getElementsByClassName(className){ 
            var classArr = [];
            var tags = document.getElementsByTagName('*');
            for(var item in tags){ 
                if(tags[item].nodeType == 1){ 
                    if(tags[item].getAttribute('class') == className){ 
                        classArr.push(tags[item]);
                    }
                }
            }
            return classArr; //返回
        }
    
        // 判断obj是否有此class
        function hasClass(obj,cls){    //class位于单词边界
            return obj.className.match(new RegExp('(\s|^)' + cls + '(\s|$)'));
          }
          //给 obj添加class
        function addClass(obj,cls){  
            if(!this.hasClass(obj,cls)){ 
                  obj.className += cls;
            }
        }
        //移除obj对应的class
        function removeClass(obj,cls){  
            if(hasClass(obj,cls)){ 
                var reg = new RegExp('(\s|^)' + cls + '(\s|$)');
                     obj.className = obj.className.replace(reg,'');
            }
        }

    4.要左右切换,就得模拟jq的animate-->left .

    我的思路就是动态地设置element.style.left 进行定位。因为要有一个渐进的过程,所以加上的一点点阶段处理。

    定位的时候left的设置也是有点复杂的..要考虑方向等情况

      //图片组相对原始左移dist px距离
        function goLeft(elem,dist){ 
            if(dist == 400){  //第一次时设置left为0px 或者直接使用内嵌法 style="left:0;"
                elem.style.left = "0px";
            }
            var toLeft;  //判断图片移动方向是否为左
            dist = dist + parseInt(elem.style.left);  //图片组相对当前移动距离
            if(dist<0){   
                toLeft = false;
                dist = Math.abs(dist);
            }else{ 
                toLeft = true;
            }
            for(var i=0;i<= dist/20;i++){  //这里设定缓慢移动,10阶每阶40px
                (function(_i){ 
                    var pos = parseInt(elem.style.left); //获取当前left
                    setTimeout(function(){ 
                        pos += (toLeft)? -(_i * 20) : (_i * 20);  //根据toLeft值指定图片组位置改变
                        //console.log(pos);
                        elem.style.left = pos + "px";
                    },_i * 25); //每阶间隔50毫秒
                })(i);
            }
        }

    上头也看到了,我初始了left的值为0px

    我试过了,如果不初始或者把初始的left值写在行内css样式表里边,就总会报错取不到

    所以直接在js中初始化或者在html中内嵌初始化也可。

    5.接下来就是切换的函数实现了,比如要切换到序号为num的图片

    //左右切换处理函数
        function changeTo(num){ 
            //设置image
            var imgList = getElementsByClassName("imgList")[0];
            goLeft(imgList,num*400); //左移一定距离
            //设置image 的 info
            var curInfo = getElementsByClassName("infoOn")[0];
            removeClass(curInfo,"infoOn");
            addClass(infoArr[num],"infoOn");
            //设置image的控制下标 index
            var _curIndex = getElementsByClassName("indexOn")[0];
            removeClass(_curIndex,"indexOn");
            addClass(indexArr[num],"indexOn");
        }

    6.然后再给左右箭头还有右下角那堆index绑定事件处理

      //给左右箭头和右下角的图片index添加事件处理
      function addEvent(){
        for(var i=0;i<imgLen;i++){ 
            //闭包防止作用域内活动对象item的影响
            (function(_i){  
            //鼠标滑过则清除定时器,并作变换处理
            indexArr[_i].onmouseover = function(){ 
                clearTimeout(autoChange);
                changeTo(_i);
                curIndex = _i;
            };
            //鼠标滑出则重置定时器处理
            indexArr[_i].onmouseout = function(){ 
                autoChangeAgain();
            };
             })(i);
        }
    
        //给左箭头prev添加上一个事件
        var prev = document.getElementById("prev");
        prev.onmouseover = function(){ 
            //滑入清除定时器
            clearInterval(autoChange);
        };
        prev.onclick = function(){ 
            //根据curIndex进行上一个图片处理
            curIndex = (curIndex > 0) ? (--curIndex) : (imgLen - 1);
            changeTo(curIndex);
        };
        prev.onmouseout = function(){ 
            //滑出则重置定时器
            autoChangeAgain();
        };
    
         //给右箭头next添加下一个事件
        var next = document.getElementById("next");
        next.onmouseover = function(){ 
            clearInterval(autoChange);
        };
        next.onclick = function(){ 
            curIndex = (curIndex < imgLen - 1) ? (++curIndex) : 0;
            changeTo(curIndex);
        };
        next.onmouseout = function(){ 
            autoChangeAgain();
        };
    }

    7.最后的最后,没啥了. 噢好像还要调用一下下那个 addEvent() ..

    完整代码  代码量有些冗杂..

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5 <title>图片轮播 js原生(左右切换)</title>
      6 <style type="text/css">
      7     body,div,ul,li,a,img{margin: 0;padding: 0;}
      8     ul,li{list-style: none;}
      9     a{text-decoration: none;}
     10 
     11     #wrapper{position: relative;margin: 30px auto;width: 400px;height: 200px;}
     12     #banner{position:relative;width: 400px;height: 200px;overflow: hidden;}
     13     .imgList{position:relative;width:2000px;height:200px;z-index: 10;overflow: hidden;}
     14     .imgList li{float:left;display: inline;}
     15     #prev,
     16     #next{position: absolute;top:80px;z-index: 20;cursor: pointer;opacity: 0.2;filter:alpha(opacity=20);}
     17     #prev{left: 10px;}
     18     #next{right: 10px;}
     19     #prev:hover,
     20     #next:hover{opacity: 0.5;filter:alpha(opacity=50);}
     21     .bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index:20;opacity: 0.4;filter:alpha(opacity=40);background: black;}
     22     .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}
     23     .infoList li{display: none;}
     24     .infoList .infoOn{display: inline;color: white;}
     25     .indexList{position: absolute;right: 10px;bottom: 5px;z-index: 30;}
     26     .indexList li{float: left;margin-right: 5px;padding: 2px 4px;border: 2px solid black;background: grey;cursor: pointer;}
     27     .indexList .indexOn{background: red;font-weight: bold;color: white;}
     28 </style>
     29 </head>
     30 <body>
     31     <div id="wrapper"><!-- 最外层部分 -->
     32         <div id="banner"><!-- 轮播部分 -->
     33             <ul class="imgList"><!-- 图片部分 -->
     34                 <li><a href="#"><img src="./img/test1.jpg" width="400px" height="200px" alt="puss in boots1"></a></li>
     35             <li><a href="#"><img src="./img/test2.jpg" width="400px" height="200px" alt="puss in boots2"></a></li>
     36             <li><a href="#"><img src="./img/test3.jpg" width="400px" height="200px" alt="puss in boots3"></a></li>
     37             <li><a href="#"><img src="./img/test4.jpg" width="400px" height="200px" alt="puss in boots4"></a></li>
     38             <li><a href="#"><img src="./img/test5.jpg" width="400px" height="200px" alt="puss in boots5"></a></li>
     39             </ul>
     40             <img src="./img/prev.png" width="20px" height="40px" id="prev">
     41             <img src="./img/next.png" width="20px" height="40px" id="next">
     42             <div class="bg"></div> <!-- 图片底部背景层部分-->
     43             <ul class="infoList"><!-- 图片左下角文字信息部分 -->
     44                 <li class="infoOn">puss in boots1</li>
     45                 <li>puss in boots2</li>
     46                 <li>puss in boots3</li>
     47                 <li>puss in boots4</li>
     48                 <li>puss in boots5</li>
     49             </ul>
     50             <ul class="indexList"><!-- 图片右下角序号部分 -->
     51                 <li class="indexOn">1</li>
     52                 <li>2</li>
     53                 <li>3</li>
     54                 <li>4</li>
     55                 <li>5</li>
     56             </ul>
     57         </div>
     58     </div>
     59     <script type="text/javascript">
     60     var curIndex = 0,  //当前index
     61             imgArr = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //获取图片组
     62             imgLen = imgArr.length,
     63             infoArr = getElementsByClassName("infoList")[0].getElementsByTagName("li"), //获取图片info组
     64             indexArr = getElementsByClassName("indexList")[0].getElementsByTagName("li"); //获取控制index组
     65           // 定时器自动变换2.5秒每次
     66     var autoChange = setInterval(function(){ 
     67         if(curIndex < imgLen -1){ 
     68             curIndex ++; 
     69         }else{ 
     70             curIndex = 0;
     71         }
     72         //调用变换处理函数
     73         changeTo(curIndex);  
     74     },2500);
     75 
     76     //清除定时器时候的重置定时器--封装
     77     function autoChangeAgain(){ 
     78             autoChange = setInterval(function(){ 
     79             if(curIndex < imgLen -1){ 
     80                 curIndex ++;
     81             }else{ 
     82                 curIndex = 0;
     83             }
     84         //调用变换处理函数
     85             changeTo(curIndex);  
     86         },2500);
     87         }
     88 
     89     //调用添加事件处理
     90     addEvent();
     91 
     92     //给左右箭头和右下角的图片index添加事件处理
     93   function addEvent(){
     94     for(var i=0;i<imgLen;i++){ 
     95         //闭包防止作用域内活动对象item的影响
     96         (function(_i){  
     97         //鼠标滑过则清除定时器,并作变换处理
     98         indexArr[_i].onmouseover = function(){ 
     99             clearTimeout(autoChange);
    100             changeTo(_i);
    101             curIndex = _i;
    102         };
    103         //鼠标滑出则重置定时器处理
    104         indexArr[_i].onmouseout = function(){ 
    105             autoChangeAgain();
    106         };
    107          })(i);
    108     }
    109 
    110     //给左箭头prev添加上一个事件
    111     var prev = document.getElementById("prev");
    112     prev.onmouseover = function(){ 
    113         //滑入清除定时器
    114         clearInterval(autoChange);
    115     };
    116     prev.onclick = function(){ 
    117         //根据curIndex进行上一个图片处理
    118         curIndex = (curIndex > 0) ? (--curIndex) : (imgLen - 1);
    119         changeTo(curIndex);
    120     };
    121     prev.onmouseout = function(){ 
    122         //滑出则重置定时器
    123         autoChangeAgain();
    124     };
    125 
    126      //给右箭头next添加下一个事件
    127     var next = document.getElementById("next");
    128     next.onmouseover = function(){ 
    129         clearInterval(autoChange);
    130     };
    131     next.onclick = function(){ 
    132         curIndex = (curIndex < imgLen - 1) ? (++curIndex) : 0;
    133         changeTo(curIndex);
    134     };
    135     next.onmouseout = function(){ 
    136         autoChangeAgain();
    137     };
    138 }
    139 
    140     //左右切换处理函数
    141     function changeTo(num){ 
    142         //设置image
    143         var imgList = getElementsByClassName("imgList")[0];
    144         goLeft(imgList,num*400); //左移一定距离
    145         //设置image 的 info
    146         var curInfo = getElementsByClassName("infoOn")[0];
    147         removeClass(curInfo,"infoOn");
    148         addClass(infoArr[num],"infoOn");
    149         //设置image的控制下标 index
    150         var _curIndex = getElementsByClassName("indexOn")[0];
    151         removeClass(_curIndex,"indexOn");
    152         addClass(indexArr[num],"indexOn");
    153     }
    154 
    155 
    156     //图片组相对原始左移dist px距离
    157     function goLeft(elem,dist){ 
    158         if(dist == 400){  //第一次时设置left为0px 或者直接使用内嵌法 style="left:0;"
    159             elem.style.left = "0px";
    160         }
    161         var toLeft;  //判断图片移动方向是否为左
    162         dist = dist + parseInt(elem.style.left);  //图片组相对当前移动距离
    163         if(dist<0){   
    164             toLeft = false;
    165             dist = Math.abs(dist);
    166         }else{ 
    167             toLeft = true;
    168         }
    169         for(var i=0;i<= dist/20;i++){  //这里设定缓慢移动,10阶每阶40px
    170             (function(_i){ 
    171                 var pos = parseInt(elem.style.left); //获取当前left
    172                 setTimeout(function(){ 
    173                     pos += (toLeft)? -(_i * 20) : (_i * 20);  //根据toLeft值指定图片组位置改变
    174                     //console.log(pos);
    175                     elem.style.left = pos + "px";
    176                 },_i * 25); //每阶间隔50毫秒
    177             })(i);
    178         }
    179     }
    180 
    181     //通过class获取节点
    182     function getElementsByClassName(className){ 
    183         var classArr = [];
    184         var tags = document.getElementsByTagName('*');
    185         for(var item in tags){ 
    186             if(tags[item].nodeType == 1){ 
    187                 if(tags[item].getAttribute('class') == className){ 
    188                     classArr.push(tags[item]);
    189                 }
    190             }
    191         }
    192         return classArr; //返回
    193     }
    194 
    195     // 判断obj是否有此class
    196     function hasClass(obj,cls){    //class位于单词边界
    197         return obj.className.match(new RegExp('(\s|^)' + cls + '(\s|$)'));
    198       }
    199       //给 obj添加class
    200     function addClass(obj,cls){  
    201         if(!this.hasClass(obj,cls)){ 
    202               obj.className += cls;
    203         }
    204     }
    205     //移除obj对应的class
    206     function removeClass(obj,cls){  
    207         if(hasClass(obj,cls)){ 
    208             var reg = new RegExp('(\s|^)' + cls + '(\s|$)');
    209                  obj.className = obj.className.replace(reg,'');
    210         }
    211     }
    212 
    213     </script>
    214 </body>
    215 </html>
    View Code
  • 相关阅读:
    Oracle 查询出来的数据取第一条
    如何将Oracle 当前日期加一天、一分钟
    Oracle 增加修改删除字段
    asp.net,简单权限。存取读XML
    SQL中使用update inner join和delete inner join
    防止浏览器记住用户名及密码的简单实用方法
    vb.net 接口POST方式传参数提交返回值
    导入EXCEL表时,提示"找不到可安装的ISAM"怎么办
    vb.net读取EXCEL
    导入excel错误:外部表不是预期的格式 解决方案
  • 原文地址:https://www.cnblogs.com/imwtr/p/4448876.html
Copyright © 2011-2022 走看看