简单轮播图的实现及原理讲解(js)

 我来答
天罗网17
2022-06-13 · TA获得超过6162个赞
知道小有建树答主
回答量:306
采纳率:100%
帮助的人:71.8万
展开全部

三个div,最外层id为 parent 的大div内包含了 uls 和 buttons 两个div,div uls 中包含了两个列表 img_ul (图片列表), litCir_ul (小圆点列表),div buttons 里则包含了“左”, “右”两个按钮。

之所用js添加小圆点,是因为小圆点的数量是由图片张数决定的。

默认 li 的 class 为 quiet , 第一张默认为 active 。

首先先理解该轮播图如何滚动,这里是通过控制 img_ul 的 left 值来控制显示某张图片, 为了实现“滚动”的效果,我们需要 逐渐 改变 img_ul 的 left 值,而不能直接使该值变化图片宽度的倍数。这里我们定义一个动画效果函数 Roll() 。

试想下面的情况,当图片从最后一张切换到第一张时,这时就不能通过逐渐改变 img_ul 的 left 值来实现滚动的效果,于是 克隆第一张图片至列表尾部,当滚动完最后一张图片时,继续滚动到克隆的第一张,然后将 img_ul 的 left 值置为0。

需要注意的是小圆点和图片列表的 li 数目是不一样的,当滚动到最后一个克隆项时,此时小圆点实际上在第一个位置。

开始自动滚动:
timer = setInterval(autoRun, gap);

给每个小圆点绑定了onmouseover事件,这个方法有个细节,会根据两次小圆点的距离差调整速率为 rate*times ,使切换效果更自然(也就是说每次切换说花的时间基本一致,无论是第一张到第二张,还是第一张到最后一张)。

触及区域,清除定时器,显示按钮。
离开区域,添加定时器,隐藏按钮。

自动播放就是间隔一定时间不断调用函数“下一张”的过程,所以这里的按钮 right 下一张的实现就是上面的 autoRun 函数。

以上就是轮播图各部分的实现原理,如果你有其他的方法,欢迎一起交流!
2019.3.30更新:
用requestAnimationFrame()实现一个轮播图

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式