首页 > 其他分享 >Three.js 进阶之旅:页面平滑滚动-王国之泪

Three.js 进阶之旅:页面平滑滚动-王国之泪

时间:2023-05-06 09:03:20浏览次数:39  
标签:useFrame 滚动 进阶 之泪 number Three const 页面

声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。

摘要

浏览网页时,常被一些基于鼠标滚轮控制的页面动画所惊艳到,比如greensock 官网这些 showcase 案例页面就非常优秀,它们大多数都是使用 Tween.jsgaspgreensock 提供的一些动画扩展库实现的。使用 Three.js 也能很容易实现丝滑的滚动效果,本文使用 React + Three.js + React Three Fiber 技术栈,实现一个《塞尔达传说:王国之泪》主题风格基于滚动控制的平滑滚动图片展示页面。通过本文的阅读,你将学习到的知识点包括:了解 R3FuseFrame hookuseThree hook 基本原理及用法;了解 @react-three/drei 库的基本组成,学习使用它提供的 PreloaduseIntersectScrollControlsScroll、及 Image 等组件和方法;用 CSS 生成简单的循环悬浮动画等。

效果

本文案例的实现效果如下图所示,当页面每个模块滚动进入视区时,每个模块会具有平滑向上移动的视差效果,并且伴随着由大到小的缩放动画,当鼠标悬浮到当前模块时,模块会产生高亮 效果。除此之外,页面还有一些其他的装饰,比如塞尔达风格的页面背景和边框、具有缓动动画效果的希卡之石以及同样具有平滑滚动效果的文字装饰王国之泪四个字。

页面的整体布局是这样的,总共有 7 页,即高度为 700vh,每一页都具有不同的布局风格样式,滚动时都会具有缓动效果。

打开以下链接,在线预览效果,本文中的 gif 造成丢帧和画质损失,大屏访问效果更佳。

相关文章

  • Vue进阶(七十八):Vue 定时器与 JS 定时器
    (文章目录)<hrstyle="border:solid;width:100px;height:1px;"color=#000000size=1">一、Vue定时器在vue中,有两种定时器,一是浏览器API,window对象上的;另一种就是vue/nodejs封装的,需要引入。import{setInterval,clearInterval}from'timers'建议使用window对象自带......
  • C语言--指针的进阶3
    指向函数指针数组的指针intAdd(intx,inty){ returnx+y;}intmain(){ //pf函数指针 int(*pf)(int,int)=Add; //pfArr函数数组指针 int(*pfArr[4])(int,int)={Add}; //ppfArr是一个指向[函数指针数组]的指针 int(*(*ppfArr)[4])(int,int)=&pfArr;......
  • 3个月,从功能测试进阶到自动化测试涨薪10k,我悟了....
    ​因为我最近在分享自动化测试技术,经常被问到:功能测试想转自动化,请问应该怎么入手?有没有好的资源推荐?那么,接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。(学习路线和网盘资源放在文末了)3个月是怎么从功能测试进阶到自动化测试并且涨薪呢?今天我们就来聊一聊一......
  • threejs相机动画
    threejs相机动画import*asdatfrom"dat.gui";import{GUI}from"../../utils/lil-gui.module.min.js";importTWEENfrom"@tweenjs/tween.js";constgui=newGUI();gui.domElement.style.right="0px";......
  • C语言--指针的进阶2
    函数指针存放函数地址的指针。intAdd(intx,inty){ returnx+y;}intmain(){ inta=10; intb=20; //printf("%d\n",Add(a,b));//&函数名,函数名,都是函数的地址。 //int(*pa)(int,int)=&Add; int(*pa)(int,int)=Add;//对于函数指针的解引用下面都......
  • Django之模型层(二) Q查询进阶 ORM查询优化 ORM事务 ORM常用字段类型和字段参数 多对
    目录一、Q查询进阶操作这里主要就是让查询数据的时候,可以使用input获取的信息,进行用户交互。fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('pk',1))#2.添加查询条件......
  • # vue 使用 threejs 实现实景看房效果 demo
    vue使用threejs实现实景看房效果demo关于这个threejs实现VR看房效果也超级简单,只需要提供一个思路的话就可以了其实,首先需要一个房间结构的贴图,这个贴图网上有,当然找个合适的也不好找,我找了一上午在别人的demo里面扣了一张出来,代码都是一样的,稍微说一下思路。一张全景......
  • C语言--指针的进阶1
    数组指针:int*p[10];指向数组的指针。指针数组:int(*p)[10];存放指针的数组。voidprint1(intarr[3][5],intx,inty){ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]); } printf("\n"); }}v......
  • three.js 入门学习(一)
    webGl和three.jshttp://webgl3d.cn/pages/aac9ab/图形学算法Web3DWebGPU下载yarnaddthree@types/three使用import*asTHREEfrom'three';onstscene=newTHREE.Scene();仅导入你所需要的部分import{Scene}from'three';一个初始化的demo场景、相机......
  • 2.八数码II(搜索进阶 IDA*估价函数 + 迭代加深)
    八数码II↑题目链接题目在一个\(3×3\)的网格中,\(1∼8\)这8个数字和一个X恰好不重不漏地分布在这\(3×3\)的网格中。例如:123X46758在游戏过程中,可以把X与其上、下、左、右四个方向之一的数字交换(如果存在)。把X与上下左右方向数字交换的行动记录为u......