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

Vue3 GSAP动画库绑定滚动条视差效果 绑定滚动条 滚动条动画 时间轴

介绍

GSAP 用于创建高性能、可控制的动画效果。由 GreenSock 团队开发,旨在提供流畅、快速、稳定的动画效果,并且兼容各种浏览器。 提供了多个插件,扩展了动画的功能,如 ScrollTrigger(滚动触发动画)、DrawSVG(绘制路径动画)、MorphSVG(路径形状变换)等。通过绑定滚动条制作动态效果。

效果

页面进前
在这里插入图片描述
随着滚动条的滚动放大

进入后

在这里插入图片描述

安装

 npm install gsap

代码

<script setup>
import gsap from 'gsap';  // 导入 GSAP 动画库
import { ScrollTrigger } from "gsap/ScrollTrigger";  // 导入 GSAP 的 ScrollTrigger 插件,用于实现滚动触发动画
gsap.registerPlugin(ScrollTrigger);  // 注册 ScrollTrigger 插件,使其可用import { onMounted, ref } from "vue";  // 导入 Vue 相关的生命周期钩子和引用(ref)// 使用 Vue 的生命周期钩子 onMounted,当组件挂载到页面时执行动画
onMounted(() => {animation();  // 调用动画函数
});// 创建一个对 logo 元素的引用,后续用于获取 DOM 元素
const logo = ref(null);// 定义动画函数
function animation() {gsap.fromTo(logo.value,  // 动画的目标元素是 logo 元素{fontSize: '10vw',  // 初始字体大小为 10vwcolor: '#ffff',  // 初始文字颜色为白色textAlign: 'center',  // 初始文字居中对齐},{duration: 4,  // 动画持续时间为 4 秒ease: 'power1',  // 动画的缓动效果,'power1' 表示较为平缓的加速/减速曲线fontSize: '28vw',  // 动画结束时字体大小为 28vw(变大)color: 'transparent',  // 动画结束时文字颜色变为透明scrollTrigger: {  // 使用 ScrollTrigger 插件来基于滚动位置触发动画trigger: logo.value,  // 当 logo 元素滚动到视口时触发动画scrub: true,  // 启用 scrub 功能,允许滚动时平滑控制动画进度pin: true,  // 使元素在滚动时固定在页面上,直到动画结束start: 'top center',  // 当 logo 元素的顶部进入视口中心时开始动画end: 'bottom top'  // 当 logo 元素的底部进入视口顶部时结束动画}});
}
</script><template><!-- 这是页面的结构 --><div class="box"><!-- 用于模拟页面中的其他内容,滚动条可用来查看整个动画效果 --><div style="height: 100vh; background-color: red">14</div><!-- 这是 logo 部分,包含三个文字元素 --><div ref="logo" class="preview center"><div class="logo-text-1"></div>  <!-- logo 的第一部分文字 --><div class="logo-text-2"></div>  <!-- logo 的第二部分文字 --><div class="logo-text-3"></div>  <!-- logo 的第三部分文字 --></div></div>
</template><style scoped>
/* 定义页面的整体样式 */
.box {background-color: #c36ed9;  /* 设置背景颜色为紫色 */height: 5000px;  /* 设置 box 的高度为 5000px,确保页面有足够的高度可以滚动 */overflow: hidden;  /* 防止超出 box 的内容显示出来 */
}/* 定义每个 logo 部分的样式 */
.logo-text-1 {background: url("assets/site_1.jpeg") no-repeat center/cover;  /* 设置 logo-text-1 的背景图像,并使其覆盖整个区域 */background-clip: text;  /* 将背景应用到文本上,实现文字填充背景图像 */font-weight: bold;  /* 设置字体加粗 */
}.logo-text-2 {background: url("assets/site_2.jpg") no-repeat center/cover;  /* 设置 logo-text-2 的背景图像 */background-clip: text;  /* 将背景应用到文本上 */font-weight: bold;  /* 字体加粗 */
}.logo-text-3 {background: url("assets/site_3.jpg") no-repeat center/cover;  /* 设置 logo-text-3 的背景图像 */background-clip: text;  /* 将背景应用到文本上 */font-weight: bold;  /* 字体加粗 */
}/* 居中对齐 logo 元素 */
.center {display: flex;  /* 使用 Flexbox 布局 */justify-content: center;  /* 水平居中 */align-items: center;  /* 垂直居中 */
}
</style>

效果灵感来源QQ官网
在这里插入图片描述


页面进入时推进动画

页面进入时
在这里插入图片描述

页面进入后

在这里插入图片描述

<template><div class="box"><!-- 这是标题容器,用来显示 "去哪旅行" --><div class="title-text"><h1>去哪旅行</h1></div></div>
</template><style scoped>
/* 外层容器,设置背景颜色和高度 */
.box{background-color: royalblue; /* 设置背景颜色为皇家蓝 */height: 1000px; /* 设置容器的高度为1000px */overflow: hidden; /* 隐藏溢出的内容 */
}/* 标题样式 */
.title-text{text-align: center; /* 文字居中对齐 */display: flex; /* 使用flexbox来居中元素 */align-items: center; /* 垂直居中 */justify-content: center; /* 水平居中 */font-size: 8vw; /* 字体大小为视口宽度的8% */background: url("assets/site_4.png") no-repeat center/cover; /* 使用背景图,居中且覆盖容器 */background-clip: text; /* 背景裁剪为文字形状 */color: transparent; /* 文字颜色设置为透明,使背景图显示 */animation: scale 3s forwards; /* 添加动画效果:缩放动画 */white-space: nowrap; /* 禁止文字换行 */letter-spacing: 0.1em; /* 调整字间距,增加文字间的空隙 */
}/* 动画定义 */
@keyframes scale {from{font-size: 30vw; /* 初始字体大小为30vw(视口宽度的30%) */}to{font-size: 8vw; /* 动画结束时字体大小为8vw */color: #ffff; /* 文字颜色为白色 *//* 为文字添加发光效果 */text-shadow: 0 0 5px rgba(255, 255, 255, 0.7), /* 第一个阴影效果 */0 0 10px rgba(255, 255, 255, 0.7), /* 第二个阴影效果 */0 0 20px rgba(255, 255, 255, 0.7); /* 第三个阴影效果 */}
}</style>
http://www.xdnf.cn/news/909037.html

相关文章:

  • 破壁焕新能:DeviceNET转EtherNet/IP网关赋能烟草智能制造跃迁
  • Redis 主从 + 哨兵集群部署
  • Python爬虫伪装
  • 校招 Java 面试基础题目解析学习指南含新技术实操要点
  • Android第十三次面试总结基础
  • 【工具变量】上市公司企业华证esg数据集(2009-2024年)
  • 在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用
  • 2025远离Deno和Fresh
  • 5G 核心网中 NF 选择机制:基于优先级、权重与负载分担的策略解析
  • 靶场(十九)--靶场体会小白分享--Billyboss
  • Langgraph实战--在Agent中加入人工反馈
  • OLED(SSD306)移植全解-基于IIC
  • 零基础完成 Token 创建的全流程教学
  • 芋道源码 - 本地文件上传配置与实现
  • 【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
  • 配置sudo免密却不生效的问题
  • 【图论 强连通分量】P1653 [USACO04DEC] Cow Ski Area G|普及+
  • for(;;) 和while(1) 的无限循环用法对比,优缺点说明
  • PHP:Web 开发的强大基石与未来展望
  • 给网站添加live2d看板娘
  • 当主观认知遇上机器逻辑:减少大模型工程化中的“主观性”模糊
  • WHAT - script type=“module“
  • 通过Spring AI框架搭建mcp服务端说明
  • 【Block总结】DBlock,结合膨胀空间注意模块(Di-SpAM)和频域模块Gated-FFN|即插即用|CVPR2025
  • FineReport模板认证找不到模板
  • pyarmor加密python程序
  • 【DAY41】简单CNN
  • 深入浅出Java ParallelStream:高效并行利器还是隐藏的陷阱?
  • 【使用conda】安装pytorch
  • python:基于pyside6的桌宠源码分享