轮播图也成为焦点图,是网页中比较常见的网页特效
一.功能:
1.鼠标经过轮播图模块,左右两边的按钮显示,鼠标离开轮播图模块,就隐藏左右按钮。
2.点击右(左)侧按钮一次,图片往左(右)播放一张,一以此类推,点击几次按钮,就顺序播放几张图片。
3.图片播放的同时,下面的小圈圈模块也跟随一起变化。
4.点击小圆圈,可以播放相应的图片。
5.鼠标不经过轮播图,轮播图也会自动播放图片。鼠标经过轮播图,自动播放就会停止。
二.过程:
1.基础结构的搭建(html和css)
首先需要准备一个盒子,盒子里面有三个部分,第一个部分再左右两边用来实现左右两侧按钮箭头,第二部分用来实现底部小圆圈 第三部分则装ul来中央实现图片的滚动。
对于所放图片必须放在一行上,才能实现图片的左右转换,因此需要将图片所在的ul的宽度足够快,比盒子的宽度大很多(至少比所有图片的总和宽度大),然后要加浮动,才能将图片放在一行上
2.轮播图的功能特效(JavaScript)
(1)鼠标经过离开轮播图 左右按钮显示隐藏
先用css设置左右两个按钮先隐藏起来,然后绑定鼠标经过和离开事件,当经过时按钮显示,当鼠标离开轮播图页面时候就隐藏起来。
(2)自动生成底部的小圆圈
核心:小圆圈的个数=图片张数
利用for循坏,先创造一个节点creatElement(),然后把创造的节点appendChild()插入到ol里去,循坏图片的张数次。然后ol里面的第一个小li设置为类名为selectd 表示被选中了。
(3)点击小圆圈 实现图片滑动
排他思想:干掉所有人,留下我自己
滚动图片算法:点击某个小圆,就让图片滚动,小圆圈的索引号×图片的宽度作为ul的移动距离。
滑动需要引用动画,因此需要自己封装一个animate()动画函数(也可以使用jQuery中的animate())。动画函数必须定位才能移动,因此需要对ul需要设置绝对定位。
直接在生成小圆圈的同时绑定点击事件,然后清除所有小li的selected被选择的类名,将当前的小li的类名设置为selected。然后取图片的宽度,再设置自定义属性(在生成小圆圈的时候,来记录当前的索引号),点击了某个小li就需要拿到当前小li的索引号,根据算法和利用animate()函数实现图片滚动效果。
(4)右侧按钮实现无缝滚动
由于有层级的影响,左右按钮被ul压下去了,需要再css中加层级。
对右按钮进行一个鼠标点击绑定事件,声明一个全局变量num,每点击一次就自增1,每加一次,就播放一次动画。(让这个变量×图片宽度,就是ul的滚动距离)
由于图片播放到最后一张后,再点击按钮,图片会露底,变成背景颜色,因此我们需要把ul的第一个li复制一份,放到ul的最后面,当图片滚动到克隆的最后一张图片的时候,让ul快速的,不做动画的跳到最左侧:left为0(即复原到最开始位置)。同时把num赋值为0,使其重新开始滚动
于此同时复制照片的同时,导致底部的小圆圈也增加了一个,因此我们可以让js帮我复制第一个小li把它放在最后。即再点击右键按钮之前,用到克隆第一个li cloneNode()加true深克隆 复制里面的子节点 然后添加到ul的最后
(5)右侧按钮与小圆圈之间联系效果
声明一个全局变量circle,每点击一次有右侧按钮,我就让变量++,就播放下一张图片,让小圆圈跟随一起变化。即先清除其余小圆圈的setedcted被选中的类名,然后留下当前的小圆圈的setected被选中的类名
由于图片有5张,小圆圈有4个,需要添加一个判断条件,当走到克隆这张照片的时候,我们需要复原即c