• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

이미지 블렌드 캔버스에 mp4를 적용하려하는데요!

21.04.17 17:50 작성 조회수 95

0

자꾸 반복된 질문 드려 죄송합니다.

애플 맥북 사이트를 보니 gif가 아니라 캔버스에 mp4를 반복재생하는 방법을 사용하고 있더라고요. 그래서 강사님

https://www.youtube.com/watch?v=p8TsTUJj-kY&t=389s&ab_channel=1%EB%B6%84%EC%BD%94%EB%94%A9

이 사이트에 나와있는 방법 참고해서 이미지블렌드캔버스 부분에 코드 적용해보았는데 첫번째 캔버스가 sticky로 바뀐이후에도 아무런 반응이 없더라고요 ㅠㅠ. 이부분 어떻게 해결해야하는지 궁금합니다.

코드 첨부합니다.

c참고로 콘솔창에서 에러가 생기진 않습니다!

아무래도 addEventListener부분이 문제인 것 같아요..

 if (scrollRatio < values.rect1_x[2].end) {
          step = 1;
          console.log("step1");
          obj.canvas.classList.remove("sticky-canvas");
        } else {
          step = 2;
          console.log("step2");
          //이미지 블렌드
          //imageBlendY :[0, 0, { start: 0, end: 0 }];

          const owlVideo = document.querySelector(".owl-video");
          owlVideo.addEventListener("canplaythrough", render);

          function render() {
            obj.context.drawImage(owlVideo, 0, 0);
            requestAnimationFrame(render);
          }

          obj.canvas.classList.add("sticky-canvas");
          obj.canvas.style.top = `${
            -(obj.canvas.height - obj.canvas.height * canvasScaleRatio) / 2
          }px`;
        }

        break;
    }

답변 1

답변을 작성해보세요.

0

답변이 조금 늦었습니다!
canplaythrough 이벤트 바인딩은 미리 초기화 때 해주시고,
특정 스크롤 지점이 되면 drawImage 처리를 해줘보시겠어요?
스크롤 시점이 되었을 때 바인딩을 하기 시작해서 제대로 동작을 안할 가능성도 있어보여서요~

비디오가 인터랙션이 있는 것이 아니라 그냥 자동으로 플레이되는거라면,
굳이 캔버스로 하지 말고 그냥
<video autoplay="autoplay" muted="muted">로 플레이 시키고 그 위에 CSS로 디자인이 적용된 <div>등의 요소를 이용해서 커버를 적용하는 것도 방법이 될 수 있을 것 같습니다.

감사합니다!