思路

  1. 使用animation来展示轮播图:

  2. 轮播分为两个独立的部分:位移 与 动效。使二者互不影响

  3. 动效分为进入动画和退出动画

  4. 在所有动效结束后位移

html部分

<body><ul class="imgList"><button class="left">&lt</button><button class="right">&gt</button><li class="item "><img src="1.jpg" alt=""></li><li class="item "><img src="2.jpg" alt=""></li><li class="item "><img src="3.jpg" alt=""></li><li class="item "><img src="4.jpg" alt=""></li></ul></body>

script部分

const items = document.querySelectorAll('.item')const left = document.querySelector('.left')//上一张按钮const right = document.querySelector('.right')//下一张按钮const imgList = document.querySelector('.imgList') let idx = 0let click;//节流器clickitems[0].style.left = 0//默认展示图片//监听每一个item的动画结束事件items.forEach(item => {item.addEventListener('animationend', () => {item.classList.value = 'item' //移除item的动画属性})})left.addEventListener('click', () => {clearTimeout(click)click = setTimeout(() => {//动效部分items[idx].classList.add('right-leave')//判断是否为第一张图,是=> 跳最后一张,不是=> 跳上一张idx = idx == 0 ? items.length - 1 : idx - 1items[idx].classList.add('left-enter')//位移部分itemMove()//所有item移出,仅把当前要展示的图移入restartInterval()//重启定时轮播}, 500)})right.addEventListener('click', () => {clearTimeout(click)click = setTimeout(() => {items[idx].classList.add('left-leave')//判断是否为最后张图,是=> 跳第一张,不是=> 跳下一张idx = idx == items.length - 1 ? 0 : idx + 1items[idx].classList.add('right-enter')itemMove()restartInterval()}, 500)})//所有item移出,仅把当前要展示的图移入function itemMove() {items.forEach(item => {           item.style.left = '400px'           })items[idx].style.left = 0}//element.click() 模拟点击事件let timer = setInterval(() => { right.click() }, 4000)//重启定时轮播function restartInterval() {clearInterval(timer)timer = setInterval(() => { right.click() }, 4000)}//鼠标悬停,停止轮播,鼠标移除,继续轮播imgList.addEventListener('mouseenter', () => {clearInterval(timer)})imgList.addEventListener('mouseleave', () => {timer = setInterval(() => { right.click() }, 4000)})

css部分

body {display: flex;justify-content: center;align-items: center;}.imgList {position: relative;padding: 0;width: 400px;height: 400px;overflow: hidden;display: flex;flex-direction: row;}.item {list-style: none;position: absolute;left: 400px;}.left-enter {animation: 0.5s left;}.right-leave {animation: 0.5s right;}.right-enter {animation: 0.5s right;/* 反向播放动画 */animation-direction: reverse; }.left-leave {animation: 0.5s left;animation-direction: reverse; }@keyframes left {from {left: -400px}to {left: 0px}}@keyframes right {from {left: 0px}to {left: 400px}}.left,.right {font-size: large;position: absolute;z-index: 100;background-color: rgba(16, 42, 64, 0.583);border: rgba(16, 42, 64, 0.583);border-radius: 3px;top: 50%;}.left {left: 0;}.right {right: 0;}

用animation实现轮播图无缝衔接相关推荐

  1. JS实现轮播图-无缝衔接

    在这里封装了一个改变元素节点的运动的函数,使用的时候只要调用即可: 1.第一个参数是要操作元素节点. 2.第二个参数是一个对象存放样式名和对应样式的目标值. 3.第三个参数是回调函数,在不需要的时候可 ...

  2. 用transition实现轮播图无缝衔接

    思路 无缝衔接是障眼法,复制第一张图到末尾,使头尾图片相同 每次第一张向左切换时,先大幅位移到最后一张,再开启transition,就没有缝了 每次最后一张向右切换时,先大幅位移到第一张,再开启tra ...

  3. JS-内置对象内置构造函数事件-拖拽轮播图无缝滚动

    内置对象&内置构造函数 日期时间格式 // 创建一个当前时刻的日期时间对象 var date = new Date(); // 获取date对象中的年月日时分秒 var y = date.ge ...

  4. jq轮播图——无缝轮播

    css代码: /* 整个轮播图 */ .banner{width: 520px;height: 280px;overflow: hidden;margin:10% auto;position: rel ...

  5. 【自定义轮播图】微信小程序自定义轮播图无缝滚动

    先试试效果,可以通过设置参数调整样式 微信小程序中的轮播图可以直接使用swiper组件,如下: <swiper indicator-dots="{{indicatorDots}}&qu ...

  6. 无缝轮播图无缝轮播图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. jQuery实现的无缝轮播图

    其实只要原生js学好了,能够实现轮播图无缝切换,再用jQuery写,感觉简单多了,嗯.为了熟悉jQuery的用法,还是动手把它实现了,废话不多说,看代码吧,实现的过程都注释在代码中了,嗯.要养成注释的 ...

  8. jquery轮播图无缝连接实现

    经过一段时间的学习和实践,以及参考了许多中idea之后,实现了这个轮播图无缝链接.(这只是本人自己的方法)步骤如下: (1)要实现无缝连接,最好是有若干张长宽都一样的图片(数量大概在3到6张,多的就少 ...

  9. 【学习笔记57】轮播图代码的实现

    一.HTML代码 <div class="banner"><!-- 放置所有轮播图的盒子 --><ul class="img_box&quo ...

最新文章

  1. Linux Kernel5.10的软中断(softirq)的本质
  2. 深入理解JVM(三)——配置参数
  3. option columns.render 渲染列(1) 添加checkbox
  4. 《小团团团队》第四次作业:项目需求调研与分析
  5. win7 优化后的问题
  6. [转载] gamma函数stiriling公式_数学笔记|特殊函数(1):Gamma函数
  7. python em和web_Python web 框架
  8. AGC016E Poor Turkeys
  9. PDF密码忘记了怎么办
  10. 软考 系统架构设计师 2009-2018年英语翻译及重点词汇
  11. c++ 取模和求余运算
  12. java定时任务不执行_【SpringBoot】为什么我的定时任务不执行?
  13. PHP中文转换为数组,PHP文本处理之中文汉字字符串转换为数组
  14. 项目 编码规则(编写代码规则)
  15. ubuntu下安装wps出现系统缺失字体问题?
  16. 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
  17. 利用Yocto构建嵌入式Linux教程01--第一个Yocto项目构建
  18. ae制作小球轨迹运动_AE教程AE特效:教你如何用AE创建一个弹跳运动的小球特效...
  19. 联想用u盘重装系统步骤_联想t430怎么用u盘重装系统
  20. Fluent UDF 根据给定点坐标获取cell

热门文章

  1. Microsoft office 办公工具 OneNote同步冲突、同步失败问题解决,以及导入印象笔记数据
  2. Boosting 族 ——AdaBoost全解
  3. iOS 去除字符串中的空格或多余空格(适合英文单词)
  4. 推荐系统(Recommender System)笔记 01:推荐系统的演化
  5. 光影切割问题之求解逆序数
  6. 关于开源项目晶体管测试仪(Transistor Tester)烧录以及熔丝位参数设置
  7. 2020炉温曲线第二题(python代码)
  8. Datacamp 学习第一周
  9. 简易二极管收音机制作方法
  10. CATIA二次开发——自动导出BOM表