当前位置:首页 > 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)`;
    }
});

垂直滑动实现

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

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

js 实现滑动

标签: js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

原生js实现轮播图

原生js实现轮播图

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

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm…