当前位置:首页 > 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 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓…

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为fa…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 29…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm c…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…