当前位置:首页 > JavaScript

js 实现滑动

2026-02-01 23:28:32JavaScript

使用 JavaScript 实现滑动效果

监听触摸事件实现滑动

通过监听 touchstarttouchmovetouchend 事件来实现滑动效果:

let startX, startY, moveX, moveY;

element.addEventListener('touchstart', (e) => {
    startX = e.touches[0].clientX;
    startY = e.touches[0].clientY;
});

element.addEventListener('touchmove', (e) => {
    moveX = e.touches[0].clientX - startX;
    moveY = e.touches[0].clientY - startY;
    element.style.transform = `translate(${moveX}px, ${moveY}px)`;
});

element.addEventListener('touchend', () => {
    // 滑动结束后的处理逻辑
});

使用 CSS Transition 平滑滑动

结合 CSS 的 transition 属性实现平滑的滑动动画:

element.style.transition = 'transform 0.3s ease';
element.style.transform = 'translateX(100px)';

通过 requestAnimationFrame 实现高性能滑动

使用 requestAnimationFrame 优化滑动性能:

let startTimestamp;
const duration = 1000; // 滑动持续时间(毫秒)

function slide(timestamp) {
    if (!startTimestamp) startTimestamp = timestamp;
    const progress = Math.min((timestamp - startTimestamp) / duration, 1);
    element.style.transform = `translateX(${progress * 100}px)`;
    if (progress < 1) {
        requestAnimationFrame(slide);
    }
}

requestAnimationFrame(slide);

实现惯性滑动效果

通过计算触摸释放时的速度来实现惯性滑动:

let startTime, endTime, startPos, endPos;

element.addEventListener('touchstart', (e) => {
    startTime = Date.now();
    startPos = e.touches[0].clientX;
});

element.addEventListener('touchend', (e) => {
    endTime = Date.now();
    endPos = e.changedTouches[0].clientX;
    const velocity = (endPos - startPos) / (endTime - startTime);

    // 根据速度计算惯性滑动距离
    const distance = velocity * 100;
    element.style.transition = 'transform 0.5s ease-out';
    element.style.transform = `translateX(${distance}px)`;
});

使用第三方库实现滑动

引入 Hammer.js 等专业手势库简化实现:

const hammer = new Hammer(element);
hammer.on('pan', (e) => {
    element.style.transform = `translateX(${e.deltaX}px)`;
});
hammer.on('panend', (e) => {
    // 滑动结束处理
});

实现限制边界的滑动

添加滑动边界限制防止元素滑出可视区域:

const maxSlide = 200;
let currentPosition = 0;

element.addEventListener('touchmove', (e) => {
    const newPosition = currentPosition + e.touches[0].clientX - startX;
    if (newPosition >= -maxSlide && newPosition <= maxSlide) {
        element.style.transform = `translateX(${newPosition}px)`;
    }
});

垂直滑动实现

修改代码实现垂直方向滑动:

js 实现滑动

element.addEventListener('touchmove', (e) => {
    const moveY = e.touches[0].clientY - startY;
    element.style.transform = `translateY(${moveY}px)`;
});

标签: js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…