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

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

QA

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

답변 2

본문

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

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로 처리해야 할 것도 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 47
© SIRSOFT
현재 페이지 제일 처음으로