UNPKG

macaw-threejs

Version:

Macaw Three.js is ready to use library to connect Three.js with your project.<br/> Under the hood is a fully optimized, clean Three.js set up to make it easy to implement effects for images (future text, etc.). With effects out of the box, you don't even

2 lines (1 loc) 1.3 kB
import{SCENE_TYPE as e}from"../../constants.js";import{lerp as r}from"../../utils/lerp.js";class s{constructor(e){const{core:r}=e;this._core=r,this.currentScroll=window.scrollY||document.documentElement.scrollTop,this.scrollTimes=0,this.scrollSpeed={speed:0,target:0,render:0}}scrollSpeedRender(){this.scrollTimes>1&&(this.scrollSpeed.speed=Math.min(Math.abs(this.currentScroll-this.scrollSpeed.render),200)/200,this.scrollSpeed.target+=.2*(this.scrollSpeed.speed-this.scrollSpeed.target),this.scrollSpeed.render=r(this.scrollSpeed.render,this.currentScroll,.1)),this._core.composer.shaderPass.uniforms.scrollSpeed.value=this.scrollSpeed.target,this._core.controllers.render.isManualShouldRender=this._core.controllers.render.countClickRender>0||this.scrollSpeed.speed>.01}scroll(){this.currentScroll=window.scrollY||document.documentElement.scrollTop,this.scrollTimes+=1,this._core.scene.settings.type===e.fixed&&this._core.scene.camera.position.setY(-this.currentScroll),this._core.storage.effects.forEach((e=>{e.scroll&&e.scroll()})),this.scrollTimes<=2?this._core.resize.resize():this._core.controllers.render.manualRender()}setupScroll(){window.addEventListener("scroll",this.scroll.bind(this))}cleanUp(){window.removeEventListener("scroll",this.scroll.bind(this))}}export{s as MacawScroll};