前言

无缝轮播一直是面试的热门题目,而大部分答案都是复制第一张到最后。诚然,这种方法是非常标准,那么有没有另类一点的方法呢?

第一种方法是需要把所有图片一张张摆好,然后慢慢移动的,

但是我能不能直接不摆就硬移动呢?

如果你使用过vue的transition,我们是可以通过给每一张图片来添加入场动画和离场动画来模拟这个移动

  • 进场动画就是从最右侧到屏幕中央
  • 出场动画是从屏幕中央到左侧移出

这样看起来的效果就是图片从右边一直往左移动,但是这个不一样的地方是,我们每一个元素都有这个进场动画和离场动画,我们根本不用关心它是第几个元素,你只管轮播就是。

如果不用vue呢?

很简单,我们自己实现一个transtition的效果就好啦,主要做的是以下两点

  • 元素显示的时候,即display属性不为none的时候,添加xx-enter-active动画
  • 元素消失的时候,先添加动画xx-leave-active, 注意要让动画播完才消失
 function hide(el){el.className = el.className.replace(' slide-enter-active','')el.className += ' slide-leave-active'el.addEventListener('animationend',animationEvent)}function animationEvent(e){e.target.className = e.target.className.replace(' slide-leave-active','')e.target.style.display = 'none'e.target.removeEventListener('animationend',animationEvent)}function show(el){el.style.display = 'flex'el.className += ' slide-enter-active'}

