javascript实现图片循环滚动效果

 

如图,图片实现无缝滚动,点击向左向右滚动控制方向,且当鼠标悬浮在div中时,图片停止滚动;当鼠标离开div中,图片继续滚动。

原理:复制一遍整个ul,给定一个速度让ul向右或向左滚动,当整个ul要滚动到div边界时,再将整个复制的ul向左或向右拖拽直至整个ul中的图片归位。

                                                                                                图①

 

                                                                                                  图②

 

                                                                                                    图③

                                                                                                       图④ 

                                                                                                       图⑤

                                                                                                                                                                                                           

如图图片向左滚动,当运动到图③位置时,offsetLeft就小于二分之一ul的宽度,此时将ul中的第一个图片拉回到起点即图①的位置;

同理当图片向右滚动运动到图④位置,此时在div内部的ul的offsetLeft就大于0,将ul中的第八个图片拉回到原位即图⑤的位置。

上代码:

 

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta charset="utf-8">
  5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6 <title>无缝滚动,移入暂停</title>
  7 <style>
  8 body,div,ul,li,p
  9 {
 10     padding: 0;
 11     margin: 0;
 12 }
 13 #div1
 14 {
 15     position: relative;
 16     margin: 10px auto;
 17     border: 1px solid black;
 18     width: 680px;
 19     height:170px;
 20     overflow: hidden;
 21 }
 22 #div1 ul
 23 {
 24     position: absolute;
 25     left:0;
 26 }
 27 #div1 ul li
 28 {
 29     float:left;
 30     padding: 10px;
 31     list-style: none;
 32     width: 150px;
 33     height: 150px;
 34 }
 35 #div1 ul li img
 36 {
 37     width: 150px;
 38     height: 150px;
 39 }
 40 </style>
 41 <script>
 42 window.onload = function()
 43 {
 44     var oDiv = document.getElementById("div1");
 45     var oUl = document.getElementsByTagName("ul")[0];
 46     var oLi = document.getElementsByTagName("li");
 47     var oA = document.getElementsByTagName("a");
 48     var timer = null;
 49     var iSpeed = 8;
 50     //复制一遍ul
 51     oUl.innerHTML +=oUl.innerHTML;
 52     //ul的宽度是所有li宽度之和,复制ul之后的整个ul的宽度就是li的长度乘以一个li的宽度
 53     oUl.style.width = oLi.length*oLi[0].offsetWidth + "px";
 54     function fnMove()
 55     {
 56         //图片向左移动时的条件,即在div里的ul的offsetLeft小于一个ul的宽度
 57         if (oUl.offsetLeft<-oUl.offsetWidth/2)
 58         {
 59             //将整个复制的ul向右拖拽直至整个ul中的第一张图归位到起点
 60             oUl.style.left = 0;
 61         }
 62         //图片向右移动时的条件,即在div里的ul的offsetLeft大于等于0
 63         else if (oUl.offsetLeft>=0)
 64         {
 65             //将整个复制的ul向左拖拽直至整个ul中的第一张图归位到起点
 66             oUl.style.left = -oUl.offsetWidth/2 + "px";
 67         }
 68         //给ul一个速度让整个ul的offsetLeft增加或减少,速度为正则向右移动,速度为负则向左移动
 69         oUl.style.left = oUl.offsetLeft +iSpeed + "px";
 70     }
 71     timer=setInterval(fnMove,30)
 72     //点击向左滚动即触发第一个a元素标签
 73     oA[0].onclick = function()
 74     {
 75         iSpeed = -8;
 76     }
 77     //点击向右滚动即触发第二个a元素标签
 78     oA[1].onclick = function()
 79     {
 80         iSpeed = 8;
 81     }
 82     //当鼠标移动到div里面的时候图片滚动暂停,此时清除定时器即可。
 83     oDiv.onmouseover = function()
 84     {
 85         clearInterval(timer);
 86     }
 87     //当鼠标移出div的时候图片继续滚动,此时重新加载定时器。
 88     oDiv.onmouseout = function()
 89     {
 90         timer=setInterval(fnMove,30);
 91     }
 92 }
 93 </script>
 94 </head>
 95 <body>
 96 <div id="div1">
 97     <ul>
 98         <li><img src="img/1.png"></li>
 99         <li><img src="img/2.png"></li>
100         <li><img src="img/3.png"></li>
101         <li><img src="img/4.png"></li>
102     </ul>
103 </div>
104 <a href="javascript:;">向左滚动</a>
105 <a href="javascript:;">向右滚动</a>
106 </body>
107 </html>

 

转载于:https://www.cnblogs.com/amberriver2759/p/8514900.html

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值