jquery scroll 질문 드립니다.
본문
안녕하세요
아래 video 문이 반복적으로 10개 생성되어 있습니다.
<div class="relative w-full h-full overflow-hidden flex flex-col gap-y-14">
<video>dfsdfds</vide>
</div>
스크롤이 되면서 2번째 video에 스크롤이 오면 자동으로 video가 실행되게
하고 싶은데 실행이 안되네요.
1. 스크롤을 했을때 $('.relative.w-full.h-full.overflow-hidden.flex.flex-col.gap-y-14') 몇번째 index에 위치해 있는가?
2. index를 가져와서 $(this).find("video").eq(idx).get(0).play(); 실행해도 실행이 안되네요
eq(idx). 이부분을 빼야 실행되서 모든 동영상이 실행이 됩니다.
감사합니다.
$(document).on('scroll','',function(e){
idx = $('.relative.w-full.h-full.overflow-hidden.flex.flex-col.gap-y-14').index();
$(this).find("video").eq(idx).prop('muted', true); // 음소거
$(this).find("video").eq(idx).get(0).pause(); // 일시 정지
$(this).find("video").eq(idx).get(0).currentTime = 0;
$(this).find("video").eq(idx).get(0).play();
});
답변 2
$(document).on('scroll', function () {
var scrollTop = $(this).scrollTop();
var windowHeight = $(window).height();
$('.relative.w-full.h-full.overflow-hidden.flex.flex-col.gap-y-14 video').each(function (idx, video) {
var videoTop = $(video).offset().top;
var videoHeight = $(video).outerHeight();
if (scrollTop + windowHeight / 2 > videoTop && scrollTop + windowHeight / 2 < videoTop + videoHeight) {
video.muted = true;
video.currentTime = 0;
video.play();
} else {
video.pause();
}
});
});
js 코드를 아래로 변경 해보세요
$(document).ready(function() {
// 모든 비디오를 일시 정지 상태로 초기화
$('.relative.w-full.h-full.overflow-hidden.flex.flex-col.gap-y-14 video').each(function() {
this.pause();
this.currentTime = 0;
});
$(window).on('scroll', function() {
const container = $('.relative.w-full.h-full.overflow-hidden.flex.flex-col.gap-y-14');
const videos = container.find('video');
videos.each(function(index) {
const video = $(this)[0];
const rect = video.getBoundingClientRect();
const windowHeight = $(window).height();
// 비디오가 화면의 중앙 부근에 있는지 확인
const isInView = (
rect.top <= windowHeight/2 &&
rect.bottom >= windowHeight/2
);
if (isInView) {
video.muted = true;
video.play();
} else {
video.pause();
video.currentTime = 0;
}
});
});
});
!-->