JavaScript 触屏左右滑动导航主要涉及到触摸事件(touch events)的处理。触摸事件包括 touchstart
、touchmove
和 touchend
等,这些事件允许开发者响应用户在触摸屏设备上的操作。
以下是一个简单的水平滑动导航的实现示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Swipe Navigation</title>
<style>
.nav-container {
display: flex;
overflow-x: hidden;
width: 100%;
height: 100px;
border: 1px solid #ccc;
}
.nav-item {
min-width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: #f0f0f0;
border-right: 1px solid #ccc;
}
</style>
</head>
<body>
<div class="nav-container" id="navContainer">
<div class="nav-item">Item 1</div>
<div class="nav-item">Item 2</div>
<div class="nav-item">Item 3</div>
<div class="nav-item">Item 4</div>
</div>
<script>
const navContainer = document.getElementById('navContainer');
let startX, currentTranslate, prevTranslate = 0, animationID = 0, currentIndex = 0;
navContainer.addEventListener('touchstart', touchStart);
navContainer.addEventListener('touchmove', touchMove);
navContainer.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;
setTransform(currentTranslate);
}
function touchEnd() {
const movedBy = currentTranslate - prevTranslate;
if (movedBy < -100 && currentIndex < 3) currentIndex += 1;
if (movedBy > 100 && currentIndex > 0) currentIndex -= 1;
prevTranslate = -currentIndex * window.innerWidth;
setTransform(prevTranslate);
animationID = requestAnimationFrame(smoothTransition);
}
function setTransform(translate) {
navContainer.style.transform = `translateX(${translate}px)`;
}
function smoothTransition() {
setTransform(prevTranslate);
if ((prevTranslate > currentTranslate && prevTranslate - currentTranslate > 1) || (prevTranslate < currentTranslate && currentTranslate - prevTranslate > 1)) {
cancelAnimationFrame(animationID);
} else {
requestAnimationFrame(smoothTransition);
}
}
</script>
</body>
</html>
问题:滑动不够流畅或有卡顿现象。
原因:可能是由于页面渲染性能不佳或 JavaScript 执行效率低。
解决方法:
requestAnimationFrame
来优化动画效果。通过上述方法,可以有效提升触屏滑动导航的用户体验和应用性能。
领取专属 10元无门槛券
手把手带您无忧上云