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

织梦 网站栏目管理广州营销推广

织梦 网站栏目管理,广州营销推广,房产网站怎么做400电话,海口自助建站简介 gsap 高性能的 JavaScript 动画库,在现代网页设计和开发中运用。 安装 npm install gsap React 框架中使用 可以考滤使用 react-gsap-enhancer 库,或者 gasp/react。 类组件使用 react-gsap-enhancer 高阶组件,函数组件使用 gasp/r…

简介

gsap 高性能的 JavaScript 动画库,在现代网页设计和开发中运用。

安装

npm install gsap

React 框架中使用

可以考滤使用 react-gsap-enhancer 库,或者 @gasp/react
类组件使用 react-gsap-enhancer 高阶组件,函数组件使用 @gasp/react 自定义 Hook。

npm install react-gsap-enhancer
#or
yarn add react-gsap-enhancer

TextPlugin

逐个单词更新

import React from "react";
import { gsap } from "gsap";
import { useGSAP } from "@gsap/react";
import { TextPlugin } from "gsap/dist/TextPlugin";gsap.registerPlugin(useGSAP, TextPlugin);const TextAnimation = () => {useGSAP(() => {gsap.to(".gasp-text", {duration: 2, // 动画持续时间stext: {value: "Your new text", // 新文本delimiter: " ", // 折分文本的字符newClass: "text-red-500", // 新文本样式},});});return (<div><h1 className="gasp-text">Hello World!</h1></div>);
};export default TextAnimation;

ScrambleTextPlugin

解码字符串

使用随机字符(默认大写,但您可以定义小写或一组自定义字符)打乱 DOM 元素中的文本,并定期刷新新的随机字符,同时在补间过程中(默认从左到右)逐渐显示新文本(或原始文本)。视觉上,它看起来像计算机正在解码一串文本。非常适合用于滚动效果。

import React from "react";
import { gsap } from "gsap";
import { useGSAP } from "@gsap/react";
import { ScrambleTextPlugin } from "gsap/ScrambleTextPlugin";gsap.registerPlugin(useGSAP, ScrambleTextPlugin);const TextAnimation = () => {useGSAP(() => {gsap.to(".gasp-text", {duration: 2, // 动画持续时间sscrambleText: "This is new text",});});return (<div><h1 className="gasp-text">Hello World!</h1></div>);
};export default TextAnimation;

 

SplitText

分割文本

import React from "react";
import { gsap } from "gsap";
import { useGSAP } from "@gsap/react";
import { SplitText } from "gsap/SplitText";gsap.registerPlugin(useGSAP, SplitText);const TextAnimation = () => {useGSAP(() => {const _split = new SplitText(".gasp-text", {type: "chars",charsClass: "char",});gsap.to(".char", {duration: 2, // 动画持续时间sy: 100,});});return (<div><h1 className="gasp-text">Hello World!</h1></div>);
};export default TextAnimation;

综合示例

目前的示例效果都是单个元素,如果多个元素,按顺序执行的效果处理方式应该如何了?这个就需要使用创建动画时间线方法。

timeline 动画时间线

import React from "react";
import { gsap } from "gsap";
import { useGSAP } from "@gsap/react";gsap.registerPlugin(useGSAP);const TextAnimation = () => {useGSAP(() => {// 设置初始状态gsap.set([".timeline-1", ".timeline-2", ".timeline-3"], {opacity: 0,y: 20,});// 创建动画时间线const tl = gsap.timeline({defaults: {duration: 1,ease: "power2.inOut",},});tl.to(".timeline-1", {opacity: 1,y: 0,stagger: 0.1,ease: "power2.inOut",duration: 1,}).to(".timeline-2", {opacity: 1,y: 0,stagger: 0.1,ease: "power2.inOut",duration: 1,}).to(".timeline-3", {opacity: 1,y: 0,stagger: 0.1,ease: "power2.inOut",duration: 1,});});return (<div><div className="timeline-1">Join our</div><div className="timeline-2">growing</div><div className="timeline-3">community</div></div>);
};export default TextAnimation;

时间线和 SplitText 同时运用

在逐块元素显示的基础上,每块元素并逐个单词显示

import React from "react";
import { gsap } from "gsap";
import { useGSAP } from "@gsap/react";
import { SplitText } from "gsap/SplitText";gsap.registerPlugin(useGSAP, SplitText);const TextAnimation = () => {useGSAP(() => {// 创建动画时间线const tl = gsap.timeline({defaults: {duration: 1,ease: "power2.inOut",},});// 为每个时间线元素创建 SplitText 实例const split1 = SplitText.create(".timeline-1", { type: "words" });const split2 = SplitText.create(".timeline-2", { type: "words" });const split3 = SplitText.create(".timeline-3", { type: "words" });// 设置分割后的单词初始状态gsap.set([split1.words, split2.words, split3.words], {opacity: 0,y: 20,});tl.to(".timeline-1", {opacity: 1,y: 0,duration: 0.5,onComplete: () => {gsap.to(split1.words, {opacity: 1,y: 0,stagger: 0.1,duration: 0.5,});},}).to(".timeline-2", {opacity: 1,y: 0,duration: 0.5,onComplete: () => {gsap.to(split2.words, {opacity: 1,y: 0,stagger: 0.1,duration: 0.5,});},}).to(".timeline-3", {opacity: 1,y: 0,duration: 0.5,onComplete: () => {gsap.to(split3.words, {opacity: 1,y: 0,stagger: 0.1,duration: 0.5,});},});});return (<div><div className="timeline-1">Join our growing community</div><div className="timeline-2">Hello World</div><div className="timeline-3">A New Day</div></div>);
};export default TextAnimation;

以上动画都是页面加载时执行,如果需要做到页面滚动到指定位置时执行,可以使用 ScrollTrigger 插件。

ScrollTrigger 视窗进入离开

import React from "react";
import { gsap } from "gsap";
import { useGSAP } from "@gsap/react";
import { SplitText } from "gsap/SplitText";
import { ScrollTrigger } from "gsap/ScrollTrigger";gsap.registerPlugin(useGSAP, SplitText, ScrollTrigger);const TextAnimation = () => {useGSAP(() => {// 为每个时间线元素创建 SplitText 实例const split1 = SplitText.create(".timeline-1", { type: "words" });const split2 = SplitText.create(".timeline-2", { type: "words" });const split3 = SplitText.create(".timeline-3", { type: "words" });// 设置分割后的单词初始状态gsap.set([split1.words, split2.words, split3.words], {opacity: 0,y: 20,});// 设置时间线元素的初始状态gsap.set([".timeline-1", ".timeline-2", ".timeline-3"], {opacity: 0,y: 20,});// 创建动画时间线const tl = gsap.timeline({scrollTrigger: {trigger: ".page2",start: "top 80%", // 当页面顶部到达视窗80%位置时触发end: "bottom 20%", // 当页面底部到达视窗20%位置时结束toggleActions: "play none none none", // 只播放一次markers: true, // 显示触发标记,方便调试},});// play reverse play reverse// 添加动画序列tl.to(".timeline-1", {opacity: 1,y: 0,duration: 0.5,ease: "power2.out",}).to(split1.words,{opacity: 1,y: 0,stagger: 0.1,duration: 0.3,ease: "power2.out",},"-=0.2") // 稍微提前开始单词动画.to(".timeline-2", {opacity: 1,y: 0,duration: 0.5,ease: "power2.out",}).to(split2.words,{opacity: 1,y: 0,stagger: 0.1,duration: 0.3,ease: "power2.out",},"-=0.2").to(".timeline-3", {opacity: 1,y: 0,duration: 0.5,ease: "power2.out",}).to(split3.words,{opacity: 1,y: 0,stagger: 0.1,duration: 0.3,ease: "power2.out",},"-=0.2");});return (<div><div className="page1 h-[2000px]">高度: 2000px</div><div className="page2"><div className="timeline-1">Join our growing community</div><div className="timeline-2">Hello World</div><div className="timeline-3">A New Day</div></div></div>);
};export default TextAnimation;

以上代码动画执行一次之后再次进入视窗并不会再次执行. 如果需要重复执行也很简单

const tl = gsap.timeline({scrollTrigger: {start: "top bottom-=100", // 当页面顶部到达视窗底部-100px位置时触发toggleActions: "play none none reverse", // 反复执行},
});

为了更好的调试,可以开启 markers: true,这样会在浏览器中显示触发标记,更加直观。

const tl = gsap.timeline({scrollTrigger: {markers: true, // 显示触发标记,方便调试},
});

更多使用示例

http://www.dtcms.com/wzjs/35254.html

相关文章:

  • 平价网站建设google中文搜索引擎入口
  • asp大型网站开发网站注册地址查询
  • 手机网站一年费用吗谷歌优化排名公司
  • 海洋优质的网站建设谷歌商店下载
  • 企业网站模板免费下载企业网站模板南京seo优化
  • 福州建设工程协会网站查询2022网站快速收录技术
  • led网站建设长尾关键词挖掘精灵官网
  • 智慧园区 展厅设计高州网站seo
  • 如何做彩票网站的源码个人网站
  • 做音乐的网站徐州百度推广
  • 做网站搜索如何显示官网网站平台做推广
  • 徐州优化网站建设百度问一问人工客服怎么联系
  • 新浪微博网页版百度关键词优化排名
  • 个人网站备案后可以随意建站吗整站优化全网营销
  • 有什么做任务得佣金的网站seo课程哪个好
  • 想开发个网站长沙网站优化培训
  • 手机价格网站建设投放广告
  • 怎么在阿里云建设网站优化设计官方电子版
  • 青州网站设计vue seo优化
  • 琼海网站制作怎么做公司网站
  • 新型h5网站建设最经典的营销案例
  • 网站漂浮代码域名解析ip地址
  • 腾讯官方网站qq注册国产免费crm系统有哪些
  • 做爰xo的视频网站试看制作网站的网址
  • 吉林省建设工程造价网站读书网站排名
  • 萍乡做网站哪家好百度网盘网页版官网
  • 手机网站模板在线建站广告投放是做什么的
  • 惠州住房和城乡建设厅网站如何做推广
  • wordpress粘贴文章东莞seoseo关键词排名优化
  • 哈铁工程建设公司网站清远新闻最新