Vanilla JS/HTML/CSS를 사용하여 스와이프 가능한 항목 만들기
18860 단어 htmljavascriptcsswebdev
These processes are valid for only mobile. So, touchscreen..
우선 최종본을 보자.
이 항목에서는 JS 쪽만 검사할 것입니다.
이것이 최종
style.css
파일입니다. 먼저 이 파일을 만들 수 있습니다.* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: #ddd;
color: #0d0d0d;
font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.swipable {
width: 50%;
padding: 20px 15px;
border-radius: 10px;
background-color: coral;
color: white;
box-shadow: 5px 0px 10px rgba(0, 0, 0, 0.8);
user-select: none;
margin-top: 20px;
overflow: hidden;
}
.container {
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
transition: height .5s;
overflow: hidden;
padding-bottom: 20px;
}
그리고 그것은 우리의
index.html
파일입니다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Swipable Demo</title>
</head>
<body>
<div class="container">
<div class="swipable">This is a swipable item.</div>
<div class="swipable">This is a swipable item.</div>
<div class="swipable">This is a swipable item.</div>
<div class="swipable">This is a swipable item.</div>
<div class="swipable">This is a swipable item.</div>
<div class="swipable">This is a swipable item.</div>
<div class="swipable">This is a swipable item.</div>
</div>
<script src="app.js"></script>
</body>
</html>
이들은 Vanilla JS 프로세스입니다.
이전에는 js에서
.swipable
클래스를 선택할 수 있습니다.let treshold = window.innerWidth / 4
document.querySelectorAll(".swipable").forEach((swipableItem, index) => {
//TODO :)
});
코드 상단에 스와이프 임계값을 설정하기 위한 임계값 변수를 정의했습니다.
이 예에서 스와이프 가능한 항목은 X축에서만 스와이프할 수 있습니다.
이에 대한 3가지 기본 변수가 있습니다.
document.querySelectorAll(".swipable").forEach((swipableItem, index) => {
let touchstartX = 0
let touchendX = 0
let diff = 0;
});
diff
변수는 드래그 거리의 결과가 됩니다.다른 변수는 기본적으로 터치의 시작점과 끝점입니다.
swipableItem.addEventListener('touchstart', e => {
touchstartX = e.changedTouches[0].screenX
swipableItem.style.transition = "all 0s"
})
터치 이벤트를 처리하기 위해 리스닝
touchstart
이벤트를 받습니다. 이 이벤트에서 touchstartX
변수를 설정하는 첫 번째 터치를 잡을 수 있습니다. 그런 다음 터치를 추적하기 위해 전환 기간을 0초로 설정합니다.이것은 우리의
touchend
이벤트입니다.swipableItem.addEventListener('touchmove', e => {
diff = e.touches[0].screenX - touchstartX;
swipableItem.style.transform = `translateX(${diff}px)`;
})
위에서 우리는
touchmove
이벤트를 수신했습니다. 이 이벤트에서 우리는 터치스타트와 현재 터치 이동 사이의 거리를 측정했습니다. 그리고 이 결과를 diff
변수에 할당했습니다. 따라서 x축만 드래그하여 화면에서 항목의 위치를 조정할 수 있습니다.이것은 벨로우즈의 터치 이벤트의 마지막입니다.
swipableItem.addEventListener('touchend', e => {
touchendX = e.changedTouches[0].screenX
swipableItem.style.transition = "all .5s"
handleGesture(index)
})
위에서 손가락의 마지막 위치를
touchendX
변수에 설정했습니다.충분히 스 와이프하지 않으면 이전 위치로 천천히 이동하도록 애니메이션 지속 시간을 설정하십시오.
handleGesture
함수는 최종 함수입니다. 이 기능은 스 와이프 작업을 결정합니다.그리고 ...
function handleGesture(index) {
let swipePath = "";
if (touchendX < touchstartX) swipePath = "left";
if (touchendX > touchstartX) swipePath = "right";
if ((diff > treshold) || (diff < -treshold)) {
console.log(`Item ${index}: Swiped ${swipePath}`)
swipableItem.style.transition = "all .3s"
if (swipePath == "left") {
swipableItem.style.transform = `translateX(-${window.innerWidth}px)`
} else {
swipableItem.style.transform = `translateX(${window.innerWidth}px)`
}
setInterval(() => {
swipableItem.style.height = "0px";
swipableItem.style.padding = "0px";
swipableItem.style.margin = "0px";
setInterval(() => {
swipableItem.remove();
}, 500);
}, 500)
} else {
swipableItem.style.transform = `translateX(0px)`
}
}
이것은 최종 버전입니다.
그리고 GitHub 레포
zkscan1 / dom-swipeable-item
이것은 내 Dev.to 주제입니다.
Reference
이 문제에 관하여(Vanilla JS/HTML/CSS를 사용하여 스와이프 가능한 항목 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ksckaan1/creating-swipable-item-using-vanilla-jshtmlcss-2mfj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)