vue vue-touch移动端手势

本文介绍如何在Vue项目中使用Vue-Touch插件实现手势识别和触摸事件处理,包括安装、引入、使用方法及自定义手势配置。涵盖Pan平移、Pinch缩放、Press按压、Rotate旋转、Swipe滑动和Tap点击等事件类型的详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装
	cnpm install vue-touch@next --save

2、引入
	在main.js中
	
	import VueTouch from 'vue-touch'

	Vue.use(VueTouch, {name: 'v-touch'})  v-touch可以是自定义名称

3、使用:
	Vue.use注册的name名称,默认该标签为div
	
	<v-touch 	
		(1)替换标签
			tag="要变成的标签名称,默认为div"
		
		(2)定义手势
			@事件类型='回调' 
			
		(3)配置手势事件选项
			:小写事件类型名称-options="{ direction: 'horizontal', threshold: 100 }
				threshold临界值
				directions方向: 'up', 'down', 'left', 'right', 'horizontal', 'vertical', 'all'
				具体配置查看hammerjs
				
		(4)阻止/触发手势
			:enabled="true/false"   允许/禁止所有的手势
			:enabled="{ pinch: true, rotate: false }"  允许和禁止指定手势
		
		(5)公共组件方法
			1、通过ref获取到该标签
			2、在方法中
				this.$refs.tapper.disable('tap')
				
			公共方法:
				disable('手势名称') 	
				enable('手势名称') 	
				toggle('手势名称') 	
				disableAll() 	disable all Recognizers
				enableAll() 	enable all Recognizers
				isEnabled('手势名称') 	
			
		(6)自定义手势
			在main.js中,在Vue.use之前使用
			
			VueTouchVueTouch.registerCustomEvent('doubletap', {
			  type: '手势名称',
			  ...手势事件的配置选项,见(3)
			  taps: 2  对应tap手势的触发点击次数配置
			})
	
	> ...</v-touch>
	
4、事件类型:
	Pan平移 	
		pan, panstart, panmove, panend, pancancel,
		panleft, panright, panup, pandown 	
		
	Pinch缩放 	
		pinch, pinchstart, pinchmove,pinchend,
		pinchcancel, pinchin, pinchout 	
		
	Press按压 	
		press, pressup 	
		
	Rotate旋转 	
		rotate, rotatestart, rotatemove,
		rotateend, rotatecancel, 	
		
	Swipe滑动 	
		swipe, swipeleft, swiperight,
		swipeup, swipedown 	
		
	Tap点击 	
		tap 	

代码示例:

<template>
   <div>
     category
     <!-- <div  :class='{swipe:move}'>
       <v-touch @swipeleft="swipeleft" style='width:200px;height:200px;backgroundColor:red;'>Swipe me!</v-touch>
       左滑
     </div> -->

      <div >
       <v-touch
        v-on:panstart="swipeleft"
        style='width:200px;height:200px;backgroundColor:red;'
        :pan-options="{ direction: 'horizontal', threshold: 100 }"
        v-bind:enabled="false"
        >Swipe me!</v-touch>
       左滑2
     </div>

     <Tabbar/>
   </div>
</template>

<script>
import Tabbar from '@/components/common/tabbar/tabbar.vue'

export default {
  name:'category',
  data(){
    return{
      move:false
    }
  },
  components:{
    Tabbar
  },
  methods:{
    swipeleft()
    {
      // setTimeout(()=>{
      //   this.$router.push('/shopcar')
      // },2000)
      
      this.move=true;
      console.log('左滑');
    }
  }

}
</script>

<style scoped>
.swipe{
  transform: translateX(-100%);
  transition: 2s;

}

</style>
### 解决 Vue 移动端 el-table 表头无法拖动的问题 对于 `el-table` 组件,在移动端遇到表头无法拖动的情况,通常是因为默认情况下该组件并未针对移动设备优化触摸事件处理逻辑。为了使表头能够在移动设备上正常拖动调整列宽,可以采取以下几种方法: #### 方法一:引入第三方库 SortableJS 并自定义指令 通过使用 SortableJS 插件来增强 `el-table` 的交互能力是一个有效的方案[^3]。 1. 安装依赖包: ```bash npm install sortablejs --save ``` 2. 创建一个新的 Vue 自定义指令用于监听并响应触控操作: ```javascript import Sortable from 'sortablejs'; export default { bind(el, binding, vnode) { const options = Object.assign({}, { animation: 150 }, binding.value); new Sortable(el.querySelector('.el-table__header-wrapper'), options); } }; ``` 3. 将创建好的指令应用到模板中的 `<el-table>` 标签上: ```html <template> <div id="app"> <el-table v-sortable="{handle:'.drag-handle'}" :data="tableData"> <!-- 添加一个可作为手柄的图标 --> <el-table-column type="index" width="50"> <i slot-scope="scope" class="el-icon-rank drag-handle"></i> </el-table-column> <el-table-column prop="name" label="Name"/> ... </el-table> </div> </template> ``` 这种方法不仅解决了表头拖拽问题,还允许用户对整个表格行进行重新排列。 #### 方法二:修改样式与事件绑定适配移动端手势 如果不需要完整的排序功能而只是希望支持简单的列宽调节,则可以通过 CSS 和 JavaScript 来改进用户体验: 1. 调整 `.el-table th` 元素上的 `-webkit-user-select:none; cursor:pointer; touch-action: pinch-zoom pan-x;` 属性以便更好地识别手指滑动动作; 2. 使用原生 JS 或者 jQuery 实现基于 TouchEvent API 的宽度改变机制; 3. 对于某些特定版本可能存在 bug 导致固定列(`fixed`)属性影响整体布局稳定性的情形,建议移除不必要的 `fixed="right"` 设置以减少潜在冲突[^1]。 以上两种方式都可以有效改善 `el-table` 在手机和平板电脑上的表现,具体选择取决于项目需求和个人偏好。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值