移动端弹性拖拽是一种常见的交互效果,它允许用户通过触摸屏幕来拖动元素,并且在释放时元素会有一个弹性回弹的效果。这种效果可以提升用户体验,使得操作更加自然和流畅。
弹性拖拽主要涉及以下几个概念:
touchstart、touchmove 和 touchend。easeOutQuad、easeOutCubic 等。以下是一个简单的移动端弹性拖拽的JavaScript实现示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>弹性拖拽示例</title>
<style>
#draggable {
width: 100px;
height: 100px;
background-color: #3498db;
position: absolute;
touch-action: none; /* 禁用浏览器默认的触摸行为 */
}
</style>
</head>
<body>
<div id="draggable"></div>
<script>
const draggable = document.getElementById('draggable');
let startX, startY, initialX, initialY;
draggable.addEventListener('touchstart', (e) => {
e.preventDefault();
const touch = e.touches[0];
startX = touch.clientX;
startY = touch.clientY;
initialX = draggable.offsetLeft;
initialY = draggable.offsetTop;
});
draggable.addEventListener('touchmove', (e) => {
e.preventDefault();
const touch = e.touches[0];
const deltaX = touch.clientX - startX;
const deltaY = touch.clientY - startY;
draggable.style.left = `${initialX + deltaX}px`;
draggable.style.top = `${initialY + deltaY}px`;
});
draggable.addEventListener('touchend', (e) => {
e.preventDefault();
const velocityX = (draggable.offsetLeft - initialX) / 100;
const velocityY = (draggable.offsetTop - initialY) / 100;
const friction = 0.9;
let posX = draggable.offsetLeft;
let posY = draggable.offsetTop;
const animate = () => {
posX += velocityX;
posY += velocityY;
velocityX *= friction;
velocityY *= friction;
draggable.style.left = `${posX}px`;
draggable.style.top = `${posY}px`;
if (Math.abs(velocityX) > 0.1 || Math.abs(velocityY) > 0.1) {
requestAnimationFrame(animate);
}
};
animate();
});
</script>
</body>
</html>touch-action: none; 以禁用浏览器默认的触摸行为。requestAnimationFrame 来优化动画性能,避免掉帧。通过上述方法,可以实现一个基本的移动端弹性拖拽效果,并且可以根据具体需求进行进一步的优化和扩展。
没有搜到相关的沙龙