three.jsgsap滚动交互网页实现 2-创建文字并添加离开动画

news2024/9/22 17:36:35

效果

添加动画
让聚光灯的角度随着下滑增大,展示完整的场景

    const container = document.querySelector("#container");

    gsap.to(light, {
        angle: 0.7,
        scrollTrigger: {
            trigger: container,
            start: 0,
            end: innerHeight,
            scrub: 1
        },
    });

这样下滑一个屏幕高度聚光灯的角度会增加到0.7 ,并且上滑会降到0.3
如图下滑后显示完整场景
在这里插入图片描述


添加文本
文字的创建可参考之前的博客three.js 置换贴图 alpha贴图 的妙用 - 3D文字不引入字体文件
使用其中的CanvasFontMesh类通过canvas创建文字

添加一个title “HELLO😄” 并添加到一个Group中
每个文字x轴累加排列
最后将这个group向左移动到适当的位置

    const title = ["H", "E", "L", "L", "O", "😄"];
    const titleGroup = new THREE.Group();

    title.forEach((t, i) => {
        const font = new CanvasFontMesh(t);
        font.mesh.scale.setScalar(0.3);
        font.mesh.position.x += i * 0.5;
        font.mesh.material.transparent = true;
        titleGroup.add(font.mesh);
    });
    titleGroup.position.x = -1.3;
    helper.add(titleGroup);

在这里插入图片描述
同理加入描述文本

    const desc = ["滚", "动", "浏", "览"];
    const descGroup = new THREE.Group();

    desc.forEach((t, i) => {
        const font = new CanvasFontMesh(t);
        font.mesh.scale.setScalar(0.1);
        font.mesh.material.transparent = true;
        font.mesh.position.x += i * 0.3;
        descGroup.add(font.mesh);
    });
    descGroup.position.x = -0.5;
    descGroup.position.y -= 1;
    descGroup.position.z = 1;
    helper.add(descGroup);

在这里插入图片描述
接下来设置文字和背景线条的动画
在聚光灯显示出来之后 线条向前走
设置线条group的z轴到170 超出屏幕 不可见

gsap.to(group.position, 
	{
      z: 170,
      duration: 1,
      scrollTrigger: {
          trigger: container,
          start: innerHeight,
          end: innerHeight * 2,
          scrub: 1,
      },
    });

在线条的入场动画完成后将其加入,以免两次设置z轴在进入页面时滚动条有高度的情况下z轴位置冲突

helper.loadGltf("/models/line_bg.glb").then((gltf) => {
		//...
        gsap.to(group.position, {
            duration: 1,
            z: 0,
            onComplete: () => {
                gsap.to(group.position, {
                    z: 170,
                    duration: 1,
                    scrollTrigger: {
                        trigger: container,
                        start: innerHeight,
                        end: innerHeight * 2,
                        scrub: 1,
                    },
                });
            },
        });
    });

在这里插入图片描述
文字透明
创建一个函数将内部mesh同意opacity

    function setGroupOpacity(object3D: Object3D, opacity: number) {
        object3D.traverse((obj) => {
            if (obj.type == "Mesh") {
                obj.material.opacity = opacity;
            }
        });
    }

将创建的两组文字opacity设置为0

    setGroupOpacity(titleGroup, 0);
    setGroupOpacity(descGroup, 0);

在聚光灯扩大角度是时候显示文本
使用scrollTrigger的onUpdate回调函数设置值

gsap.to(light, {
        angle: 0.7,
        scrollTrigger: {
            trigger: container,
            start: 0,
            end: innerHeight,
            scrub: 1,
            onUpdate: ({ progress }) => {
                setGroupOpacity(titleGroup, progress);
                setGroupOpacity(descGroup, progress);
            },
        },
    });

在背景线条离场时淡出文本

onComplete: () => {
     gsap.to(group.position, {
         z: 170,
         duration: 1,
         scrollTrigger: {
             trigger: container,
             start: innerHeight,
             end: innerHeight * 2,
             scrub: 1,
             onUpdate: ({ progress }) => {
                 setGroupOpacity(titleGroup, 1 - progress);
                 titleGroup.position.z = progress * -4;
                 setGroupOpacity(descGroup, 1 - progress);
                 descGroup.position.z = progress * -4;
             },
         },
     });
 },

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis——初窥门径

前言 在这篇文章中,荔枝整理了初步了解Redis的一些基础知识和常见指令。通过这篇文章我们可以弄懂Redis具体是什么以及主要的功能、基本数据类型和操作指令。这里注意如果标题后面带*则是仅需要了解就行的知识点哈。 文章目录 前言 一、Redis概述和配置 1.1 概述…

Android Compose UI实战练手----Google Bloom 主页实现(完结)

目录 1.概述2.页面展示2.1 亮色主题2.2 深色主题 3.页面拆分及实现3.1 主页的UI整体UI架构实现3.2 底部导航栏BottomBar的实现3.3 搜索栏SearchBar的实现3.4 Banner实现3.5 中间信息列表BloomInfoList的实现 4.源码地址 1.概述 主页的页面比前面的欢迎页和登录页面要复杂得多&…

Microsoft Visual Studio 2022添加.NET Framework 4.6.2框架,然后说下.NET目标包的作用。

众所周知,Microsoft Visual Studio 2022不再支持.NET Framework 4.6以下的框架。从而导致前期使用老框架开发的某些应用无法打开(打开时提示安装框架,但又安装不成功)的情况出现。 前于如何安装.NET Framework 4.5及更早版本框架的…

Java中的字符串类

