首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过JS触发的CSS动画只能每隔一次点击播放一次

是因为CSS动画默认只会在元素第一次加载时播放一次,之后需要重新触发才能再次播放。这是因为CSS动画的播放状态是由CSS样式控制的,而JS触发的动画只是改变了元素的CSS样式,而不会改变CSS动画的播放状态。

要实现每次点击都能播放CSS动画,可以通过JS动态添加CSS类来触发动画。具体步骤如下:

  1. 在CSS中定义动画效果:
代码语言:txt
复制
@keyframes myAnimation {
  /* 定义动画的关键帧 */
}

.myAnimationClass {
  animation: myAnimation 1s; /* 指定动画名称和持续时间 */
}
  1. 在HTML中添加需要触发动画的元素,并为其添加一个初始的CSS类:
代码语言:txt
复制
<div id="myElement" class="myAnimationClass"></div>
  1. 使用JS监听点击事件,并在每次点击时动态添加/移除CSS类:
代码语言:txt
复制
var element = document.getElementById("myElement");

element.addEventListener("click", function() {
  element.classList.remove("myAnimationClass"); // 先移除CSS类
  void element.offsetWidth; // 强制浏览器重新计算样式,以便重新触发动画
  element.classList.add("myAnimationClass"); // 再添加CSS类,触发动画
});

这样,每次点击元素时,都会先移除CSS类,然后重新添加CSS类,从而触发CSS动画播放。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

jQuery

`是jQuery的顶级对象,相当于原生js中的window,元素通过`包装成jQuery对象,调用jQuery属性和方法。...解决方法:停止排队 //(1)stop()方法用于停止动画或效果。 //(2)注意:stop()写到动画或者效果的前面,相当于停止结束上一次的动画。只执行最新的一次。...(也可以把绑定事件的on()改为one()表示事件只触发一次) $("p").off(); // 解绑p元素所有事件处理程序 $("p").off( "click"); // 解绑p元素上面的点击事件...$("ul").off("click", "li"); // 解绑事件委托 3.自动触发事件 trigger() 有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。...可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。

21.1K50

两种方案开发小程序动画

在普通的网页开发中,动画效果可以通过css3来实现大部分需求,在小程序开发中同样可以使用css3,同时也可以通过api方式来实现。...一、模块移动动画 动画效果: 下图有两组动画,分别为api方式(上)与css3方式(下)完成的效果,点击move按钮,动画启动。 ?...通过这种方法产生的动画,无法按照原有轨迹收回,所以在事件之后设置了定时器,定义在执行动画2s之后,执行另一个动画。同时动画只能执行一次,如果需要循环的动效,要在外层包裹一个重复执行的定时器到。...二、音乐播放动画 上面的模块移动动画不涉及逻辑交互,因此新尝试了一个音乐播放动画,该动画需要实现暂停、继续的效果。 动画效果: ?...api方式存在较多局限性: 动画只能执行一次,循环效果需要通过定时器完成。 无法按照原有轨迹返回,需要返回必须定义定时器。 频繁借助定时器在性能上有硬伤。 综合以上,推荐通过css3来完成动画效果。

