无缝轮播,有点名堂这是一个基于原生js实现的轮播功能,支持动态配置轮播列表和设置轮播过渡动画,轮播切换时间间隔,自动播放

这是最终的效果图,可以看到无论是自动轮播,还是手动向前,向后翻,翻到头都可以做到平滑的过渡,分页器的切换也是OK的,将这个轮播组件应用于生产实践,一点问题也没有。接下来说说它的实现原理。

轮播图的html结构如下所示:slider-box区域是轮播内容区,slider-spot区域是分页区域,控制轮播图的页码切换。

上面通过用纯CSS实现轮播效果,是为了理解轮播图的原理。纯CSS实现的轮播图,在轮播项数量不确定的条件下,每一项的偏移位置不好计算。还有无法实现左右滑动切换轮播项。现在我们根据轮播图的原理,用js实现一下轮播图。

把轮播图修改成支持参数配置(配置参数参见下面),动态生成轮播项。其它的参数都比较好理解,有一个参数要说明一下。配置参数中有一项是容器id,这个参数是考虑到一个页面中可能会有多个轮播图,为了防止相互之间产生串扰。页面中引入了一个slider.js的文件,这个文件是轮播图功能的核心功能实现,接下来会重点讲解。

Slider.prototype={init(){this.createSliderDom();if(this.autoplay){this.timer=setInterval(this.toNext.bind(this,this.aniTIme),this.intervalTime);}},}createSliderDom方法内部的逻辑是在轮播外层容器my-slider下面创建轮播父容器slider-box及轮播项内容slider-item,以及分页器slider-spot及元素节点slider-item,设置轮播父容器slider-box的初始偏移。

//向后翻toNext(aniTIme){//轮播图只有一项的话,无需设置偏移if(this.imgList.length===1)return;this.playIndex++;if(this.playIndex===this.imgList.length){this.playIndex=0;}this.sliderBoxDom.style.transition=`${aniTIme/1000}sease-in-out`;this.sliderBoxDom.style.transform=`translateX(${-this.playIndex*this.moveWidth}px)`;this.setActiveSpot();},//设置当前分页按钮为高亮选中状态setActiveSpot(){this.sliderSpotDom.childNodes.forEach((item,index)=>{if(index===Math.abs(this.playIndex)){item.classList.add("active");}else{item.classList.remove("active");}});},你会发现实现的这个自动轮播功能,有个很大的问题,播放到最后一张图片重新开始下一轮播放时,过渡很不自然,有些突兀。而我们经常使用的一些轮播组件,最后一张和第一张的过渡很平滑,原因出在哪里,别人是怎么做到的?带着这个疑问,我查阅了一些资料,发现里面有点名堂。

上面的自动轮播,要想实现左移无缝轮播的效果,需要更改一下页面结构。在最后一幅图片后面,要多放置一张图片,把首张图片追加到最后一幅图的后面。

//向后翻toNext(aniTIme){if(this.imgList.length===1)return;this.playIndex++;this.sliderBoxDom.style.transition=`${aniTIme/1000}sease-in-out`;this.sliderBoxDom.style.transform=`translateX(${-this.playIndex*this.moveWidth}px)`;if(this.playIndex===this.imgList.length){this.playIndex=0;setTimeout(()=>{this.sliderBoxDom.style.transitionProperty="none";this.sliderBoxDom.style.transform=`translateX(0)`;},aniTIme);}this.setActiveSpot();},经过改造之后,现在的自动轮播效果,播放到最后一张向首张过渡时,是不是丝滑自然了很多。

如果自动轮播的方向是向右移动的话,要实现无缝轮播,需将最后一幅图放置到列表首图前面,页面结构为:

引起的代码变化:第一是在createSliderDom方法中,创建轮播元素列表时,在头部追加一张尾图。此外要将轮播容器的初始偏移位置设置为-375px,让其展示第一幅轮播图。

//向前翻toPrev(aniTIme){if(this.imgList.length===1)return;this.sliderBoxDom.style.transition=`${aniTIme/1000}sease-in-out`;this.sliderBoxDom.style.transform=`translateX(${-this.playIndex*this.moveWidth}px)`;if(this.playIndex===0){this.playIndex=this.imgList.length-1;setTimeout(()=>{this.sliderBoxDom.style.transitionProperty="none";this.sliderBoxDom.style.transform=`translateX(${-this.imgList.length*this.moveWidth}px)`;},aniTIme);}else{this.playIndex--;}this.setActiveSpot();},右移无缝轮播效果展示:可以看到第一幅图和最后一幅图的过渡效果自然流畅。

