轮播图

久未见 提交于 2019-11-29 16:03:08

  轮播图对于我们来说是最常见不过的了,我们在各种商品和企业网站中都能看见它的身影,具有很强的实用性,所以掌握一些简单轮播图的制作方法还是很有必要的,今天就和大家分享一下常见的两种简单轮播图的制作方法,可以以此为基础,添加更多的特效和行为,让你的页面布局更加的美观和具有吸引力。

 1  // 方法一原理介绍:利用大的图片盒子,将所有图片包裹在其中,如图示,每次点击对应的左右按钮,使图片盒子 向左或者向右移动对应图片宽度    乘以索引的距离,从而实现对应的效果。本文采用面向对象的方式,将功能拆分处理介绍(下面为js部分的代码,HTML和css部分可自行设置),这样使得思路更加明确,便于读者的理解:  
 2     function Banner(){
 3         // 选择标签,添加元素到js上
 4         this.left = document.getElementById("left")   //左按钮
 5         this.right = document.getElementById("right")   //右按钮
 6         this.imgbox = document.querySelector(".imgbox")   //图片盒子
 7         this.img = this.imgbox.children;    //图片集合
 8         // 设置图片盒子的宽度
 9         this.imgbox.style.width = this.img.length * this.img[0].offsetWidth + "px";
10         // 添加索引,确定点击位移的距离
11         this.index = 0;
12         this.init()
13     }
14     // 设置左右按钮的点击功能,利用传参,优化代码。
15     Banner.prototype.init = function(){
16         var that = this;
17         this.left.onclick = function(){
18             that.changeIndex(1)
19         }
20         this.right.onclick = function(){
21             that.changeIndex(-1)
22         }
23     }
24     Banner.prototype.changeIndex = function(type){
25         // 通过判断传入的参数来确定点击按钮的左右,当前判断true为左按钮。
26         if(type == 1){
27             // 判断点击左按钮是当前图片是否为图片的第一张,以此来确定下一张应该弹出来的图片。
28             if(this.index == 0){
29                 // 判断为true,则下一张弹出图片应为倒数第二张
30                 this.index = this.img.length-2;
31                 // 为避免图片转换过程会出现其他图片,设置图片盒子left为倒数第二张图片的距离,再加上有倒数第一张图片的过渡,这样可以实现完美转换。
32                 this.imgbox.style.left = -(this.img.length-1) * this.img[0].offsetWidth + "px";
33             }else{
34                 this.index--;
35             }
36         }else{
37             // 当为右按钮时,思路与左按钮调换过来就可以了。
38             if(this.index == this.img.length-1){
39                 this.index = 1;
40                 this.imgbox.style.left = 0;
41             }else{
42                 this.index++
43             }
44         }
45         this.display();
46     }
47     // 实现图片的切换功能
48     Banner.prototype.display = function(){
49         // 调用封装的move函数来切换图片,使得图片转换过程有一个缓冲的效果。
50         move(this.imgbox,{
51             left:-this.index * this.img[0].offsetWidth
52         })
53     }
54     // 运行
55     new Banner();

 

 1 <script>
 2     // 方法二原理介绍:利用定位原理,将图片盒子大小设置为一个图片的大小,定位过的图片重叠在一起,初始让图片都定位在图片盒子右边,      第一张图片定位在盒子里面,通过触发对应的点击事件,来使相应的图片进行左右的位移,从而实现,点击轮播图片的效果。如下图:      
 3     function Banner(){
 4         this.left = document.getElementById("left")
 5         this.right = document.getElementById("right")
 6         this.imgbox = document.querySelector(".imgbox")
 7         this.img = this.imgbox.children;
 8         // 与上一种方法不同的是,这次我们设置的索引有两个,第一个为准备离开的图片的索引,第二个为将要进来的图片的索引
 9         // 将要离开的图片的索引
10         this.index = 0;
11         // 将要进来的图片的索引
12         this.iPrev = this.img.length - 1;
13         // 执行点击事件
14         this.init()
15     }
16     Banner.prototype.init = function(){
17         // 同方法一利用传参优化代码
18         var that = this;
19         this.left.onclick = function(){
20             that.changeIndex(-1)
21         }
22         this.right.onclick = function(){
23             that.changeIndex(1)
24         }
25     }
26     Banner.prototype.changeIndex = function(type){
27         if(type == -1){
28             // 此时判断传入参数,执行右点击事件,再判断此时将要离开的图片是否为 初始图片
29             if(this.index == 0){
30                 // 返回为true,则下次将要进来的图片为最后一张,即对应下标为img.length-1,将要离开的图片的下标为0;
31                 this.index = this.img.length-1;
32                 this.iPrev = 0;
33             }else{
34                 // 否则就进行下标减减的运算
35                 this.index--;
36                 this.iPrev = this.index+1;
37             }
38         }else{
39             // 右点击事件与左点击事件思路相同,不过索引加减反过来
40             if(this.index == this.img.length-1){
41                 // 当判断将要离开的图片的下标为最后一张时,下标为img.length-1 ,下一张准备进来的图片应该为第一张,即图片下标为0;
42                 this.index = 0;
43                 this.iPrev = this.img.length-1
44             }else{
45                 // 否则就进行下标加加的运算
46                 this.index++;
47                 this.iPrev = this.index-1;
48             }
49         }
50         // 判断完毕,执行换图函数,这里的type为display方向的判断参数,利用左右按钮传入type参数的正负,实现左右点击时图片切换离开的方向相对应。
51         this.display(type);
52     }
53     Banner.prototype.display = function(type){
54         //根据要走的和要进来的索引,实现图片的点击切换
55         // 设置准备离开的图片的定位距离left为0;
56         this.img[this.iPrev].style.left = 0;
57         // 利用move封装函数缓冲移动到左端或者右端
58         move(this.img[this.iPrev],{left:-this.img[0].offsetWidth * type})
59         // 设置准备进来的图片的定位距离left为一个图片的宽度
60         this.img[this.index].style.left = this.img[0].offsetWidth * type + "px";
61         // 利用move封装函数实现图片进入图片盒子的缓冲效果;
62         move(this.img[this.index],{left:0})
63     }
64 
65     new Banner();

  上面两种方法就是一般点击事件轮播图的设计方法了,可以给感兴趣的朋友参考一下,其中调用的封装函数move函数会在下次空闲分享给大家,欢迎留言指正及提问。

 

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!