2.1K20
  • 两种方案开发小程序动画

    在普通的网页开发中,动画效果可以通过css3来实现大部分需求,在小程序开发中同样可以使用css3,同时也可以通过api方式来实现。...一、模块移动动画 动画效果: 下图有两组动画,分别为api方式(上)与css3方式(下)完成的效果,点击move按钮,动画启动。...通过这种方法产生的动画,无法按照原有轨迹收回,所以在事件之后设置了定时器,定义在执行动画2s之后,执行另一个动画。同时动画只能执行一次,如果需要循环的动效,要在外层包裹一个重复执行的定时器到。...二、音乐播放动画 上面的模块移动动画不涉及逻辑交互,因此新尝试了一个音乐播放动画,该动画需要实现暂停、继续的效果。...api方式存在较多局限性: 动画只能执行一次,循环效果需要通过定时器完成。 无法按照原有轨迹返回,需要返回必须定义定时器。 频繁借助定时器在性能上有硬伤。 综合以上,推荐通过css3来完成动画效果。

    17410

    让你的网页更丝滑(一)

    RAIL 关键指标 用户操作 响应(Response) 小于100ms 点击按钮。 动画(Animation) 小于16ms 滚动页面,拖动手指,播放动画等。...除了最后的合成,前面四个步骤在不同的场景下都可以被跳过。例如:CSS动画就可以跳过JS运算,它不需要执行JS。 css-triggers1给出了不同的CSS属性被更改后会触发像素管道的哪些步骤。...3.2 如何让JS动画更丝滑 JS动画是使用定时器不停的执行JS,通过在JS中修改样式完成网页动画;若想保证动画流畅,从JS的执行到最终浏览器显示出画面,每一帧总耗时最多16ms,这样动画才能达到60FPS...所以会导致即便我们能保障每一帧的总耗时小于16ms,但是执行的时机如果在每一帧的中间或最后,最后的结果依然是没有办法每隔16ms让屏幕产生一次变化。如图3-6所示: ?...我们同样可以通过减少像素管道的步骤和每个步骤所耗费的时间让CSS动画更流畅。 本节介绍的CSS动画的优化方式同样适用于JS动画,但上一节介绍的JS动画优化方法不适用于CSS动画,它们是包含关系。

    1.7K30

    要实现60FPS动画, 你需要了解这些

    image 下面通过一个简单的例子, 来观察上述渲染过程 <!...使用硬件加速后, 绘制过程将不再占用主线程, 直接在 GPU 上完成 因此, 点击按钮阻塞主线程, 也并不会影响动画, 你可以亲自试一试 使用 JS 动画 首先使用 setInterval 实现动画循环...FPS 帧率, 大约每隔10s会掉一次帧 ?...image timer 是固定间隔时间触发的, 每过一段时间就会出现在一帧内 timer 触发两次的情况 而且同样的, JS动画也是会被主线程阻塞的 使用 requestAnimationFrame 优化...GPU 上执行, 不受主线程卡顿影响 没用硬件加速的 CSS 动画, 仍需要在主线程上完成绘制过程 JS 动画, 用 requestAnimationFrame 会比 setInterval 效果更好

    1.3K10

    前端动效讲解与实战

    2.1.2 交互型动画用户自已参与的,对于交互性动画而言,我们可以在动画播放的某个时间节点触发相应的操作,进而让用户参与到其中,最常见的例子红包雨,不仅仅能提升用户的体验,还能提升我们的产品的多元性。...k,height);(3)通过JS来控制CSS属性值变化这种方式和前面CSS3帧动画一样,有三种方式,一种是通过JS切换元素背景图片地址background-image,一种是通过JS切换元素背景图片定位...transition是一次性的,不能重复发生,除非一再触发。transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。...不仅实现了CSS3动画的深度封装,更多的是通过js驱动来实现操作动画的状态,timeline实现了对于多个分支动画的管理,对于实现更为复杂的动画提供了可能。...简单的展示型动画+弱交互:对于简单的动画展示并且需要有简单的交互行为,比如用户点击一下暂停执行相应操作,待操作完成继续播放动画,交互方面比较偏弱,可以采用Anime.js的方案。

    2.7K30

    HTML简单音乐播放器「建议收藏」

    CSS3动画: 动画一:点击 播放/暂停 按钮, 歌曲信息模块向上/向下移动 /* 歌曲信息模块 */ #player-content1{ position: absolute;...设置CSS3动画过渡属性: transition:top 0.3s ease;来生成过渡时间0.3s,速度逐渐变慢的: 上移动画效果:top:0px; ——>top:-85px; 下移动画效果: top...的animation属性 animation属性:比较类似于 flash 中的逐帧动画; 在 CSS3 中是由属性keyframes来完成逐帧动画的; animation: rotateAlbumArt...; // 设置音频播放时间 为当前鼠标点击的位置时间 seekBar.width(seekT); // 设置进度条播放长度,为当前鼠标点击的长度 hideHover();...// 调用该函数,隐藏原来鼠标移动到上方触发的进度条阴影 } // 在音频的播放位置发生改变是触发该函数 function updateCurrTime() {

    4.3K30

    setTimeout的那些事

    这是没办法的啊,我只能检测队列中的任务,没法检测正在执行的任务。You can you up?...3.2 防止事件疯狂触发 除了点击这种单次事件,浏览器上有一些会疯狂触发的事件,例如onreaize事件。如果给这个事件绑定了处理函数,在浏览器窗口大小改变的时候会很高频地触发处理函数。...gif动画 有这样一个需求:设计给了一个gif动画,gif本身是单次播放的。...产品要求页面加载时动画播放一次。后续用户只要鼠标hover到动画上,动画就重新播放一次。...gif并没有重新播放一次。 当时想的是,可能是IE反应太慢了,在src属性重置的那个间隔内,没有意识到这一点。于是就尝试加了个setTimeout,把重新设置src的操作丢到了异步任务队列中。

    1.6K10

    setTimeout的那些事

    这是没办法的啊,我只能检测队列中的任务,没法检测正在执行的任务。You can you up?...3.2 防止事件疯狂触发 除了点击这种单次事件,浏览器上有一些会疯狂触发的事件,例如onreaize事件。如果给这个事件绑定了处理函数,在浏览器窗口大小改变的时候会很高频地触发处理函数。...gif动画 有这样一个需求:设计给了一个gif动画,gif本身是单次播放的。...产品要求页面加载时动画播放一次。后续用户只要鼠标hover到动画上,动画就重新播放一次。...gif并没有重新播放一次。 当时想的是,可能是IE反应太慢了,在src属性重置的那个间隔内,没有意识到这一点。于是就尝试加了个setTimeout,把重新设置src的操作丢到了异步任务队列中。

    2.1K00

    如何用JavaScript捕获CSS3的动画事件

    CSS3动画执行起来平滑且快速,但不像JavaScript动画,你可以一帧一帧控制。幸运的是,你可以在任何一个元素上使用事件处理来决定动画的状态。同时它支持连续播放不同动画这种细粒度的控制。...", AnimationListener, false); 动画第一次启动时,animationstart 事件触发。...animationiteration `anim.addEventListener("animationiteration", AnimationListener, false);` animationinteration事件会在每一次新的动画执行过程中被触发...,即除了第一次之外的每一个迭代过程。...更多来自本作者的内容 在JavaScript演示中查看CSS3动画事件 演示页面显示一个按钮。当它被点击时,“enable”类被切换开始flash动画。当动画事件触发时,状态显示在控制台中。

    2.1K20

    js动画和css3动画_js控制css动画

    代码的复杂度高于CSS动画 优点: JavaScript动画控制能力很强, 可以在动画播放过程中对动画进行控制:开始、暂停、回放、终止、取消都是可以做到的。...CSS动画只能暂停,不能在动画中寻找一个特定的时间点,不能在半路反转动画,不能变换时间尺度,不能在特定的位置添加回调函数或是绑定回放事件,无进度报告 代码冗长。...强制使用硬件加速 (通过 GPU 来提高动画性能) 代码相对简单,性能调优方向固定 对于帧速表现不好的低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外代码 CSS动画流畅的原因: 渲染线程分为...如果CSS动画只是改变transform和opacity,这时整个CSS动画得以在compositor thread完成(而JS动画则会在main thread执行,然后触发compositor进行下一步操作...CSS动画比JS流畅的前提: JS在执行一些昂贵的任务 同时CSS动画不触发layout或paint 在CSS动画或JS动画触发了paint或layout时,需要main thread进行Layer树的重计算

    12.3K30

    手淘互动动效的探索

    最早我们只能看到PC端的Web页面,随着移动端的快速发展,移动端的互动方式也会越来越丰富。...15年年货节,我们尝试了第一次的改变,通过前端CSS或JS的技术手段,把一个Gif图转换成动画效果。完成这个效果的时候,无论是需求方还是产品都很满意,因为这种方案可以随时更改动画中的元素。...在我们的动画管理中有一个timeline,它很像导演的角色。 通过时间轴可以很好地控制动画的场景,包括它何时播放、何时停止、何时退出。...这是CSS管理动画最大的缺点之一。 动画(片段)之间有重叠 后来我们改变了一种模式,通过JS来监控第一段动画,并告诉后面的动画什么时候结束再可以开始播放。...AFT架构的演变 最早的时候我们是利用IDE导出一份json数据,通过第三方JS库来实现DOM的动画效果。

    2.8K91

    vue-cli学习笔记-常用属性与方法

    stop之前 父div和子div都有click事件 当点击父级div的时候 子级不会触发,当点击子级click事件的时候 父级或被触发(事件冒泡) 在子级加上@click.stop后 父级就不会被触发了...配置 时间格式化案例 引入第三方插件 cmd命令行:npm i moment --save 模板 格式化日期: 拓展: 每隔一秒刷新日期 过度与动画 过渡 示例: 的阶段中应用, 在元素被插入之前生效,在过渡/动画完成之后移除。 这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。...*/ /* v-leave-active:定义离开过渡生效时的状态。 在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效, 在过渡/动画完成之后移除。...第三方动画 cmd命令:npm install animate.css --save 或者用cdn引入 <link href="

    25610

    如何实现一个下载进度条播放进度条

    一个主要问题是动画的滞后性:当下载进度到某个点的时候,你再用250ms的动画过渡过去,这个时候已经慢了,所以很多人可能因为这个原因或者嫌麻烦,直接就不做动画了,在进度事件触发的时候直接更新进度条相应的位置...方法有很多:jQuery的animate、Web Animation、requestAnimationFrame、CSS动画结合JS控制、其它第三方动画库等等,我比较喜欢用原生Web Animation...并且每次触发动画的时候都是获取当前的translate位置,做为本次动画的起点,这样可以保证动画的连贯性。...如果是播放进度条的例子,需要监听video/audio元素的timeupdate事件,这个事件的触发约250ms(实测)触发一次,可以不用节流。效果如下图所示: ?...其它不支持的浏览器可以使用谷歌官方的一个polyfill,就是比较大一点。它和CSS动画一样,但是可以用JS去控制开始暂停等,所以它和CSS动画一样具有GPU加速,不占用JS线程等优势。

    2K20

    从UI到AI——移动端H5生成技术漫谈

    现在的Css3已近拥有了更多优秀的功能,包括但不仅限于动画、css滤镜、遮罩等,其中动画可以实现延时、时长、重复次数、播放次序、播放方向等多种属性的设置。...动画可以是连续的,也可以是不连续的,不连续也就是帧动画。 Css mask则可以用来实现遮罩动画,不过通过遮罩实现的动画性能上会稍显弱势。而对于需要空间感的动画使用css 3d旋转能更好的实现。...Css动画特点 Css动画是在完整的DOM结构上实现的,所以便于同时添加各种事件触发,写起来也非常简单,只需要拼凑各种css属性就能达到效果。...第二种就是像素颜色,它会将场景渲染两次,第一次清除场景中所有的材质颜色,第二次为每一个物体渲染上不同的颜色,然后根据点击时获取的颜色判断被触发的物体。...对于前两点可以通过类ppt的编辑器解决,通过引入坐标系的概念同样也可以解决手机分辨率的问题。至于事件的触发,可以为每个组件配置相应的事件响应机制,通过可视化列表的形式展现出来。

    1.9K50

    巧妙使用 CSS 控制动画行进

    今天要介绍一种很简单的使用 CSS 控制动画播放与暂停的小技巧。使用好了,可以在很多实际场景得以运用。 我们先来看个例子,本例子是我在闲逛 Codepen 时看到了,很有意思: ?...本文主要讲的是如何只用 CSS 控制一次动画的行进,暂停与开始。 拆解分析需求 上述动画控制要完成的效果是: 页面 render 后,无任何操作,动画不会开始。...只有当鼠标对元素进行 click ,触发元素的 :active 伪类效果的时候,动画才开始进行; 动画进行到任意时刻,鼠标停止点击,则动画停止; 重新对元素进行点击,动画继续从上一帧结束的状态开始 如果动画播放完...,再点击不会重复播放,动画状态保留在动画的最后一帧 解决需求 看着好像挺复杂的,其实实现起来很容易,主要借助了伪类 :active 与动画的播放状态 animation-play-state 。...animation: move 1s linear; animation-fill-mode: forwards; + animation-play-state: paused; } 只有通过点击的时候

    1.1K20

    玩转HTML5移动页面(动效篇)

    分两种情况: 1.如果时间允许的话,基本做法是先把一个元素切成不同的块状,例如小人的手脚都切成不同图片,然后让它们重新组合,再通过赋予不同的CSS动画来让它生动起来,这里引用个webank的例子: ?...(查看DEMO) 2.如果时间紧凑,又不像桑尼一样擅长于动画细节,可以使用一些辅助工具: Animate.css,通过直接预览选择想要的动效,然后下载它的CSS把对应的keyframe扒下来就好了(引用整个...这里有个问题,IOS是不能自动播放音乐的,一定要触发一个用户交互事件,例如点击。...但是有一种hack的方法可以让IOS微信侧页面自动播放(SAFARI依旧无效): 通过new一张图片,监听一张图片的onload事件,结束后回调执行音频播放audio.play()即可,原理估计是动了dom...结构,相当于执行了一次交互。

    4.3K80

    医疗数字阅片-医学影像-Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。_.throttle(func, , [option

    电梯延迟了改变楼层的功能,但是优化了资源。 在顶部按钮上点击或移动鼠标试一下: 你可以看到连续快速的事件是如何被一个 debounce 事件替代的。...基于 AJAX 请求的自动完成功能,通过 keypress 触发 为什么用户还在输入的时候,每隔50ms就向服务器发送一次 AJAX 请求?...可以使用 rAF API 替换 throttle 方法,考虑一下优缺点: 优点 动画保持 60fps(每一帧 16 ms),浏览器内部决定渲染的最佳时机 简洁标准的 API,后期维护成本低 缺点 动画的开始...涉及到 AJAX 请求,添加/移除 class (可以触发 CSS 动画),我会选择 _.debounce 或者 _.throttle ,可以设置更低的执行频率(例子中的200ms 换成16ms)。...总之: debounce:把触发非常频繁的事件(比如按键)合并成一次执行。 throttle:保证每 X 毫秒恒定的执行次数,比如每200ms检查下滚动位置,并触发 CSS 动画。

    2.5K20

    css+js实现左右滑动卡片组件

    最近的一个活动页面需要做一个可以左右滑动的抽签效果,故通过用css的transform属性和js结合来模拟可以无限滚动的效果。...连续滑动判断 当在上次滑动动画还未播放结束时用户又进行了第二次滑动时,需要执行一下操作:     1)....取消第二次滑动时的动画播放和位移重置 // 若是上次动画未结束不需要再次启动动画和重置目标位移 if( this.ani_move && this.fingerTouch == false) { } else...{ this.lon = 0; cardAnimate.animate(); } 写在最后 目前这个滑动效果只能针对卡片相同,停留位置固定的情况,因为需要做到位置重合。...使用css transform来做无限滚动的效果,可以避免改变dom结点带来的页面重新布局。 下图是chrome cpu6倍减速调试效果,没有触发layout,FPS基本维持在60左右。

    30.7K102

    【译】如何避免在JavaScript中阻塞DOM

    这意味着当浏览器正在执行代码的时候,所有其他事情都会停下来:菜单命令,下载,渲染,DOM更新甚至GIF动画的播放。 对于用户来说,这个过程往往不是很明显,因为代码处理是以小块的形式快速发生。...例如:当一个按钮被点击后触发了一个事件,这个事件执行一个函数,在函数内进行了一些计算并更新DOM。一旦完成,浏览器便空闲下来,从任务队列中取出下一个任务来处理。...在下面的例子中,当按钮的点击事件触发时,相应的处理函数通过为元素添加CSS类的方式使其执行动画。而当动画结束时,这个CSS类会被一个匿名回调函数移除。...硬件加速动画 大多数现代浏览器不会阻止硬件加速的CSS动画,这些动画运行在自己的层上。 默认设置下,前面的例子中“入侵者”通过改变left-margin来移动。...现在尝试另一次sessionStorage写入,我们会发现即使GIF动画仍然是停滞的,“入侵者”可以正常地持续运动。注意到因为肢体的摆动是由JavaScript控制的,所以它们仍然会因阻塞而暂停。

    2.8K10
    领券