• 轮播图片,自动切换


    JS:常见多张图片切换、图片轮播、自动切换效果代码

      (2017-02-17 15:57:01)
     

    效果如图所示:

    设计思路:

    1、设计好图片轮播HTML代码,以及CSS定位,CSS中着重运用好position属性,relative和absolute;

       CSS代码如下:

     1 <style type="text/css">
     2 *{margin:0; padding:0;}
     3 ul{list-style-type:none;}
     4 body{ color:#333333; font:12px/1.6em Arial, Helvetica, sans-serif;}
     5 #picfocus{width:345px; height:235px; border:1px solid #ccc; margin:5px;}
     6 #piclist{position: relative; float:left; width:240px; height:225px; overflow:hidden; margin:5px 0px 0px 9px; display:inline;}
     7 #pic{position:absolute;}
     8 #pic li{overflow:hidden;width:240px; height:225px;}
     9 #pic img{ width:240px; height:225px;}
    10 #pictxtbg{position:absolute; bottom:0px; left:0px; background: none repeat scroll 0 0 #000000; opacity:0.5; width:240px; height:35px; filter:alpha(opacity=50);}
    11 #pictxt{ position:absolute; bottom:8px; left:8px; color:#fff;}
    12 #pictxt .normal{display:none;}
    13 #pictxt .current{ display:block;}
    14 #pic{ overflow:hidden;}
    15 #picbtn{float:right; display:inline; margin:2px 9px 0px 0px;}
    16 #picbtn li{ cursor:pointer; height:57px; opacity:0.5; filter:alpha(opacity=50);}
    17 #picbtn img{ width:75px; height:45px; margin:7px 0px 0px 11px;}
    18 #picbtn .current{ opacity:1; filter:alpha(opacity=100);}
    19 </style>

    2、JS代码设计思路:

      (1)当鼠标移动到小图片按钮上时,促发onmouseover函数,调整大图片显示的当前位置,显示当前对应的大图片,以及改变当前显示的小图片按钮及图片标题样式。

      (2)编写移动相应的大图片到当前位置的函数,movePic(pic,final_x,final_y,interval);

           编写初始化小图片按钮的样式及标题样式,classNormal(picbtn,pictxt)

           编写显示当前图片的样式及标题样式,classCurrent(picbtn,pictxt,n)

      (3)当鼠标移动到小图片按钮时,调用以上三个函数。

      (4)自动切换图片,编写函数autoChange(),利用setInterval('autoChange()',interval)函数自动切换图片。

      相关js代码为:

      1 <script type="text/javascript">
      2   //加载window.onload
      3    function addEventLoad(func){
      4     var oldonload = window.onload;
      5     if(typeof(window.onload) != 'funciton'){
      6      window.onload = func;
      7     }
      8     else {
      9      window.onload = function(){
     10       oldonload();
     11       func();
     12      }
     13     }
     14    }
     15   //初始化小图片及图片标题样式
     16   function classNormal(picbtn,pictxt){
     17    var picbtns = document.getElementById(picbtn).getElementsByTagName("li");
     18    var pictxts = document.getElementById(pictxt).getElementsByTagName("li");
     19    for(var i = 0; i < picbtns.length; i++){
     20     picbtns[i].className = "normal";
     21     pictxts[i].className = "normal";
     22    } 
     23   }
     24   //当前显示的小图片及图片标题样式
     25   function classCurrent(picbtn,pictxt,n){
     26    var picbtns = document.getElementById(picbtn).getElementsByTagNam("li");
     27    var pictxts = document.getElementById(pictxt).getElementsByTagName("li");
     28    picbtns[n].className = "current";
     29    pictxts[n].className = "current";
     30   }
     31   //移动图片
     32   function movePic(pic,final_x,final_y,interval){
     33    var elem = document.getElementBy(pic);
     34    var xpos = parseInt(elem.style.left);
     35    var ypos = parseInt(elem.style.top);
     36    if(elem.movement){
     37     clearTimeout(elem.movement);
     38    }
     39    if (!elem.style.left) {
     40        elem.style.left = "0px";
     41    }
     42    if (!elem.style.top) {
     43        elem.style.top = "0px";
     44    }
     45    if (xpos == final_x && ypos == final_y) {
     46        return true;
     47    }
     48   
     49    //直接将目标位置赋值给图片当前位置。也可以采用以下代码产生动画
     50 
     51   
     52    //以下代码:按间隔时间、平均移动的距离,缓慢移动图片到目标位置,产生动画效果
     53    var dist;
     54       if(xpos < final_x){
     55     dist = Math.ceil((final_x - xpos)/10);
     56     xpos += dist;
     57    }
     58    if(xpos > final_x){
     59     dist = Math.ceil((xpos - final_x)/10);
     60     xpos -= dist;
     61    }
     62    if(ypos < final_y){
     63     dist = Math.ceil((final_y - ypos)/10);
     64     ypos += dist;
     65    }
     66    if(ypos > final_y){
     67     dist = Math.ceil((ypos - final_y)/10);
     68     ypos -= dist;
     69    }
     70    elem.style.left = xpos + "px";
     71    elem.style.top = ypos + "px";
     72    var repeat = "movePic('" + pic + "'," + final_x + "," + final_y + "," + interval + ")";
     73    elem.movement = setTimeout(repeat,interval);          
     74   }
     75   //当鼠标移动到小图片上时切换图片
     76   function changePic(){
     77    if(!document.getElementById('picfocus')) return false;
     78    document.getElementById('picfocus').onmouseover = function(){autokey = true};
     79    document.getElementById('picfocus').onmouseout = function(){autokey = false};
     80    var picbtns = document.getElementById("picbtn").getElementsByTagName("li");  
     81    var picnums = picbtns.length;
     82    picbtns[0].onmouseover = function(){
     83     movePic('pic',0,0,5);
     84     classNormal('picbtn','pictxt');
     85     classCurrent('picbtn','pictxt',0);   
     86    }
     87    if(picnums >= 2){
     88     picbtns[1].onmouseover = function(){
     89     movePic('pic',0,-225,5);
     90     classNormal('picbtn','pictxt');
     91     classCurrent('picbtn','pictxt',1);   
     92        } 
     93    }
     94    if(picnums >= 3){
     95     picbtns[2].onmouseover = function(){
     96     movePic('pic',0,-450,5);
     97     classNormal('picbtn','pictxt');
     98     classCurrent('picbtn','pictxt',2);   
     99        } 
    100    }
    101    if(picnums >= 4){
    102     picbtns[3].onmouseover = function(){
    103     movePic('pic',0,-675,5);
    104     classNormal('picbtn','pictxt');
    105     classCurrent('picbtn','pictxt',3);   
    106        } 
    107    }
    108   }
    109   //自动切换图片
    110   var autokey = false;
    111   setInterval('autoChange()',5000);
    112   function autoChange(){
    113    if(autokey) return false;
    114    var picbtns = document.getElementById("picbtn").getElementsByTagName("li");
    115    var len = picbtns.length;
    116    for(var i = 0; i < len; i++){
    117    if(picbtns[i].className == "current"){
    118      var currentNum = i;
    119     }
    120    }
    121    if(currentNum == 0 && len >= 1){
    122     movePic('pic',0,-225,5);
    123     classNormal('picbtn','pictxt');
    124     classCurrent('picbtn','pictxt',1); 
    125    }
    126    if(currentNum == 1 && len >= 2){
    127     movePic('pic',0,-450,5);
    128     classNormal('picbtn','pictxt');
    129     classCurrent('picbtn','pictxt',2); 
    130    }
    131    if(currentNum == 2 && len >= 3){
    132     movePic('pic',0,-675,5);
    133     classNormal('picbtn','pictxt');
    134     classCurrent('picbtn','pictxt',3); 
    135    }
    136    if(currentNum == 3 && len >= 4){
    137     movePic('pic',0,0,5);
    138     classNormal('picbtn','pictxt');
    139     classCurrent('picbtn','pictxt',0); 
    140    }
    141   }
    142   addEventLoad(changePic);
    143 
    144 </script>

    3:相关html代码为:

     1 <body>
     2 
     3 <div id="picfocus">
     4   <div id="piclist">
     5       <div id="pic" style="left:0px; top:0px;">
     6           <ul>
     7               <li><a href="#" target="_blank"><img border="0" alt="" src="https://p1.ssl.qhimg.com/t0173f3dea88ac15b71.jpg" /></a></li>
     8               <li><a href="#" target="_blank"><img  border="0" alt="" src="https://p1.ssl.qhimg.com/t01bef86c511e1f1cec.jpg" /></a></li>
     9               <li><a href="#" target="_blank"><img border="0" alt="" src="https://p1.ssl.qhimg.com/t016e4e5efc68cc85d3.jpg" /></a></li>
    10               <li><a href="#" target="_blank"><img border="0" alt="" src="https://p2.ssl.qhimg.com/t01a10ab682ccc5b641.jpg" /></a></li>                       
    11            </ul>
    12       </div>
    13       <div id="pictxtbg"></div>
    14       <div id="pictxt">
    15             <ul>
    16               <li class="current">刘金山被拒门外踹保安?助理:是劝架</li>
    17               <li class="normal">《复仇者联盟》《与妻书》《形影不离》映 </li>
    18               <li class="normal">李雪健问鼎百合奖为晚辈蒋梦婕提裙子</li>
    19               <li class="normal">刘亦菲携干爹深夜会友人贴面吻告别</li>
    20            </ul>
    21       </div>
    22   </div>
    23   <div id="picbtn">
    24       <ul>
    25               <li class="current"><img src="https://p2.ssl.qhimg.com/t01a10ab682ccc5b641.jpg" /></li>
    26               <li class="normal"><img src="https://p1.ssl.qhimg.com/t016e4e5efc68cc85d3.jpg" /></li>                
    27               <li class="normal"><img src="https://p1.ssl.qhimg.com/t01bef86c511e1f1cec.jpg" /></li>
    28               <li class="normal"><img src="https://p1.ssl.qhimg.com/t0173f3dea88ac15b71.jpg" /></li>         
    29           </ul>
    30   </div>
    31 </div>
    32 </body>
  • 相关阅读:
    转:Backbone源码分析-Backbone架构+流程图
    PHP标记、
    虚拟机
    PHP学习的第一天
    对基础班的总结
    JS
    基础班学习总结
    react-router-dom
    vuecli3 自适应pc端界面
    vuecli内使用hotcss做移动端适配
  • 原文地址:https://www.cnblogs.com/xuxiaoxia/p/6430404.html
Copyright © 2020-2023  润新知