轮播图的无限循环滑动

1 if(leftMargin ==-1250){
2                         time=0;
3                         leftMargin = -250;
4                         $("#move").animate({left:leftMargin + "px"},time);
5                         leftMargin=-500;
6                          time=1000;
7                         $("#move").animate({left:leftMargin + "px"},time);
8                     }
View Code

1.第一种做法:假如说有三张图片分别是a、b、c,我就再放三张图片还是之前的图片a、b、c,这样就有六张图了。然后定义一个ul标签,这个ul的宽度等于这六张图片的宽度,在css样式中我们让上述的ul标签的左边距为负的一个图片的宽度,

代码如下:

<!DOCTYPE html>

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8" />
 5         <title></title>
 6         <style>
 7              *{
 8                  margin: 0;
 9                  padding: 0;
10              }
11             .container{
12                 width: 250px;
13                 height: 164px;
14                 position: relative;
15                 background-color: pink;
16                 margin: 0 auto;
17                 margin-top: 100px;
18                 overflow: hidden;
19                 
20             }
21             ul{
22                 width: 1500px;
23                 height: 164px;
24                 list-style: none;
25                 display: block;
26                 position: absolute;
27                 left: -250px;
28                 /*margin-top: -17px;*/
29                 
30             }
31             ul li{
32                 float: left;
33             }
34             a{
35                 width: 28px;
36                 height: 62px;
37                 display: block;
38                 background-color: rgba(0,0,0,0.5);
39                 position: absolute;
40                 right: 0;
41                 top: 30%;
42                 font-size: 24px;
43                 color: ghostwhite;
44                 text-decoration: none;
45                 line-height: 62px;
46                 text-align: center;
47                 z-index: 100;
48             }
49         </style>
50         <script src = "jquery-1.11.1.min.js"></script>
51         <script>
52             $(document).ready(function(){
53                 var leftMargin = -250;
54                 $("#btn").click(function(){
55                     leftMargin -= 250;
56                     var time = 1000; 
57                     if(leftMargin ==-1250){
58                         

                              time=0;
                              leftMargin = -250;
                              $("#move").animate({left:leftMargin + "px"},time);

61                          leftMargin=-500;
62                          time=1000;
63                         $("#move").animate({left:leftMargin + "px"},time);
64                     }
65                     else{
66                     $("#move").animate({left:leftMargin + "px"},time);
67                     }
68                 });
69             });
70         </script>
71     </head>
72     <body>
73     <div class = "container">
74         <a href="#" id = "btn">></a>
75      <ul id = "move">
76      
77          <li><img src = "img/34.jpg"/></li>
78          <li><img src = "img/41.jpg"/></li>
79          <li><img src = "img/42.jpg"/></li>
80          
81          <li><img src = "img/34.jpg"/></li>
82          <li><img src = "img/41.jpg"/></li>
83          <li><img src = "img/42.jpg"/></li>
84      </ul>
85     </div>    
86     </body>
87 </html> 

按照代码来看,我们运行后(在第一次点击向左滑动的按钮前)一开始看到的是

"img/41.jpg"这张图,然后每点击一下ul就向左移一张图片的宽度,当我们点击两次后看到第三张图时即"img/34.jpg",此时我们再点击向左滑动的按钮的话,我们就让ul再往左移一张图片的宽度,这样我们即将看到的图是ul标签当中的第五张图,其实也是之前看到的第一张图
"img/41.jpg"。为了做出正常的无限滑动效果,所以在js中去实现:当你再次点击向左滑动的按钮的话,我便以零秒钟的时间回到ul中第二张图的位置,也即是我们看到的第一张图,也就是此时ul的左边距为-250px,然后紧接着就让它已正常的滑动时间,滑动到ul标签中的第三张图的位置(也即是我们看到的第二张图)。
 
1 if(leftMargin ==-1250){
2      time=0;
3      leftMargin = -250;
4      $("#move").animate({left:leftMargin + "px"},time);
5      leftMargin=-500;
6      time=1000;
7      $("#move").animate({left:leftMargin + "px"},time);
8   }

这个是最关键的环节做得判断和处理。整体的逻辑思路就是:假设有三张图(a, b, c)我们要实现无限滑动,那我们就这样排 a, b, c, a, b, c.

首先我们让程序一运行后看到的是第一个b,然后每点击一次就滑动一张,当点击两次后滑动到第二个a图上时,再在这个a图上点击向右滑动的时候我们还是以1000毫秒(这个代码中正常滑动的时间)的时间滑动到第二个b图,再以0秒钟的时间滑动到ul标签中的第一个b图位置,再在这个b图以正常时间滑动到c图,如果在这个c图上点击向右滑动的按钮的话,就按正常时间滑动到第二个a图,如果继续在这个a图上点击这个滑动按钮的话,轮播图就会正常的滑动到第二个b图,如果在这个b图上还要点击这个向右滑的按钮的话,我们就又以0秒钟的时间滑动到ul中的第一个b图,然后紧接着让它以正常的时间滑动到ul标签中第一个c图。这样就达到了轮播图正常的循环滑动的效果。

   如果要简化代码的话,我们可以把图片变少一点而且达到同样的效果,如果有a, b, c三张图片,我们可以这样放在ul标签中:c, a, b, c, a.就是第一张放用户能看到的最后一张,最后一张就放用户能看到的第一张。它的原理和上述一样,简而言之就是:(依然是点击右边的滑动按钮)当点击ul标签中的第二个c图上的按钮时,我们以正常的时间(1000毫秒)滑动到ul标签中的第二个a标签,然后当用户再在这个a图上点击按钮的话,我们就以0秒钟的时间滑动到ul标签中的第一个a图,然后紧接着就让它又以正常的时间滑动到b图。  这样就达到了一开始从a图正常的滑动到b图,从b图正常的滑动到c图,再从c图正常的滑动到ul标签中的第二个a图,再从a图首先以0秒钟的时间滑动到ul标签中的第一个a图,然后以正常的时间(1000毫秒)滑动到第一个c图。(带下划线的这句是点击第二个a图上的按钮要完成的动作)。

再来看一下整体的滑动效果的js代码实现:

 1 <script src = "jquery-1.11.1.min.js"></script>
 2         <script>
 3             $(document).ready(function(){
 4                 var leftMargin = -250;
 5                 $("#btn").click(function(){
 6                     leftMargin -= 250;
 7                     var time = 1000; 
 8                     if(leftMargin ==-1250){
 9                         time=0;
10                         leftMargin = -250;
11                         $("#move").animate({left:leftMargin + "px"},time);
12                         leftMargin=-500;
13                          time=1000;
14                         $("#move").animate({left:leftMargin + "px"},time);
15                     }
16                     else{
17                     $("#move").animate({left:leftMargin + "px"},time);
18                     }
19                 });
20             });
21         </script>

发现用文字很难说清楚这件事,一不小心就啰嗦了一大堆。希望能给观者一点启发。
 

原文地址:https://www.cnblogs.com/WNof11020520/p/6059799.html