JS原生实现轮播图的几种方法
轮播图
主要思想就是:
在大的容器里,装着一个很长的表,表是容器宽度的整数倍。
然后通过更改列表样式里的left属性来实现左右滑动。
本文旨在控制滑动五张图片,但在html中使用了七张图片,第一张和最后一张是有重复的,至于原因会在下面解释。
通过给容器设定overflow:hidden属性来保证只显示容器视口大小的一张图片。
css:
可以给wrap列表设置flex属性,让图片在一行显示。其他布局可以按自己需求来做。
注意在定义id="wrap"d的节点中设置了内联样式left。因为在切换图片的时候我用到的是left属性,而如果不设置left的话,在dom设置style时是找不到left属性的。
这是完整的样式
每种颜色代表一张图片,且按序标了序号。起始位置是第二张图片。
至于为什么第一张和最后一张有额外重复的一张放在两端,是为了在做滑动效果的时候,最后一张(倒数第二张,粉紫色)可以继续向右顺滑的滑到第一张(其实是本图的第二张,浅棕色的)。第一张(本图第二张,浅棕色)向左滑动时可以顺滑的滑到最后一张(实则倒数第二张)。继续往下看。
1. 多种轮播方式
轮播必然离开不了定位,以及修改wrap列表的left属性,使其移动。
先初始化几个数据
1.1 定时自动轮播效果
只讲向左自动滑动的效果
既然是自动轮播的,那必然少不了setinterval()定时器让其持续轮播。
/由于wrap.style.left 返回的是带px的字符串,所以用parseint可以取得前面的数值/
1.2 按向右滑动按钮
1.3 小圆圈切换图片
其实本文在控制从最后一个图偷偷换回第一张图的操作是有缺陷的,因为要把控序号5的图滑动到序号为r1的图是需要1s的,然而wrap.style.left是直接发生变化的,不会随着过渡期间发生位移而left一直变化。所以把控序号5完整滑动到r1后再偷偷切换到序号1的时间是有些难控制的。
而且比如从序号1连续点击3下是可以切换到序号4的。然是从序号5连续点击3下是不可以的,在r1切换到序号1的时候是无法响应点击效果的,因此此处交互差异会容易感到别扭。
如果想改善这个别扭的bug,可以用下防抖来改善。
到此这篇关于js原生实现轮播图的几种方法的文章就介绍到这了,更多相关js原生轮播图内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!