Skip to content

手势库 xFinger ​


预览

介绍 ​

多方向的手势库,包括旋转,捏合,轻扫,双击等手势

平台兼容 ​

HarmonyH5andriodIOS小程序UTSUNIAPP-X SDKversion
☑☑☑️☑️☑️☑️4.76+1.1.18

文件路径 ​

ts

@/uni_modules/tmx-ui/components/x-finger/x-finger.uvue

使用 ​

ts

<x-finger></x-finger>

Props 属性 ​

名称说明类型默认值
swiperDiff滑动多长距离,识别并触发滑动的方向
number50
dbClickDiff定义双击的时间间隔触发时机
number300
clickDiff定义单击click的时间间隔触发时机
number50
longDiff定义长按的时间间隔触发时机
number800
disabled是否禁用
booleanfalse
throttleDelay移动事件的节流间隔(毫秒),0表示不节流
number16
debounce是否启用防抖,防止快速连续触发
booleanfalse
minMoveDistance最小移动距离,小于此距离不触发移动事件
number1
accOffsetX连续性坐标初始位置x
number0
accOffsetY连续性坐标初始位置y
number0
accessibility是否启用无障碍访问支持
booleantrue
ariaLabel无障碍标签
string'手势识别区域'

Events 事件 ​

名称参数说明
startevt: x,y,type,width,height触摸开始
moveevt: x,y,type,width,height触摸移动时触发
endevt: x,y,type,width,height触摸结束
cancelevt: x,y,type,width,height触摸中断
doubleClickevt: x,y,type,width,heightdoubleClick
longPressevt: x,y,type,width,height长按事件
swiperevt: union滑动时触发
clickevt: x,y,type,width,height单击
pinchundefinedevt: x,y,x1,y1,len,scale,type,width,height缩放事件
rotateundefinedevt: x,y,x1,y1,len,angle,type,width,height旋转事件

Slots 插槽 ​

名称说明数据
default默认插槽defaultx: number
x: number
x: number
x: number
x: string
y: number
y: number
y: number
y: number
y: string
accX: number
accX: number
accX: number
accX: number
accX: string
accY: number
accY: number
accY: number
accY: number
accY: string
type: number
type: number
type: number
type: number
type: string

Ref 方法 ​

名称参数返回值说明

示例文件路径 ​

json

/pages/qita/finger

示例源码 ​

uvue
vue
<template>

	<!-- #ifdef MP-WEIXIN -->
	<page-meta :page-style="`background-color:${xThemeConfigBgColor}`">
		<navigation-bar :background-color="xThemeConfigNavBgColor" :front-color="xThemeConfigNavFontColor"></navigation-bar>
	</page-meta>
	<!-- #endif -->
		
		<x-sheet>
			<x-text font-size="18" class=" text-weight-b mb-8">手势库 Finger</x-text>
			<x-text color="#999999" >
				提供高性能手势判断事件,自定义强,可自定义,长按,单击,双击,的时长及间隔。也可自定义滑动方向的间距判断。
			</x-text>
		</x-sheet>
		
		
		


		<view class="white round-10 pa-12 mx-16 mb-12 ">
			<x-finger :accOffsetX="20" :accOffsetY="20">
				<template v-slot:default="{x,y,accX,accY,type}">
					<view style="height: 150px;width: 100%;background-color: rgba(0, 0, 0, 0.1);">
						<text :style="{height:'50px',width:'80px',background: 'green',left:accX+'px',top:accY+'px'}">
							X:{{accX}}
							Y:{{accY}}
						</text>
					</view>
				</template>
			</x-finger>
		</view>
		
		<view class="white round-10 pa-12 mx-16 mb-12 ">
			<x-finger @swiper="mSwiper" @start="mStart" @move="mMove" @end="mEnd" @click="mClick"
				@doubleClick="mdbClick" @longPress="mlongClick" @rotate="rotate" @pinch="pinch">
			
				<template v-slot:default="{x,y,type}">
					<view style="width:100%;height:100px;background-color: rgba(0, 0, 0, 0.1);">
					
					</view>
				</template>
			</x-finger>
			<text class="mt-12">
				其它事件:{{diff}}
			</text>
		
			<text>
				滑动事件:{{swiperDiff}}
			</text>
			<text>
				缩放:{{pinth}}
				旋转:{{rotaValue}}
			</text>
		</view>

</template>

<script lang="uts" setup>
	import { ref, onMounted } from 'vue'
	// import {xOverflay} from "../../uni_modules/x-core"
	// 响应式数据
	const diff = ref("")
	const swiperDiff = ref("")
	const pinth = ref(0)
	const rotaValue = ref(0)
	const _x = ref(0)
	const _y = ref(0)
	
	// 生命周期
	onMounted(() => {
	})
	
	
	// 方法
	const mSwiper = (evt : UTSJSONObject) => {
		swiperDiff.value = JSON.stringify(evt)
	}
	
	const mStart = (evt : UTSJSONObject) => {
		diff.value = JSON.stringify(evt)
	}
	
	const mMove = (evt : UTSJSONObject) => {
		diff.value = JSON.stringify(evt)
	}
	
	const mEnd = (evt : UTSJSONObject) => {
		diff.value = JSON.stringify(evt)
	}
	
	const mClick = (evt : UTSJSONObject) => {
		diff.value = JSON.stringify(evt)
	}
	
	const mdbClick = (evt : UTSJSONObject) => {
		diff.value = JSON.stringify(evt)
	}
	
	const mlongClick = (evt : UTSJSONObject) => {
		diff.value = JSON.stringify(evt)
	}
	
	const pinch = (evt : UTSJSONObject) => {
		pinth.value = evt.getNumber('scale')!
	}
	
	const rotate = (evt : UTSJSONObject) => {
		rotaValue.value = evt.getNumber('angle')!
	}
</script>

<style lang="scss" scoped>

</style>
最近更新