当前位置:首页 > JavaScript

js实现手机滑动效果

2026-04-04 09:21:51JavaScript

使用Touch事件实现滑动效果

在移动端实现滑动效果,主要通过监听touchstarttouchmovetouchend事件来实现。以下是一个基础实现示例:

let startX, moveX;
const slider = document.getElementById('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', () => {
  // 滑动结束后的处理逻辑
  slider.style.transform = 'translateX(0)';
  slider.style.transition = 'transform 0.3s ease';
});

添加惯性滑动效果

为了使滑动更自然,可以添加惯性效果:

let startX, moveX, velocity;
const slider = document.getElementById('slider');
let lastMoveTime = 0;

slider.addEventListener('touchmove', (e) => {
  const now = Date.now();
  const deltaTime = now - lastMoveTime;
  const currentX = e.touches[0].clientX;
  velocity = (currentX - startX) / deltaTime;
  startX = currentX;
  lastMoveTime = now;

  moveX = e.touches[0].clientX - startX;
  slider.style.transform = `translateX(${moveX}px)`;
});

slider.addEventListener('touchend', () => {
  const distance = moveX + velocity * 100;
  slider.style.transform = `translateX(${distance}px)`;
  slider.style.transition = 'transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1)';
});

使用CSS Transform优化性能

为了确保滑动流畅,应该使用CSS transform而不是直接修改left/top属性:

.slider {
  transition: transform 0.3s ease;
  will-change: transform;
}

实现滑动边界限制

防止滑动超出容器边界:

const maxLeft = 0;
const maxRight = 300;

slider.addEventListener('touchend', () => {
  let finalPosition = moveX;

  if (finalPosition > maxRight) {
    finalPosition = maxRight;
  } else if (finalPosition < maxLeft) {
    finalPosition = maxLeft;
  }

  slider.style.transform = `translateX(${finalPosition}px)`;
});

使用第三方库简化实现

如果项目允许使用第三方库,可以考虑以下选项:

  1. Hammer.js:专门处理手势事件的库

    const hammer = new Hammer(slider);
    hammer.on('pan', (e) => {
    slider.style.transform = `translateX(${e.deltaX}px)`;
    });
  2. Swiper.js:完整的滑动组件解决方案

    const mySwiper = new Swiper('.swiper-container', {
    // 配置选项
    });

处理多指触摸的情况

如果需要支持多指操作,需要调整事件处理逻辑:

js实现手机滑动效果

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

性能优化建议

  1. 使用requestAnimationFrame进行动画更新
  2. 避免在事件处理函数中进行复杂的DOM操作
  3. 对频繁操作的元素使用will-changeCSS属性
  4. 考虑使用passive事件监听器提高滚动性能
    slider.addEventListener('touchmove', (e) => {
    // 处理逻辑
    }, { passive: true });

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

相关文章

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 动态数据绑定展示 通过 Vue 的响应式特性,实时展示数据变化。例如,表单输入与预览同步: <template> <div> <…

vue实现对话框效果

vue实现对话框效果

Vue 对话框实现方法 使用组件化方式封装对话框 创建一个独立的对话框组件(如Dialog.vue),通过v-model控制显示隐藏: <template> <div clas…

vue效果实现

vue效果实现

Vue 效果实现方法 Vue.js 提供了多种方式实现动态效果,包括过渡动画、状态驱动的 UI 变化以及第三方动画库集成。以下是常见效果的实现方案: 过渡动画 使用 Vue 内置的 <tran…

h5实现手机摇一摇功能

h5实现手机摇一摇功能

实现原理 手机摇一摇功能基于设备加速度传感器(DeviceMotionEvent),通过监听设备的加速度变化来判断用户是否进行了摇晃动作。HTML5提供了相关API获取设备传感器数据。 基本实现步骤…

H5手机端实现长截图

H5手机端实现长截图

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

vue实现轮播效果

vue实现轮播效果

使用Swiper插件实现轮播 安装Swiper及相关依赖: npm install swiper vue-awesome-swiper 组件代码示例: <template> <…