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>
最近更新