WebPublisher

[slick] progressbar animation (hover 시 slick 및 animation stop)

amanda 2022. 2. 11. 10:05

html

<div class="visual">
    <article class="slide-con slide-con01">
        <img src="test01.png" alt="">
        <div class="visual-text">
            <strong class="tit">title</strong>
            <span>subject</span>
        </div>
    </article>
    <article class="slide-con slide-con02">
        <img src="test02.png" alt="">
        <div class="visual-text">
            <strong class="tit">title</strong>
            <span>subject</span>
        </div>
    </article>
    <article class="slide-con slide-con02">
        <img src="test02.png" alt="">
        <div class="visual-text">
            <strong class="tit">title</strong>
            <span>subject</span>
        </div>
    </article>
</div>
<div class="visual-page">
    <strong class="current-page">01</strong>
    <div class="range-wrap">
        <span class="total-range"></span>
        <span class="current-range on"></span>
    </div>
    <strong class="total-page"></strong>
</div>

css

.visual-wrap{position: relative;}
.visual{position: relative;width: 100%;height: 790px;overflow:hidden;}
.slide-con{position:relative;z-index:1;width:100%;height: 790px;background-position: center;background-repeat: no-repeat;background-size: cover;}
.slide-con01{background-image:url(/include/img/main-visual01.png);}
.slide-con02{background-image:url(/include/img/main-visual01.png);}
.visual .slick-dots{width:1200px; margin:0 auto; position:absolute; bottom:175px; left:0; right:0;}
.visual .slick-dots li{display: block;float: left;width: 12px;height: 12px;background:none; border:2px solid #fff; font-size: 0;line-height: 0;}
.visual .slick-dots li:not(:first-child){margin-left: 10px;}
.visual .slick-dots li.slick-active{background: #f4d86c; border:none; width:40px;}
.visual .slick-arrow{display: block;position: absolute;z-index: 1;top: 590px;width: 17px;height: 21px;background-repeat: no-repeat;background-position: center;font-size: 0;line-height: 0;}
.visual .slick-prev{left: calc(((100% - 1300px) / 2) + 340px);background-image: url('/include/img/ic-visual-l.png');}
.visual .slick-next{left: calc(((100% - 1300px) / 2) + 365px);background-image: url('/include/img/ic-visual-r.png');}
.visual .visual-text{max-width: 1300px;margin: 0 auto;padding-top:190px;color: #fff;}
.visual .visual-text .tit{display: block;word-break: keep-all;font-weight:500; font-size:56px;letter-spacing: -0.02em;line-height: 1.25em;}
.visual .visual-text span{display:block;margin-top:10px;color: rgba(255,255,255,.5);font-size:22px;font-weight:300;line-height: 1.4em;font-family: 'Rubik', sans-serif;}
.visual .visual-text .form-control{display: inline-block;width: 530px;height: 55px;margin-top: 40px;padding-left: 20px;padding-right: 45px;background-color: transparent;border-radius: 27.5px;border: 4px solid #fff;font-size: 18px;line-height: 1.2em;color: #fff;vertical-align: baseline;}
.visual .visual-text .form-control:placeholder{font-size: 18px;line-height: 1.2em;color: rgba(255,255,255,.3);font-weight: 300;font-family: 'Rubik', sans-serif;}
.visual .visual-text .form-control + .btn{width: 30px;height: 30px;margin-left: -50px;margin-bottom: 8px;background-image: url('/include/img/ic-sch.png');background-size: cover;background-position: center;background-repeat: no-repeat;outline: none;vertical-align: middle;}

.visual-page{display: flex;justify-content: flex-start;align-items: center;position: absolute;top: 590px;left: calc((100% - 1300px)/2);}
.visual-page strong{display: inline-block;font-family: 'Rubik', sans-serif;font-size: 24px;font-weight: 400;letter-spacing: -0.02em;}
.visual-page .current-page{width: 30px;color: #fddd32;}
.visual-page .total-page{color: rgba(255,255,255,.3);}
.visual-page .range-wrap{display: inline-block;position: relative;margin: 0 8px;}
.visual-page .range-wrap .total-range{display: inline-block;width: 250px;height: 2px;margin-bottom: 5px;background-color: rgba(255,255,255,.2);}
.visual-page .range-wrap .current-range{display: inline-block;position: absolute;top: 5px;left: 0;width: 0;height: 4px;background-color: #fddd32;}
.visual-page .range-wrap .current-range.on{animation-name: progress;animation-duration: 5s; animation-timing-function: linear;animation-iteration-count: 1;animation-fill-mode: forwards;}
.visual:hover + .visual-page .range-wrap .current-range.on{animation-play-state: paused;}
@keyframes progress{
	0% {width: 0%;}
	100% {width: 100%;}
}

@media screen and (max-width:1300px) {
	.visual .visual-text{margin-left: 20px;margin-right: 20px;}
	.visual .visual-text .tit{font-size: 40px;}
	.visual .visual-text span{font-size: 18px;}
	
	.visual .slick-arrow{top: 500px;}
	.visual .slick-prev{left: 360px;}
	.visual .slick-next{left: 385px;}
	.visual-page{left: 20px;top: 500px;}
}

@media screen and (max-width:1024px) {
	.visual .visual-text .tit{font-size: 32px;}
	.visual .visual-text span{font-size: 16px;}
	.visual .visual-text .form-control{width: 400px;height: 50px;margin-top: 30px;border-radius: 25px;font-size: 16px;}
	.visual .visual-text .form-control + .btn{width: 25px;height: 25px;margin-bottom: 5px;}
	
	.visual-page strong{font-size: 20px;}
}

@media screen and (max-width:768px) {
	.visual{height: 100%;}
	.visual .visual-text{padding-top: 120px;position: absolute;top: 0;left: 0;}
	.visual .visual-text .tit{font-size: 28px;}
	.visual .visual-text span{display: none;}
	.visual .visual-text .form-control{width: 360px;height: 45px;margin-top: 25px;border: 3px solid #fff;border-radius: 22.5px;}
	.visual .visual-text .form-control:placeholder{color: #fff !important;}
	.visual .visual-text .form-control + .btn{margin-left: -40px;}
	.visual-con{font-size:14px;line-height:18px;}
	.slide-con{height: 100%;position: relative;background-image: none;}
	.slide-con img{width: 100%;}
	.visual .slick-dots{bottom: 90px;}
	.visual .slick-arrow{top: 360px;width: 13px;}
	.visual .slick-prev{left: 220px;}
	.visual .slick-next{left: 250px;}
	
	.visual-page{top: 365px;}
	.visual-page strong{font-size: 12px;}
	.visual-page .current-page{width: 15px;}
	.visual-page .range-wrap .total-range{width: 125px;}
}

@media screen and (max-width:420px) {
	.visual .visual-text .tit{font-size: 23px;}
	.visual .visual-text .form-control{width: 300px;font-size: 14px;}
	.visual .slick-arrow{top: 335px;}
	.visual-page{top: 340px;}
}

js

$('.visual').not('.slick-initialized').slick({
		arrows: true,
		dots: false,
		autoplay: true,
		autoplaySpeed: 5000,
		speed: 500,
		infinite: true,
		slidesToShow: 1,
		slidesToScroll: 1,
		pauseOnHover:true,
	});
	
	var current = $('.current-page'),
		total = $('.total-page'),
		totalCount = $('.visual article').length,
		slickCloned = $('.visual article.slick-cloned').length;

	total.text('0' + (totalCount - slickCloned));
	
	$('.visual').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide){
		var i = (currentSlide ? currentSlide : 0) + 1;
	
		current.text('0' + i);
		total.text('0' + slick.slideCount);
	});
	
	var time = 0;
	var interval;
	var timeSet; 
	var duration=5;
	
	$('.visual').on('afterChange', function (event, slick, currentSlide) {
		time=0;
		duration=5;
		$('.current-range').addClass('on');
		$('.current-range.on').css({
			'animation-duration': '5s',
		})
		timeSet = setInterval(function(){
			duration--;
		},500)
	});
	$('.visual').on('beforeChange', function (event, slick, currentSlide) {
		$('.current-range').removeClass('on');
		clearInterval(timeSet); 
	});
	
	$('.visual').on('mouseenter',function(){
		interval = setInterval(function(){
			time=time+1;
		},500)
	})
	
	$('.visual').on('mouseleave ',function(){
		clearInterval(interval); 
		//$('.current-range.on').css({
		//	'animation-duration': duration+ time +'s',
		//})
		duration = duration+ time;
		time = 0;
	});

 

* 참고

https://gahyun-web-diary.tistory.com/117

https://codepen.io/gahyun/pen/poEJVrp