【发布时间】:2021-02-26 05:13:36
【问题描述】:
我使用 纯 JavaScript 构建了一个滑块。在移动屏幕上,当我触摸滑块时,我只能更改幻灯片,但无法向下滚动页面。
当滑块元素被触摸时,会触发一个 "touchstart" 事件,并触发相应的事件处理函数 event.preventDefault() 停止滚动页面,然后当 "touchmove" em> 事件触发,代码使用第一个和新的水平坐标之间的差异和 CSS left 属性来移动滑块。
我在下面做了一个最小的代码。也可以点击see code on online editor。
const slides = document.querySelector(".slides");
let posX1, posX2, dX;
slides.addEventListener("touchstart", dragStart);
slides.addEventListener("touchmove", dragAction);
function dragStart(e) {
e.preventDefault();
posX1 = e.touches[0].clientX;
}
function dragAction(e) {
posX2 = e.touches[0].clientX;
dX = posX2 - posX1;
posX1 = e.touches[0].clientX;
slides.style.left = (slides.offsetLeft + dX) + "px";
}
body {
padding-bottom: 1000px;
}
.slider {
width: 200px;
height: 100px;
margin: 0 auto;
border: 1px solid black;
position: relative;
overflow: hidden;
}
.slides {
width: 600px;
height: 100px;
display: flex;
position: absolute;
}
.slide {
width: 200px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
}
.slide:nth-child(1) {
background-color: rgb(200, 200, 200);
}
.slide:nth-child(2) {
background-color: rgb(150, 150, 150);
}
.slide:nth-child(3) {
background-color: rgb(100, 100, 100);
}
<!DOCTYPE html>
<html>
<body>
<div class="slider">
<div class="slides">
<div class="slide">Slide 1</div>
<div class="slide">Slide 2</div>
<div class="slide">Slide 3</div>
</div>
</div>
</body>
</html>
感谢您的宝贵时间:)
【问题讨论】:
-
大家好,有人在这里吗?!我仍然需要帮助...
标签: javascript carousel touch-event slide preventdefault