Vue.js是一个轻量级的JavaScript框架,广泛用于构建用户界面。它提供了一套丰富的指令,帮助开发者快速构建交互式的Web应用程序。本文将介绍个人使用的滑动指令,并解释它们的用法和功能。大家可以根据具体的需求,并结合其他Vue特性和功能来实现更复杂的交互效果。某音的教学视频代码修改版
const distance = 100;
const duration = 800;
// 创建一个 WeakMap 实例
const animationMap = new WeakMap();
// 判断元素是否在视口之下
function isBelowViewport(el) {
const rect = el.getBoundingClientRect();
return rect.top > window.innerHeight;
}
// 创建一个观察者实例
const ob = new IntersectionObserver((entries) => {
for (const entry of entries) {
// 判断元素是否在视口之下
if (entry.isIntersecting) {
// 获取元素对应的动画实例并播放
const animation = animationMap.get(entry.target);
animation.play();
ob.unobserve(entry.target);
}
}
});
export default {
// 1. 通过指令钩子函数的参数 el 获取到 DOM 元素
mounted(el) {
// 2. 判断元素是否在视口之下,如果不是则不执行动画
if (!isBelowViewport(el)) {
// 直接执行动画
el.animate(
[
{
transform: `translateY(${distance}px)`,
opacity: 0,
},
{
transform: `translateY(0)`,
opacity: 1,
},
],
{
duration: duration,
easing: "ease",
}
);
return;
}
// 3. 创建动画实例并暂停
var animation = el.animate(
[
{
transform: `translateY(${distance}px)`,
opacity: 0,
},
{
transform: `translateY(0)`,
opacity: 1,
},
],
{
duration: duration,
easing: "ease",
}
);
// 4. 将动画实例存储到 WeakMap 中
animation.pause();
// 5. 将元素和动画实例关联起来
animationMap.set(el, animation);
// 6. 元素进入视口时播放动画
ob.observe(el);
},
// 7. 元素移除时取消监听
unmounted(el) {
ob.unobserve(el);
},
};
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。