使用transition实现图片轮播效果

article/2025/9/23 23:45:11

image

前言

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

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

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

如果你使用过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已经上架小米应用市场,可搜索“享学”即可下载,其他市场正在同步上架中,同时你也可扫码以下二维码进行下载:
下载二维码_1.0.0版本.png


http://chatgpt.dhexx.cn/article/tEIQRHh8.shtml

相关文章

【JavaScript】常见的几种图片轮播

平时我们会在各种网站看见图片轮播的效果,但它具体是如何实现的呢?接下来咱们一起来看看各种图片轮播效果的产生过程吧! 一、图片的无缝滚动 什么是图片的无缝滚动?通俗来讲就是一堆图片一张接着一张往过滑,图片之间没…

实现一个简单的图片轮播效果

学习笔记 思路 这里就说一下我的思路吧,我们可以先将所有图片的不透明度设置为0,也就是全透明,不可见(也不一定靠设置透明度来实现图片不可见,也可以直接设置元素不可见),使用下标的方式来控制…

c++ 判断亲和数

c 判断亲和数 在自然数220与284之间,有一种非常奇妙的关系,能够整除22022511的全部正整数(不包括220)之和1245102011224455110恰好等于284;而能够整除2842271的全部正整数(不包括284)之和124711…

寻找亲和数对C语言,寻找亲和数

人与人之间讲究友情,而有趣的是,数与数之间也有相类似的关系,数学家把一对存在特殊关系的数称为“亲和数”。亲和数,又称相亲数、友爱数、友好数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等…

如何判断亲和数

内容:判断亲和数 目的:掌握循环与if语句 程序代码: /* * 程序的版权和版本声明部分: * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:匡效国 …

亲和数-C++

目录 原题目 题目描述: 输入格式: 输出格式: 样例输入: 样例输出: 提示: 解题 part1 part2 part3 原题目 题目描述: 自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1、2、3、4、6。若自然数的因子之和为b,而…

python程序设计——练习9

目录 1.任意整数各个位数之和2.列表下标转换3.稀疏矩阵的表示4.有序列表插入元素5.列表合并去重6.单词的区域7.查验身份证8.亲和数9.乘积的列表10.矩阵相加 1.任意整数各个位数之和 请输入任意一个正整数,求各个位数之和并输出。 输入样例1: 123 输出样…

squeezenet,DSD

squeezenet 2016.11.4 squeezenet的目的是用更少的网络构建模型,同时保持模型的准确率。 出发的三个原则是:1、用1*1卷积代替3*3卷积 2、减少与3*3卷积相连的通道数 3、在网络后期使用采样。保证特征图的大小。 其中1、2的目的是减少参数,同时…

Squid

Squid中文权威指南:点击打开链接 CentOS 6.4下Squid代理服务器的安装与配置 一、简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。 Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自…

Squeeze-and excitation network

Squeeze-and excitation network introdutcion motivation:当前一些研究表明,将attention机制引入网络中来捕获特征之间的空间相关性可增强CNN的表征,但本文希望建立channels之间的关系。 整体的SE block的图: 如上图所示&…

SQUIRE: A Sequence-to-sequence Framework for Multi-hop Knowledge Graph Reasoning

摘要 近年来,多跳知识图(KG)推理得到了广泛的研究,以提供具有证据路径的缺失链接的可解释预测。大多数先前的工作使用基于强化学习(RL)的方法来学习导航到目标实体的路径。然而,这些方法的收敛速度慢,收敛性差,当路径…

Squeeze-and-Excitation Networks

摘要 卷积神经网络建立在卷积运算的基础上,通过融合局部感受野内的空间信息和通道信息来提取信息特征。为了提高网络的表示能力,许多现有的工作已经显示出增强空间编码的好处。在这项工作中,我们专注于通道,并提出了一种新颖的架…

HTML页面可视化快速设计

1、HTML页面可视化快速设计工具:Maqetta IBM 公司在 IBM Impact 2011 上面发布了 Maqetta,一个创建桌面和移动用户界面的 HTML5 设计编辑工具,并同时宣布将项目捐助给开源机构 Dojo 基金会。 也即Maqetta 是由 Dojo 基金会提出的开源技术 ,…

HTML 转 EXE 工具(HTML App Build)

2023-07-01 将进行完全功能免费发布,本文中的下载连接已经是最新的下载连接。 2023-02-19 已经进行了重大升级! 一款免费的HTML转EXE工具,无论您是单页面应用,或者是其他的使用传统的html javascript css 生成的网站&#xff0c…

HTML5教程|0代码,快速制作调查问卷

我们经常需要收集数据,今天我们来介绍一种自己实现问卷调查数据表的制作方法,本节教程是单选框的交互制作,希望大家看完都可以学会。我们使用的H5工具是Epub360,下面就进入教学环节吧~ 一、组件介绍: 单选项&#xf…

几款制作帮助文档的工具汇总

几款制作帮助文档的工具汇总 文章目录 几款制作帮助文档的工具汇总为什么需要发布产品帮助文档支持在线用 MarkDown格式的编辑器1、[GitBook](https://www.gitbook.com/)2、[Docsify](https://docsify.js.org/)3 、MrDoc4. YDoc5、VuePress6、[Docusaurus](https://docusaurus.…

微软html帮助文档制作,MicrosoftHTMLHelpWorkshop(CHM文件生成工具)

MicrosoftHTMLHelpWorkshop是一款文件制作工具,通过此软件能够帮助我们对CHM文件进行快速编程配置,也可快速的进行建立需要的HYML格式的文件,软件还可单独的进行运行,可快速的制作出CHM文件,简单又实用,有需…

html 制作箭头,怎么使用html制作箭头?制作箭头代码分享!

我们在制作静态页面的时候一般的都会使用一些什么箭头、按钮等等各种形状的控件,但是一般比较常使用的就是用图片加入然后再设置函数从而达到预期的效果,那么今天我们就来说说不用照片怎么设计一个箭头吧! 1.编写盒子代码 首先我们使用开发工…

可视化html dream,推荐十款非常优秀的 HTML5 在线设计工具

网络有很多优秀的设计和开发工具可能大家都不知道,因此这篇文章就向设计师推荐十款优秀 HTML5 在线工具,这些工具能够帮助设计师们设计出更有创意的作品。随着 HTML5 技术的不断成熟,网络上涌现出越来越多的优秀 HTML5 应用,一起看…

易企秀如何导出html,易企秀怎么免费制作h5?

如何使用易企秀制作一个免费的html5页面?如何使用易企秀制作一个免费的h5页面来进行宣传?易企秀如何制作一个营销页面? 方法步骤 1.易企秀是一款非常好用的营销工具,用户能够在里面免费的制作出一个h5页面,来进行产品的…