javascript - 当容器在滚动视图中时,有没有办法触发 gif 动画
问题描述
我在一个基本的 HTML CSS 网站上有几个 gif 动画,我想知道是否有办法在滚动视图中触发 gif 并播放一次。我正在使用 scrollMagic 制作其他动画,但我似乎无法很好地控制 gif 动画。我不太熟悉我需要监听或跟踪事件监听器以在滚动时播放或绑定 gif 控件的属性。如果有任何示例使用 gif 结合屏幕视图或滚动来解释类似情况,请告诉我,谢谢!
解决方案
您可以在每个这样的 gif 上放置一个 IntersectionObserver,当它在视口中可见时,给它正确的 src,当它离开视口时,删除 src。这将确保它在重新出现时再次播放。
function callback(entries) {
for (let i = 0; i < entries.length; i++ ) {
entries[i].target.src = (entries[i].isIntersecting) ? entries[i].target.getAttribute('data-src') : "";
}
}
const gifs = document.querySelectorAll('.gif');
const observer = new IntersectionObserver(callback);
for (let i = 0; i < gifs.length; i++) {
observer.observe(gifs[i]);
}
.gif {
position: relative;
top: 150vh;
min-width: 1px;
min-height: 1px;
width: 20vh;
height: auto;
}
<img src="" class="gif" data-src="https://i.stack.imgur.com/jBSrY.gif" />
推荐阅读
- sql - 将一个数据库中的表插入另一个数据库
- java - 应用程序未在高于 22 的 API 上运行
- python - 为什么我嵌入在 tkinter 框架中的 matplotlib 图形在平移后才显示其 x 轴值和网格线?
- php - 基于数据库记录在laravel中创建带有子数组的数组
- python - 使用 selenium docker 独立时的不一致
- android - Jetpack compose 中的 Lottie 动画比例类型
- dax - 如何有条件地计算前几天?
- flask - Flask loguru - 在日志消息中显示堆栈跟踪
- r - MissForest 中的并行化
- csv - 将 CSV 文件加载到 db2 表中时,特殊字符会导致问题