JS实现轮播图图片无缝滚动原理

当轮播图滚动至现有图片最后一张时,需要让轮播图下一跳回到第一张图片,从而实现无限无缝循环滚动效果,但是为什么需要采用克隆来实现呢?为什么不直接从最后一张回到第一张?

原理:在我们采用 num 变量计算图片移动的次数时,增加了一个 if 的判断条件,用于判断图片是否滚动至最后一张图片位置,如果没有复制或者克隆来新增一个子节点,循环就会在到达最后一张图时num 和 left 变为 0 ,但是结束了 if 判断后会有一个 num 自增的动作,所以 num 变为 1 ,就会直接跳到第二张图,故需要克隆第一张图片作为最后一个子节点才能实现无缝滚动的效果。

其中需要用到的方法(以按下轮播图的向右滑动键为例):

  1. 复制第一张图放到最后一张的后面,生成一个新的子节点(先在 html 完成第一个图片的复制后去 js 添加如下代码:)
    var num = 0;
    element.addEventListener('click', function() {
        //若走到最后复制的一张图,此时 存放所有图片的 ul 要快速恢复 left 为0
        if(num == ul.children.length - 1) {
            ul.style.left = 0;
            num = 0;
        }
        num ++;
        animate(ul, -num * 图片宽度);
    })
    

    特点:若后期图片有变更需要修改 js 代码,不方便,不够动态

  2. 克隆第一张图片,为存放图片的 ul 新增此节点:

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JS轮播图无缝滚动原理是利用CSS3的transform属性,通过改变图片容器的translateX值来实现轮播图的滑动效果。 首先,需要将多张图片按顺序排列在一个容器中,每张图片的宽度与容器的宽度相同,容器的宽度为所有图片宽度之和。然后,利用JS定时器不断改变容器的translateX值,使其向左移动一个图片的宽度,当容器滑动到最后一张图片时,再将容器的translateX值重置为0,从头开始循环滑动。 为了实现无缝滚动效果,需要在每张图片的前后分别添加一张与其相同的图片,这样在滑动到最后一张图片时,就能无缝地切换到第一张图片,达到连续滚动的效果。 另外,为了保证滑动效果流畅,需要使用CSS3的transition属性来实现平滑的过渡动画。具体实现过程可以参考以下代码: CSS样式: .container { width: 图片宽度 * 图片数量; overflow: hidden; transition: transform 0.5s ease; } .container img { float: left; width: 图片宽度; } JS代码: var container = document.querySelector('.container'); var imgWidth = 容器宽度 / 图片数量; var index = 0; setInterval(function() { index++; container.style.transform = 'translateX(' + (-index * imgWidth) + 'px)'; if (index === 图片数量 - 1) { setTimeout(function() { container.style.transition = 'none'; container.style.transform = 'translateX(0)'; index = 0; setTimeout(function() { container.style.transition = 'transform 0.5s ease'; }, 50); }, 500); } }, 2000);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值