当前位置: 首页 > news >正文

前端过渡动画

前端过渡动画

vue3

1、组件进入视口时向上移动且渐显

1、创建js文件addViewportEffect.js

function slideDownEffect(element) {console.log("执行");element.style.transform = 'translateY(0)';element.style.opacity = '1';
}/*** 添加视口效果到指定的类名元素上。* @param {string} className - 要添加效果的元素的类名。* @param {Function} [effectFunction=slideDownEffect] - 当元素即将进入视口时要执行的动画效果函数。* @param {string} [animatedClass='animated'] - 标记元素已执行动画效果的类名。*/
function addViewportEffect(className, effectFunction = slideDownEffect, animatedClass = 'animated') {document.addEventListener('DOMContentLoaded', function() {var elements = document.querySelectorAll(className);function isInViewport(el) {var rect = el.getBoundingClientRect();var viewportBottom = window.innerHeight || document.documentElement.clientHeight;return rect.top <= viewportBottom;}function checkElements() {elements.forEach(function(el) {if (isInViewport(el) && !el.classList.contains(animatedClass)) {effectFunction(el);el.classList.add(animatedClass); // 标记元素已执行动画效果}});}// 使用IntersectionObserver代替scroll事件监听器const observer = new IntersectionObserver((entries, observer) => {entries.forEach(entry => {if (entry.isIntersecting) {const element = entry.target;effectFunction(element);element.classList.add(animatedClass); // 动画完成后标记observer.unobserve(element); // 动画完成后取消对该元素的观察}});}, {threshold: 0.1 // 在元素10%进入视口时触发});elements.forEach(el => {observer.observe(el);});});
}// 导出函数,以便在其他文件中使用
export default addViewportEffect;

2、使用

先到需要这个效果的组件上创建一个class,内容如下:

.dx-01{opacity: 0;transform: translateY(200px);transition: opacity 1s ease-in-out, transform 1s ease-in-out;
}
<div class="dx-01">这是要执行效果的组件内容
</div>

然后在导入上面 js 的方法,并在页面创建时使用

<script>
import addViewportEffect from "@/utils/addViewportEffect.js";
export default {    mounted() {this.recommendsIndex = 0this.switchRecommend()addViewportEffect(".dx-01")},
}
</script>

js方法可复用,记得每次设置不同的class才行,不然会重复。

http://www.lryc.cn/news/413765.html

相关文章:

  • actual combat 38 ——vue
  • 测试面试宝典(四十七)— 功能测试用例一般包含哪些内容
  • rust_mac环境安装
  • 【前端面试】七、算法-递归
  • CmsEasy逻辑漏洞--零元购
  • Linux 内核源码分析---I/O 体系结构与访问设备
  • 在cPanelWHM中如何重置 MySQL 用户帐户密码
  • 软件测试基础1--功能测试
  • 《计算机网络》(第8版)第9章 无线网络和移动网络 复习笔记
  • 非负数、0和正整数 限制最大值且保留两位小数在elementpuls表单中正则验证
  • Java多线程-----定时器(Timer)及其实现
  • 【Linux修行路】进度条小程序
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
  • 【探索Linux】P.44(数据链路层 —— 以太网的帧格式 | MAC地址 | MTU | ARP协议)
  • <数据集>航拍行人识别数据集<目标检测>
  • 在 Windows 10 系统上部署 Medusa
  • Linux进程 (冯诺依曼体结构 管理 PCB 进程状态 僵尸进程 孤儿进程 运行阻塞挂起状态 进程优先级)
  • 《LlamaIndex 之美》-01-LLM、Prompt、Embedding基础入门
  • C++ 智能指针简单介绍及用法
  • k8s笔记之创建Istio Gateway规则
  • NAND行业回归盈利:AI与云存储需求驱动
  • 【限免】频控阵雷达:概念、原理与应用【附MATLAB代码】
  • 从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架
  • 学习硬件测试04:触摸按键+PWM 驱动蜂鸣器+数码管(P62~P67、P71、P72)
  • JS原型链
  • 《Java初阶数据结构》----5.<二叉树的概念及使用>
  • git查看记录详解
  • 检索增强生成RAG系列10--RAG的实际案例
  • 程序员自我提升的全面指南
  • 【golang】Golang手写元组 tuple | golang tuple