当前位置:首页 > 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 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template&g…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…