THE END
1.前端小案例——轮播图(HTML+CSS+JS,附源码)显示多张图片,每张图片占据轮播图容器的一部分空间。 实现向左和向右的切换按钮,可以点击按钮切换到上一张或下一张图片。 在底部显示小圆点,表示当前显示的图片,点击小圆点可以跳转到对应的图片。 实现逻辑: 首先,使用querySelectorAll方法获取所有的轮播项元素,并将其保存在items变量中。 https://blog.csdn.net/m0_74823044/article/details/144402038
2.如何使用JavaScript实现图片轮播的无缝循环效果?js教程随着互联网的发展,图片轮播已经成为网站设计中常见的元素之一。而对于使用 JavaScript 来实现图片轮播,除了基本的轮播功能外,无缝循环效果也是一个非常常见的需求。在这篇文章中,我们将学习如何使用 JavaScript 来实现图片轮播的无缝循环效果,并提供具体的代码示例。 https://www.php.cn/faq/623096.html
3.JS经典案例无缝滚动轮播图(纯JS)腾讯云开发者社区JS经典案例-无缝滚动轮播图(纯JS) 引言 在数字化时代洪流中,无缝滚动轮播图作为网页设计的常青元素,不仅仅是视觉盛宴的开启者,更是用户体验交互的艺术展现。它以其流畅的动态效果,无声地讲述着品牌故事,引领着用户的视线穿梭于信息与美学交织的走廊。设计者通过精心编排的自动播放、鼠标感应暂停、以及精确的导航https://cloud.tencent.com/developer/article/2427752
4.js无缝轮播图简单js无缝轮播图https://www.jq22.com/webqd2173
5.js原生——无缝轮播今天分享前端开发学习中的一个很经典的案例——原生JS实现无缝轮播图。 需求: 1.鼠标移入轮播图时左右两边显示上一页下一页按钮,移出时隐藏 2.鼠标点击箭头,图片发生轮播 3.点击号码,切换到指定图片 4.鼠标移出,图片每隔一定时间自动轮播 5.当图片轮播到最后或最前一张的时候,图片无缝循环切换 https://www.jianshu.com/p/3320b7e222fc
6.JS左右无缝轮播功能完整实例本文实例讲述了JS左右无缝轮播功能。分享给大家供大家参考,具体如下: 创新互联建站从2013年成立,是专业互联网技术服务公司,拥有项目成都网站建设、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元隆林做网站,已为上家服务,为隆林各地企业和个人服务,联系电话:18982081108 http://www.pzhseo.com/article/jchdgp.html
7.无缝滚动轮播jquery无缝轮播图js代码绝大部分大公司给员工配置的基本都是苹果电脑,为什么配置苹果电脑呢?它的性能相对较好,和其它的笔记本比较它的性能好,续航时间长。操作系统是unix,非常适合编程人员使用,很多开发软件都是需要unix环境的。 标题名称:无缝滚动轮播jquery 无缝轮播图js代码 分享地址:http://chengdu.cdxwcx.cn/article/diihdio.htmlhttp://chengdu.cdxwcx.cn/article/diihdio.html
8.javascript解决swiper.js中无缝轮播的问题。解决swiper.js中无缝轮播的问题。 根据公司需求需要对让轮播无间隙播放,类似这种效果:http://www.16sucai.com/upload。因为偷懒用的是swiper.js插件编写的。swiper.js自动轮播的时候都会有自动停顿,各种调研都没有合适的方法,只有慢慢摸索。通过查看代码,发现.swiper-wrapper这个类中有个属性:https://segmentfault.com/a/1190000013468072?utm_source=sf-related
9.使用js实现一个简单的无缝轮播效果创新互联今天就跟大家聊聊有关使用js实现一个简单的无缝轮播效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 创新互联是一家专注于成都网站设计、成都网站制作与策划设计,潜山网站建设哪家好?创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务http://shouzuofang.com/article/dhjjdh.html
10.harmonyos打开相册代码相册源代码相册上下无缝滚动展示特效 jQuery旅游相册Tab切换代码 jQuery相册图片掀开切换代码 jQuery图片相册轮播切换代码 JS人体艺术网站图集相册特效 JS响应式3D照片墙展示特效 jQuery立体相册鼠标点击切换代码 支持全屏缩放下载功能lightbox插件 html5仿微信朋友圈相册图片放大代码 https://blog.51cto.com/u_16213718/11889757
11.用jQuery写一个无缝衔接轮播图,超精简又详细不然程序无法执行 --> //用到的是jQuery代码,不介绍代码单个意思 $(functioneq(0).width()*(index%len)}); //实现无缝轮播的关键地方 //判断index%len的值index%len=0的时候表示第一张,https://www.imooc.com/article/29566/
12.原生JS实现一个无缝轮播图插件(支持vue)没有引用第三方插件库,原生js,封装一个Broadcast对象,在此对象上展开,仅仅190多行代码。 目前主要实现了:无缝轮播,自动播放,PC端左右按钮点击切换,移动端手势滑动切换。 自己写了一部分基础的css样式,可以再次的基础上修改成自己喜欢的样式。 展示界面&使用 https://developer.aliyun.com/article/610327