提示:字符串类是编程中最常用的一种数据类型,比较重要❗ 文章目录 前言一、字符串类创建对象方式静态创建动态创建 二、String字符串内容不可改变三、字符串常用方法length方法charAt方法substring方法indexOf与lastIndexOfindexOf方法lastIndexOf方法 替…

计算机基础--->数据结构(9)【并查集】

文章目录 并查集的概述并查集的主要用途并查集的实现创建和初始化集合查找当前元素的集合根节点判断两个元素是否处于同一集合合并两个集合对节点的路径进行压缩 并查集的概述 并查集是一种用于解决集合合并和查询问题的数据结构,主要用于实现有关集合的操作&#x…

Skywalking高级使用

Skywalking高级使用 RPC调用监控Mysql调用监控Skywalking常用插件获取追踪ID过滤指定的端点告警功能Skywalking原理Open Tracing介绍 RPC调用监控 Skywalking(6.5.0)支持的RPC框架有以下几种: (1) Dubbo 2.5.4 -> 2.6.0 (2) Dubbox 2.8.4 (3) Apache Dubbo 2.7.…

动态规划 DP (六) 字符串编辑

1.字符串编辑 字符串编辑问题是一类常见的问题,通常涉及对字符串进行插入、删除、替换等操作,以达到某种特定的目标。 常见的字符串编辑问题包括: 编辑距离(Edit Distance):给定两个字符串,通…

最新抖音娱乐测评小程序源码 Thinkphp后端 抖音引流小程序

最新抖音娱乐测评小程序源码 thinkphp后端 抖音引流小程序 附搭建教程 测试环境 NginxPHP7.0MySQL5.6 网站运行目录设置为 /web 数据库配置文件 \source\application\database.php 后台登录地址 http://你的域名/index.php?s/admin/passport/login

python环境

卸载旧环境 wini 打开应用卸载 删除python解释器和pycharm 删除配置文件夹JetBrains C:\Users\CJC\AppData\Roaming\JetBrains 安装 安装python解释器 安装pycharm 查看或设置该项目的解释器和安装包 快捷键 全局搜索 双击shift 当前文件中搜索 ctrl f 查看函数…

MySQL数据库对象与数据备份和还原详解

目录 一、视图 1. 什么是视图 2. 视图与数据表的区别 3. 视图的优点 4. 创建视图 二、索引 1. 什么是索引 2. 为什么要使用索引 3. 索引优缺点 4. 何时不使用索引 5. 索引何时失效 6. 索引分类 6.1 普通索引 6.2 唯一索引 6.3 主键索引 6.4 组合索引 三、数据的…

RabbitMQ系列(25)--RabbitMQ搭建镜像队列

前言:如果RabbitMQ集群中只有一个Broker节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失,虽然可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,这样可以保证消息…

mysql 常用命令综合简单运用

目录 第一大题创建数据库创建用户表及约束字段修改位置修改字段数据类型修改字段名字添加字段修改表名字删除字段修改表的存储引擎 第二大题创建表及外键和其他约束删除外键约束和查找外键名 第三大题创建数据库创建用户同时授权一些功能修改用户的密码更新权限列表查看用户的权…

pytorch线性模型 学习前要学习的基础知识

跟着刘二大人学pytorch,补全一下我的基础缺失 1.numpy基础 import numpy as np from PIL import Image anp.array([1,2,3]) #生成一维数组 print(a) bnp.arange(1,4)#创建等差数组,默认等差是1,数组为1,2,3&#xff0…

spring 详解三 IOC(spring实例化及后处理器)

Spring实例化基本流程 Spring在容器初始化的时候,读取XMl配置,将其封装成BeanDefinition(Bean定义)对象,描述所有bean的信息 BeanDefinition会注册存储到beanDefinitionMap集合中 Spring框架遍历beanDefinitionMap,使用反射创建Be…

pycharm如何给一串中文快捷加引号(方法二)

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 商人重利轻别离,前月浮梁买茶去。 大家好,我是皮皮。 一、前言 前几天在Python白银群【此类生物】问了一个Pycharm基础的问题&a…

SpringBoot配置动态定时任务

1.配置ScheduledTask 主要是实现SchedulingConfigurer,动态传入cron。 package com.hzl.boot.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Propert…

使用promise函数封装post请求,封装aes加解密方法,并进行请求头aes加密,封装sm2国密加解密,进行请求体数据加密,响应数据解密。

export default {async post(url, params { header:{}, data:{} }, showLoading true){if(showLoading){uni.showLoading({title:"加载中",mask:true})}let options{header:{...params.header},url:globalParams.basepathurl.url,data:{...params.data}}//渠道 ae…

Devops系列五(CI篇之pipeline libraray)jenkins将gitlab helm yaml和argocd 串联,自动部署到K8S

一、说在前面的话 本文是CI篇的上文,因为上一篇已经作了总体设计,就不再赘述,有需要的请看前文。 我们将演示,使用CI工具–jenkins,怎么和CD工具–argocd串联,重点是在Jenkins该怎么做。准备工作和argocd等…

C++常用库函数 5.输入和输出函数

函数名&#xff1a;fclose 函数原型&#xff1a;int fclose(FILE *stream)&#xff1b; 参数&#xff1a;streamFILE 结构的指针。 所需头文件&#xff1a;<cstdio> 返回值&#xff1a;如果该流成功关闭&#xff0c;fclose 返回0。如果出错&#xff0c;则返回 EOF。 功…

AI在金融领域的应用

AI金融领域 信贷业务 个人信贷单笔数额小、数量大&#xff0c;需要大量的人力和时间投入&#xff0c;信贷审核的数据也呈现出分散化、碎片化的特点。同时传统金融机构和互联网金融公司的风控环节中&#xff0c;普遍存在信息不对称、成本高、时效性差、效率低等问题&#xff0c…