这里我们使用了animationend来监听动画结束,注意这里每次从新添加类的时候需要重新添加监听器,不然会无法监听。如果不使用这个方法你可以使用定时器的方式来移除leave-active类。

 function hide(el){el.className = el.className.replace(' slide-enter-active','')el.className += ' slide-leave-active'setTimeout(()=>{//动画结束后清除classel.className = el.className.replace(' slide-leave-active','')el.style.display = 'none'}, ANIMATION_TIME) //这个ANIMATION_TIME为你在css中动画执行的时间}

那么,动画怎么写呢?

 .slide-enter-active{position: absolute;animation: slideIn ease .5s forwards;}.slide-leave-active{position: absolute;animation: slideOut ease .5s forwards;}@keyframes slideIn {0%{transform: translateX(100%);}100%{transform: translateX(0);}}@keyframes slideOut {0%{transform: translateX(0);}100%{transform: translateX(-100%);}}

需要注意的是这里的 forwards属性,这个属性表示你的元素状态将保持动画后的状态,如果不设置的话,动画跑完一遍,你的元素本来执行了离开动画,执行完以后会回来中央位置杵着。这个时候你会问了,上面的代码不是写了,动画执行完就隐藏元素吗?

如果你使用上面的setTimeout来命令元素执行完动画后消失,那么可能会有一瞬间的闪烁,因为实际业务中,你的代码可能比较复杂,setTimeout没法在那么精准的时间内执行。保险起见,就让元素保持动画离开的最后状态,即translateX(-100%)。此时元素已经在屏幕外了,不用关心它的表现了

轮播逻辑怎么写?

很简单,我们进一个新元素的时候同时移除旧元素即可,两者同时执行进场和离场动画即可。

 function autoPlay(){setTimeout(()=>{toggleShow(新元素, 旧元素)this.autoPlay()},DURATION) //DURATION为动画间隔时间}function toggleShow(newE,oldE){//旧ele和新ele同时动画hide(oldE)show(newE)}

感谢阅读

博主在此给大家安利一款分享学习资料的app,此app的主要就是收集了互联网上的各种学习资料做整合并免费分享。里面涵盖了Android、java、python、数据结构、算法、前端、爬虫、大数据、深度学习、UI等等技术,包含M课网课程、某课堂VIP课程、各培训机构课程、某鱼的一些付费课程以及算法面试资料,并且正在不断更新中,你想要的学习资料几乎都有,当然你也可以加入我们的技术Q群获取各种资料:687667883,任何课程问题可直接咨询群主。
目前对接的课程论坛如下,您可以提前了解下有哪些课程:
链接资源如下(下面论坛所有的课程,app中均有并且是免费的,如果出现未录入的情况,加上面的Q群找群主):
    享学app资源对接论坛一(IT码上发)
    享学app资源对接论坛二(学途无忧)

目前app已经上架小米应用市场,可搜索“享学”即可下载,其他市场正在同步上架中,同时你也可扫码以下二维码进行下载:

使用transition实现图片轮播效果相关推荐

  1. Javascript实现图片轮播效果。

    用js做一个简单的图片轮播效果. 思路如下:用JavaScript来控制轮播的图片的样式(margin-left).用计时器来控制图片的自动播放.鼠标点击控制图片的翻页. 效果图如下.具有以下功能:1 ...

  2. 纯js制作图片轮播效果

    好久没有发博客了,最近都在复习,为了找工作做准备. 前段时间逛了下鼠绘漫画网追海贼王最新漫画,发现他们家的图片轮播效果跟其他网页的图片轮播效果效果不同,看起来更加有趣,于是我尝试了用js复写它. 前提 ...

  3. html+css+js 实现图片轮播效果

    html+css+js 实现图片轮播效果 图片轮播效果: 会自动 向左 || 向右 切换图片 能手动点击按钮切换图片 多用于商品展览等等 --首先我们创建一个盒子进行展览,然后一个< ul> ...

  4. 十五分钟用JavaScript基础写一个图片轮播效果

    十五分钟用JavaScript基础写一个图片轮播效果 前言 这次也是一个适合JavaScript初学者的小练手,用JavaScript的基本知识去写一个轮播图,其实轮播图有很多方法去实现,像用一些框架 ...

  5. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

  6. 移动端实现文字轮播_使用原生JS实现移动端图片轮播效果(一)

    PC端上实现图片轮播效果非常简单,只要通过使用click事件就可以非常简单的实现效果,但是在移动端上,就要通过核心的touch事件来实现.话不多说,现在我们就开始移动端轮播效果的实现. 首先就是原生J ...

  7. php制作图片轮播_图片轮播效果实现方法

    图片轮播效果如何实现呢本文主要介绍了JQuery实现图片轮播效果的制作原理以及实现代码,文章末尾附上源码下载,具有很好的参考价值.下面跟着小编一起来看下吧,希望能帮助到大家. 用JQuery操作DOM ...

  8. Android App图片轮播效果的组件化

    简介 一个通用的图片轮播效果的通用组件,方便开发者快速集成. 初学者,其实应该实现一个自定义控件的,改天有空,在学习下吧,学习能力一般,以前也没写过java,这个组件都写了好久,惭愧啊. 背景 笔者参 ...

  9. html5jqueryl轮播图,基于JQuery的实现图片轮播效果(焦点图)

    完整的演示代码: JQuery实现图片轮播效果 #banner {position:relative; width:478px; height:286px; border:1px solid #666 ...

最新文章

  1. 《css世界》的那些实用技巧
  2. ssl_error_rx_record_too_long
  3. 双系统删除分区后Grub启动失败
  4. 智能合约重构社会契约 (3)智能合约的自动触发
  5. 20211003 矩阵的值域(列空间)和核空间(零空间)
  6. Java8新特性解析
  7. 极简单的方式序列化sqlalchemy结果集为JSON
  8. 华为nova9系列正式官宣:9月23日震撼上市
  9. java泛型 包_Java泛型应用浅析
  10. 【BZOJ】1579: [Usaco2009 Feb]Revamping Trails 道路升级
  11. python(7)– 类的反射
  12. PTA基础编程题目集编程题
  13. win10专业版安装.net Framework4.7.2出现问题解决办法
  14. der解码规则_DER 编码规范理解
  15. Linux命令:reboot
  16. 19、论文解读:Intensity Scan Context: Coding Intensity and Geometry Relations for Loop Closure Detection
  17. SQL select详解(基于选课系统)
  18. k8s、pod、容器、虚拟机概念
  19. 最后一天了(再见了)
  20. CC2530+ESP8266使用MQTT协议上传阿里云的问题

热门文章

  1. ES6 里的symbol
  2. 台式电脑win10系统怎么开启无线服务器,台式电脑win10怎么连wifi_window10台式如何连接wifi...
  3. Android应用内展示office文件--腾讯浏览服务(TBS)
  4. 【SaltStack官方版】—— EventsReactor系统—BEACONS
  5. 窗口置顶工具v2.1.0
  6. 亮眼财报业绩背后,难掩富途控股估值陷阱
  7. 《阿里巴巴 Java开发手册》读后感
  8. 高通宣布苹果_苹果当时宣布的一切都过得很顺利
  9. arduino小火车交通灯
  10. pytoch 安装为Gpu版本