슬릭슬라이드에 비디오파일을 넣으려고 합니다 도움부탁드립니다..
본문
슬릭슬라이드에 비디오파일을 넣을건데요.
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로 처리해야 할 것도 같습니다.