当前位置:首页 > VUE

vue实现手机左右滑

2026-01-21 12:17:38VUE

实现手机左右滑动的 Vue 方案

使用 vue-touch

安装 vue-touch 库,该库基于 Hammer.js 提供了手势支持:

npm install vue-touch@next hammerjs

在 Vue 项目中注册插件并配置滑动事件:

vue实现手机左右滑

import Vue from 'vue';
import VueTouch from 'vue-touch';
import Hammer from 'hammerjs';

Vue.use(VueTouch, { name: 'v-touch', hammer: Hammer });

// 组件中使用
<template>
  <v-touch @swipeleft="onSwipeLeft" @swiperight="onSwipeRight">
    <div>滑动区域内容</div>
  </v-touch>
</template>

<script>
export default {
  methods: {
    onSwipeLeft() {
      console.log('向左滑动');
    },
    onSwipeRight() {
      console.log('向右滑动');
    }
  }
};
</script>

原生 Touch 事件实现

通过监听 touchstarttouchmovetouchend 事件计算滑动方向:

vue实现手机左右滑

<template>
  <div 
    @touchstart="handleTouchStart"
    @touchmove="handleTouchMove"
    @touchend="handleTouchEnd"
  >
    滑动内容
  </div>
</template>

<script>
export default {
  data() {
    return {
      startX: 0,
      endX: 0
    };
  },
  methods: {
    handleTouchStart(e) {
      this.startX = e.touches[0].clientX;
    },
    handleTouchMove(e) {
      this.endX = e.touches[0].clientX;
    },
    handleTouchEnd() {
      if (this.startX - this.endX > 50) {
        console.log('向左滑动');
      } else if (this.endX - this.startX > 50) {
        console.log('向右滑动');
      }
    }
  }
};
</script>

结合 CSS 过渡效果

为滑动添加动画效果,提升用户体验:

.slide-container {
  transition: transform 0.3s ease;
}
.slide-left {
  transform: translateX(-100%);
}
.slide-right {
  transform: translateX(100%);
}

在 Vue 中动态切换类名:

<template>
  <div 
    :class="['slide-container', directionClass]"
    @touchstart="handleTouchStart"
    @touchmove="handleTouchMove"
    @touchend="handleTouchEnd"
  >
    内容
  </div>
</template>

<script>
export default {
  data() {
    return {
      directionClass: '',
      startX: 0
    };
  },
  methods: {
    handleTouchEnd() {
      if (this.startX - this.endX > 50) {
        this.directionClass = 'slide-left';
      } else if (this.endX - this.startX > 50) {
        this.directionClass = 'slide-right';
      }
      setTimeout(() => this.directionClass = '', 300);
    }
  }
};
</script>

注意事项

  • 移动端开发需添加视口 meta 标签确保正确缩放:
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  • 滑动阈值(如 50px)可根据实际需求调整
  • touchmove 事件中调用 e.preventDefault() 可防止页面滚动与滑动冲突
  • 对于复杂场景(如轮播图),推荐使用现成库如 swiper.js

标签: 手机vue
分享给朋友:

相关文章

vue 路由 实现

vue 路由 实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的详细步骤: 安装 Vue Router 通过 npm 或 ya…

vue实现bootstrap

vue实现bootstrap

Vue 中集成 Bootstrap 的方法 在 Vue 项目中集成 Bootstrap 可以通过以下方式实现,涵盖样式、组件和交互功能。 安装 Bootstrap 依赖 通过 npm 或 yarn…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

实现vue cli

实现vue cli

安装 Vue CLI 确保系统中已安装 Node.js(版本建议 12.x 或更高)。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 安装完成后验证版本:…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…