[JavaScript]터치 이벤트(Hammer.js)
html
<div style="overflow: hidden; position:relative">
<div class="slide-container">
<div class="slide-box">
<img src="img/shirts1.jpeg" alt="">
</div>
<div class="slide-box">
<img src="img/shirts2.jpeg" alt="">
</div>
<div class="slide-box">
<img src="img/shirts3.jpeg" alt="">
</div>
</div>
<button class="slide-before">before</button>
<button class="slide-next">Next</button>
</div>
css
.slide-container{
width: 300vw;
/* transition: transform 1s; */
}
.slide-box{
width: 100vw;
/* viewport width = 화면 폭의 몇 퍼센트 차지할지 */
float: left;
}
.slide-box img{
width: 100%;
}
.slide-next{
position: absolute;
top:45%;
right: 0;
}
.slide-before{
position: absolute;
top:45%;
left:0;
}
/* 화면에서 터치를 종료했을 때만 이미지가 스무스하게 움직이게 만든다. */
.transforming{
transition: all 0.5s;
}
js
var img1 = $('.slide-box img')[0];
var showNow = 1;
var manager = new Hammer.Manager(img1); //manager라는 함수에 hammer를 조작할 수있는 명령어를 넣어준다.
manager.add(new Hammer.Pan({ threshold: 0 })) //manager라는 함수에 pan(슬라이드) 이벤트를 사용할 때 threshold 값(이벤트가 발동되기까지의 한계점)을 넣어준다.
manager.on('pan', function (e) { //pan rotate pinch
// console.log('방금 이미지1을 pen했어요')
console.log(e.deltaX);//x축으로 슬라이드한 거리
// 만약에 사용자가 왼쪽으로 그림을 슬라이드 했을 때 실행될 코드
if (e.deltaX <-1) {
$('.slide-container').css({
transform: 'translateX(' + e.deltaX + 'px)'
});
// 만약에 사용자가 마우스를 놓으면 두번째 사진으로 속 변해야 함
if (e.isFinal && showNow == 1) { // isFinal : 터치 이벤트를 끝내면(마우스를 놓으면)...
$('.slide-container').addClass('transforming');//슬라이드 하는 동안에도 transform이 적용되기 때문에 클래스를 하나 만들어서 마우스를 놓았을 때 클래스추가 한다.
$('.slide-container').css({
transform: 'translateX(-100vw)'
});
setTimeout(function () {
$('.slide-container').removeClass('transforming');
}, 500);//0.5초 후에 removeClass 작동
}
}
});
터치기능이 이미 있는 carousel 라이브러리를 사용하면 이렇게 노가다로 구현할 필요가 없다. 그냥 라이브러리를 사용하자.