슬릭슬라이드에 비디오파일을 넣으려고 합니다 도움부탁드립니다..

슬릭슬라이드에 비디오파일을 넣으려고 합니다 도움부탁드립니다..

QA

슬릭슬라이드에 비디오파일을 넣으려고 합니다 도움부탁드립니다..

본문

슬릭슬라이드에 비디오파일을 넣을건데요.

1. 동영상길이가 3초 4초 9초 20초 2초 이런식으로 달라서 자동 슬라이드 기능을 써야하는데 
  autoplaySpeed: 2000,        //슬라이드 자동 넘기기 시간(1000ms = 1초) 곧, 슬라이드 하나당 머무는 시간
을 설정하면. 동영상이 재생중에 넘어가거나 끝나도 안넘가는 현상이 있습니다..

2. 2번째 슬라이드로 넘어가거나 도트를 눌럿을때 처음부터 시작되면 좋은데.. 비디오가 재생되고있어서 중간 부터 보이네요.
이를 해결할 방법이 있을까요...

감사합니다.

이 질문에 댓글 쓰기 :

답변 2

참고하여 구현해보세요

```html
<div class="video-slider">
    <div>
        <video class="slide-video">
            <source src="video1.mp4" type="video/mp4">
        </video>
    </div>
    <div>
        <video class="slide-video">
            <source src="video2.mp4" type="video/mp4">
        </video>
    </div>
    <!-- 추가 슬라이드... -->
</div>

<script>
$(document).ready(function(){
    // 모든 비디오의 duration을 저장할 객체
    var videoDurations = {};
    var currentSlide = 0;
    var slider = $('.video-slider');
    
    // 모든 비디오의 메타데이터가 로드되면 실행
    $('.slide-video').each(function(index) {
        $(this).on('loadedmetadata', function() {
            videoDurations[index] = this.duration * 1000; // milliseconds로 변환
        });
    });

    // 슬릭 슬라이더 초기화
    slider.slick({
        dots: true,
        arrows: true,
        infinite: true,
        autoplay: true,
        autoplaySpeed: 1000, // 기본값, 실제로는 비디오 길이에 따라 동적으로 변경됨
        pauseOnHover: false,
        pauseOnFocus: false
    });

    // 슬라이드 변경 시 이전 비디오 정지 및 새 비디오 재생
    slider.on('beforeChange', function(event, slick, currentSlide, nextSlide) {
        // 현재 비디오 정지
        var currentVideo = $(slick.$slides[currentSlide]).find('video')[0];
        if (currentVideo) {
            currentVideo.pause();
            currentVideo.currentTime = 0; // 비디오 위치 처음으로 리셋
        }
        
        // 다음 비디오 준비
        var nextVideo = $(slick.$slides[nextSlide]).find('video')[0];
        if (nextVideo) {
            nextVideo.currentTime = 0; // 비디오 위치 처음으로 리셋
        }
    });

    // 슬라이드 변경 후 새 비디오 재생
    slider.on('afterChange', function(event, slick, currentSlide) {
        var currentVideo = $(slick.$slides[currentSlide]).find('video')[0];
        if (currentVideo) {
            currentVideo.play();
            
            // 현재 비디오가 끝나면 다음 슬라이드로 이동
            currentVideo.onended = function() {
                slider.slick('slickNext');
            };

            // autoplaySpeed를 현재 비디오 길이로 설정
            slider.slick('setOption', 'autoplaySpeed', videoDurations[currentSlide]);
        }
    });

    // 초기 첫 비디오 재생
    var firstVideo = $('.slide-video').first()[0];
    if (firstVideo) {
        firstVideo.play();
    }

    // 도트 클릭 시 비디오 처음부터 재생
    $('.slick-dots li button').on('click', function() {
        var slideIndex = $(this).parent().index();
        var video = $(slider.$slides[slideIndex]).find('video')[0];
        if (video) {
            video.currentTime = 0;
        }
    });
});
</script>
```

CSS 스타일링
```css
.video-slider {
    width: 100%;
    max-width: 1000px; /* 원하는 최대 너비 */
    margin: 0 auto;
}

.video-slider video {
    width: 100%;
    height: auto;
    display: block;
}

/* 필요한 경우 슬라이더 컨트롤 스타일링 */
.slick-dots {
    bottom: 20px;
}

.slick-dots li button:before {
    font-size: 12px;
    color: white;
}
```

1. 모바일에서 자동재생이 안 될 수 있으므로 비디오 속성에 `playsinline muted`를 추가:
```html
<video class="slide-video" playsinline muted>
```

2. 비디오 프리로딩이 필요한 경우:
```html
<video class="slide-video" preload="auto">
```

3. 성능 최적화가 필요한 경우 lazy loading 적용:
```html
<video class="slide-video" loading="lazy">
```

 

소스가 없으니 뭐라고 할 수 없습니다....
자바스크립트 소스에 동영상을 stop하고 play 하는 명령을 넣으면 될 것 같기는 합니다...
pause 되는것 같은데 해당 부분을 찾아서 수정하면 될 것 같습니다.

이 방법으로 안되면 ajax로 처리해야 할 것도 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 129,101 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT