当前位置:首页 > VUE

vue实现手机左右滑

2026-01-21 12:17:38VUE

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

使用 vue-touch

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

npm install vue-touch@next hammerjs

在 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 事件计算滑动方向:

<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 中动态切换类名:

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实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现盖章

vue实现盖章

Vue 实现盖章功能 在Vue中实现盖章功能通常涉及前端UI交互,通过Canvas或SVG绘制印章,并允许用户拖拽或点击放置印章。以下是具体实现方法: 使用Canvas绘制印章 通过HTML5的Ca…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件:…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…