【发布时间】:2022-09-24 06:08:19
【问题描述】:
我有在每个页面滚动时播放的动画。我想要实现的是在触发固定元素的id section 时播放整个动画。所以当它进入固定的元素时,它应该播放整个动画,而不是每个页面滚动。
这里有一个很好的参考,可以更好地理解输出是什么
https://squareup.com/us/en/why-square 下
Look and feel like a pro.这可以使用滚动触发器和 gsap 吗?我对这个 jquery 插件非常陌生,并且仍在发现它的功能和控件。
const canvas = document.getElementById(\"hero-lightpass\"); const context = canvas.getContext(\"2d\"); const frameCount = 108; const currentFrame = index => ( `https://dev.jin.services/fazz/wp-content/themes/hello-elementor/assets/images/imagesequence/home-banner-${(index + 1).toString().padStart(3, \'0\')}.jpg` ); const images = [] const banner = { frame: 0 }; for (let i = 0; i < frameCount; i++) { const img = new Image(); img.src = currentFrame(i); images.push(img); } gsap.registerPlugin(ScrollTrigger); gsap.to(banner, { frame: frameCount - 1, snap: \"frame\", ease: \"none\", scrollTrigger: { scrub: true, pin: \"#pin-banner\", trigger: \"#hero-lightpass\", duration: \'100%\', }, onUpdate: render // use animation onUpdate instead of scrollTrigger\'s onUpdate }); images[0].onload = render; function render() { context.clearRect(0, 0, canvas.width, canvas.height); context.drawImage(images[banner.frame], 0, 0); }html { height: 100vh; } body { height: 5000px; background: #000; } #pin-banner {max-width:1220px;margin:0 auto;padding:0;width:100%;} #hero-lightpass {width:100%;} .pin-spacer {padding:0 !important;}<body> <div style=\"height:600px;\"></div> <div id=\"pin\"> <div id=\"pin-banner\"> <canvas id=\"hero-lightpass\" width=\"1920\" height=\"1080\"></canvas> </div> </div> <div style=\"height:600px;\"> <h1 style=\"font-size: 42px;color:#fff;\">TEST</h1></div> </body> <script src=\"https://code.jquery.com/jquery-3.6.0.min.js\" integrity=\"sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=\" crossorigin=\"anonymous\"></script> <script src=\"https://cdnjs.cloudflare.com/ajax/libs/gsap/3.5.0/gsap.min.js\"></script> <script src=\"https://cdnjs.cloudflare.com/ajax/libs/gsap/3.5.0/ScrollTrigger.js\"></script>
标签: jquery gsap scrollmagic scrolltrigger