에피소드
모바일 웹 프로젝트 중 상품 목록을 보여주는 리스트가 있다. 처음 기획에는 상품 이미지만 보여주거나 동영상의 프리뷰 이미지만 보여줬는데 추가사항으로 비디오를 넣어주고 해당 비디오가 화면에 보일 시 자동으로 실행이 되야하는게 요청이 있었다.
문제
스크롤이 특정 영상에 도달하면 자동재생 / 벗어나면 자동정지
해결
스크롤 위치 값을 계산하여 모든 특정 영상($videos)을 기준으로 현재 스크롤 위치에 따라 클래스 또는 이벤트를 실행 / 제거
참고사항
비디오/오디오는 브라우저에서 자동실행(이벤트실행)을 하기 위해서는 음소거(muted) 상태여야한다.
아래 참고자료와 구글 개발자포럼을 봐도 장황하게 설명 되어 있다. 하지만 브라우저 정책이기 때문에 그냥 video 태그에 muted를 추가하면 해결된다.
//스크롤 중 대상($videos)이 화면 중간에 위치하면 클래스 추가 또는 이벤트(재생/일시정지) 실행
$(window).on('scroll',scrollFn);
// Scroll Event
$.fn.scrollGet = function(){
var offset = $(window).scrollTop() + $(window).height() / 2,
$videos = $('.video_obj');
if ($videos.length == 0) {
$(window).off('scroll', $.fn.scrollAni);
}
$videos.each(function(i) {
var $video = $(this),
video = $video.find('video'),
item_top = $video.offset().top,
item_h = $video.height();
// console.log($video.offset().top)
if (($video.offset().top) < offset && (item_top + item_h) > offset) {
if(!$video.hasClass('video_on')){
video.get(0).play();
$video.addClass('video_on');
}
} else {
if($video.hasClass('video_on')){
video.get(0).pause();
$video.removeClass('video_on');
}
}
});
};
// Scroll Event Function
function scrollFn(){
$.fn.scrollGet();
}
'IT' 카테고리의 다른 글
와이어프레임은 꼼꼼하게 만들 필요성이 있다. (0) | 2020.12.28 |
---|---|
웹팩(webpack) VusJS 빌드 시 scss 오류! (0) | 2020.12.09 |
[jquery] iframe 객체 접근 후 값 가져오기 (0) | 2019.09.23 |
SNS(소셜미디어) 올릴 때 마다 사이즈 찾아보나?! (0) | 2019.01.31 |
[유튜브 오류] 500 Internal Server Error. (0) | 2018.10.17 |