React sticky canvas trying to hide it

Viewed 181

I'm trying to create an scrolling animation with a canvas. The problem I'm running in to is I want to change the "position" from sticky to something else so that it stays in the div. Because right now that isn't the case as you can see down here. Image website

If anyone has an idea please let me know

import React, { useRef, useEffect} from 'react';
import './index.css';

export default function animation(){
    const html = document.documentElement;
    const currentFrame = index => (
        `https://www.apple.com/105/media/us/airpods-pro/2019/1299e2f5_9206_4470_b28e_08307a42f19b/anim/sequence/large/01-hero-     lightpass/${index.toString().padStart(4, '0')}.jpg`
    )
    const frameCount = 145;
    const canvasHeight = 770;
    const canvasWidth = 1158;
    const img  = new Image();
    img.src = currentFrame(1);
    const Canvas = props => {
        const canvasRef = useRef(null)
            useEffect(() => {
                const canvas = canvasRef.current
                const context = canvas.getContext('2d')
                img.onload = function(){
                    context.drawImage(img,0,0)
                }
                const updateImage = index =>{
                    img.src = currentFrame(index)
                    context.drawImage(img,0,0)  
                } 
                window.addEventListener('scroll', ()=>{
                    const scrollTop = html.scrollTop;
                    const maxScrollTop = html.scrollHeight - window.innerHeight;
                    const scrollFraction = scrollTop/maxScrollTop;
                    const frameIndex = Math.min(frameCount-1, Math.floor(scrollFraction * frameCount))
                    requestAnimationFrame(()=> updateImage(frameIndex + 1))
                })
    }, [])
        return <canvas ref={canvasRef} {...props}/>
    }

    return(
        <Canvas className="animation" width={canvasWidth} height={canvasHeight}></Canvas>
    )
}
html{
  height: 100vh;
}
body{
  height: 400vh;
}
canvas{
  position: -webkit-sticky;
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  max-height: 770px;
  max-width: 1158px;
  background: rgb(0, 0, 0);
  overflow-x: hidden;
}

1 Answers

Set div element position relative.

position: relative;
Related