在移动端网页开发中,左右滑动导航菜单是一种常见的交互方式,允许用户通过手指在屏幕上左右滑动来切换不同的导航选项或页面内容。这种交互方式提高了用户体验,使得操作更加直观和便捷。
以下是一个简单的基于JavaScript和CSS的左右滑动导航菜单示例:
<div class="slider-container">
<div class="slider">
<div class="slide">Slide 1</div>
<div class="slide">Slide 2</div>
<div class="slide">Slide 3</div>
</div>
</div>
.slider-container {
width: 100%;
overflow: hidden;
position: relative;
}
.slider {
display: flex;
transition: transform 0.3s ease-in-out;
}
.slide {
min-width: 100%;
box-sizing: border-box;
padding: 20px;
text-align: center;
}
document.addEventListener('DOMContentLoaded', function() {
const slider = document.querySelector('.slider');
let startX = 0;
let currentTranslate = 0;
let prevTranslate = 0;
let animationID = 0;
let currentIndex = 0;
slider.addEventListener('touchstart', touchStart);
slider.addEventListener('touchmove', touchMove);
slider.addEventListener('touchend', touchEnd);
function touchStart(event) {
startX = event.touches[0].clientX;
cancelAnimationFrame(animationID);
}
function touchMove(event) {
const currentX = event.touches[0].clientX;
currentTranslate = prevTranslate + currentX - startX;
}
function touchEnd() {
const movedBy = currentTranslate - prevTranslate;
if (movedBy < -100 && currentIndex < 2) currentIndex += 1;
if (movedBy > 100 && currentIndex > 0) currentIndex -= 1;
setSliderPosition();
}
function setSliderPosition() {
currentTranslate = currentIndex * -window.innerWidth;
prevTranslate = currentTranslate;
slider.style.transform = `translateX(${currentTranslate}px)`;
}
});
transform
属性代替left
或margin
,因为transform
不会触发重绘和回流。touchmove
事件中正确获取和更新滑动距离,并在touchend
中进行适当的边界检查和位置调整。touchstart
事件中检查触摸点的数量,并在多指触摸时忽略滑动操作。通过以上方法,可以有效实现一个稳定且流畅的左右滑动导航菜单。
领取专属 10元无门槛券
手把手带您无忧上云