JS如何监听CSS 动画结束

本文介绍如何使用JS监听CSS3 transitionEnd事件,实现动画结束后执行回调。通过实例代码演示了当鼠标移入元素触发动画时,如何监听并响应transitionEnd事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用描述

在使用JS控制动画时一般需要在动画结束后执行回调去进行DOM的相关操作,所以需要监听动画结束进行回调。JS提供了以下事件用于监听动画的结束,简单总结学习下。

CSS3动画监听事件

transitionEnd事件

ransitionEnd事件会在CSS transition动画结束后触发。

动画结束后触发监听事件

 

<!DOCTYPE html>
<html>
<head>
    <title>transtionend demo</title>
    <style type="text/css">
        *{margin:0;padding: 0;}
        .demo{
            margin:100px;
            width:100px;
            height: 100px;
            background-color: #ddc;
            transition: all 0.5s ease-out;
        }
        .demo:hover{
            width: 200px;
        }
    </style>
</head>
<body>
    <div id="demo" class="demo">
        鼠标移入
    </div>
    <script type="text/javascript">
        var element = document.getElementById('demo')
        element.addEventListener('transitionend', handle, false)
        function handle(){
            alert('transitionend事件触发')
        }
    </script>
</body>
</html>

 

### 让CSS动画结束后元素消失 要实现CSS动画结束后使元素消失的效果,可以通过以下方法完成: #### 方法一:使用 `animation-fill-mode` 属性 通过设置 `animation-fill-mode: forwards;` 可以让动画结束后的状态保持不变。如果希望元素在动画结束后完全隐藏,则可以在动画的最后一帧将其透明度设为 0 或者调整其可见性。 以下是具体代码示例: ```css @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } .element-to-disappear { animation-name: fadeOut; animation-duration: 2s; animation-fill-mode: forwards; /* 动画结束后保留最后一帧的状态 */ } ``` 此方法适用于支持 CSS 动画的浏览器[^2]。 --- #### 方法二:结合伪类 `:after` 和 JavaScript 实现更复杂效果 对于某些场景下需要动态控制的情况,可以借助 JavaScript 来监听动画结束事件并移除元素。例如: HTML 结构如下: ```html <div class="disappearing-element"></div> ``` CSS 定义动画: ```css .disappearing-element { width: 100px; height: 100px; background-color: red; animation: shrinkAndFade 2s ease-in-out; animation-fill-mode: forwards; } @keyframes shrinkAndFade { from { transform: scale(1); opacity: 1; } to { transform: scale(0); opacity: 0; } } ``` JavaScript 监听动画结束事件: ```javascript const disappearingElement = document.querySelector('.disappearing-element'); disappearingElement.addEventListener('animationend', () => { disappearingElement.style.display = 'none'; // 动画结束后彻底移除元素 }); ``` 这种方法不仅可以让元素视觉上消失,还可以真正从 DOM 中移除它。 --- #### 方法三:基于 Marquee 效果扩展 如果目标是创建类似于滚动字幕(Marquee)的效果,并且希望文字或图片在离开视口后自动消失,可以参考以下方式: 定义容器和子项样式: ```css #marquee { perspective: 500px; font-size: 0; overflow: hidden; /* 确保超出部分不可见 */ white-space: nowrap; } #marquee div { display: inline-block; animation: scrollLeftToRight 5s linear infinite; } @keyframes scrollLeftToRight { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } ``` 为了实现元素逐渐淡出,在动画接近尾声时降低透明度即可: ```css @keyframes scrollLeftToRightWithFade { 0%, 90% { transform: translateX(-100%); opacity: 1; } 100% { transform: translateX(100%); opacity: 0; } } ``` 上述代码片段展示了如何利用渐变位置重置技术来优化动画表现[^1]。 --- #### 注意事项 - 如果需要兼容旧版浏览器,请注意测试是否支持 CSS 动画功能。 - 对于复杂的三维变换场景,建议合理配置父级元素的透视属性(如 `perspective`),以便获得更好的视觉体验[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值