当前位置:首页 > JavaScript

js实现手机滑动效果

2026-01-30 17:40:53JavaScript

实现基础滑动效果

使用touchstarttouchmovetouchend事件监听触摸操作:

let startX, moveX;
const slider = document.querySelector('.slider');

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

slider.addEventListener('touchmove', (e) => {
    moveX = e.touches[0].clientX - startX;
    // 阻止默认滚动行为
    e.preventDefault();
    // 实时更新元素位置
    slider.style.transform = `translateX(${moveX}px)`;
});

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

添加惯性滑动效果

通过计算滑动速度和方向实现惯性效果:

js实现手机滑动效果

let startTime, velocity;
const threshold = 50; // 滑动判定阈值

slider.addEventListener('touchmove', (e) => {
    const currentTime = Date.now();
    const deltaX = e.touches[0].clientX - startX;
    velocity = deltaX / (currentTime - startTime);
    startTime = currentTime;
});

slider.addEventListener('touchend', () => {
    const distance = velocity * 100; // 根据速度计算惯性距离
    if (Math.abs(distance) > threshold) {
        slider.style.transition = 'transform 0.5s ease-out';
        slider.style.transform = `translateX(${distance}px)`;
    }
});

限制滑动边界

防止元素滑出可视区域:

js实现手机滑动效果

const maxSlide = 200; // 最大滑动距离

slider.addEventListener('touchmove', (e) => {
    const currentX = e.touches[0].clientX - startX;
    if (Math.abs(currentX) > maxSlide) {
        return;
    }
    slider.style.transform = `translateX(${currentX}px)`;
});

使用CSS优化性能

添加硬件加速和过渡效果:

.slider {
    will-change: transform;
    transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
}

完整示例代码

整合所有功能的实现:

class TouchSlider {
    constructor(element) {
        this.el = element;
        this.startX = 0;
        this.currentX = 0;
        this.velocity = 0;
        this.lastTime = 0;
        this.isDragging = false;
        this.setupEvents();
    }

    setupEvents() {
        this.el.addEventListener('touchstart', this.handleStart.bind(this));
        this.el.addEventListener('touchmove', this.handleMove.bind(this));
        this.el.addEventListener('touchend', this.handleEnd.bind(this));
    }

    handleStart(e) {
        this.isDragging = true;
        this.startX = e.touches[0].clientX;
        this.currentX = this.getTranslateX();
        this.lastTime = Date.now();
    }

    handleMove(e) {
        if (!this.isDragging) return;
        e.preventDefault();

        const x = e.touches[0].clientX;
        const deltaX = x - this.startX;
        const now = Date.now();
        const deltaTime = now - this.lastTime;

        this.velocity = deltaX / deltaTime;
        this.lastTime = now;

        this.setTranslateX(this.currentX + deltaX);
    }

    handleEnd() {
        this.isDragging = false;
        const momentum = this.velocity * 100;

        this.el.style.transition = 'transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1)';
        this.setTranslateX(this.getTranslateX() + momentum);

        setTimeout(() => {
            this.el.style.transition = '';
        }, 500);
    }

    getTranslateX() {
        const transform = window.getComputedStyle(this.el).transform;
        if (transform === 'none') return 0;
        return parseInt(transform.split(',')[4].trim());
    }

    setTranslateX(x) {
        this.el.style.transform = `translateX(${x}px)`;
    }
}

// 初始化
new TouchSlider(document.querySelector('.slider'));

注意事项

  • 移动端需要添加viewport元标签确保正确显示
  • 考虑添加passive: true提高滚动性能
  • 对于复杂场景建议使用现成库如Hammer.js或Swiper.js
  • 测试不同设备的触摸事件差异,特别是iOS和Android的细微区别

标签: 效果手机
分享给朋友:

相关文章

h5所能实现的效果

h5所能实现的效果

H5能实现的效果 H5(HTML5)作为最新的HTML标准,具备强大的功能和丰富的API支持,能够实现多种现代Web应用效果。以下是H5的主要能力分类: 多媒体支持 H5原生支持音频和视频播放,无…

vue实现翻页效果

vue实现翻页效果

使用Vue实现翻页效果 在Vue中实现翻页效果通常需要结合分页组件和数据处理逻辑。以下是几种常见方法: 基础分页组件实现 <template> <div> &l…

vue实现框架效果

vue实现框架效果

Vue实现框架效果的方法 使用Vue实现框架效果可以通过多种方式完成,包括使用Vue Router、动态组件或第三方UI库。以下是几种常见的方法: 使用Vue Router实现布局框架 Vue R…

h5实现左右滚动效果

h5实现左右滚动效果

使用CSS实现横向滚动 在HTML5中实现左右滚动效果,可以通过CSS的overflow-x属性配合white-space或flex布局实现。以下是一个基础示例: <div class="s…

h5页面滑动效果实现

h5页面滑动效果实现

实现H5页面滑动效果的方法 H5页面滑动效果可以通过多种方式实现,包括原生JavaScript、CSS动画或第三方库。以下是几种常见的方法: 使用CSS Scroll Snap CSS Scroll…

H5手机端实现长截图

H5手机端实现长截图

实现H5手机端长截图的方法 使用html2canvas库 html2canvas是一个流行的JavaScript库,可以将网页内容渲染为Canvas图像。通过遍历页面所有元素,将其绘制到Canvas上…