ow
This commit is contained in:
1 parent
3194f98ac0
commit
e740ec77ec
24 files changed
+1561
-65
No files matched your search
@@ -3,7 +3,9 @@
|
||||
* 悬浮操作按钮:蓝色渐变「+」,可在屏幕内自由拖动,松手后位置写入 Storage 下次启动恢复。
|
||||
* 只做外观与点击上报;新建/上传等动作语义由页面处理。
|
||||
* 拖动实现:touch 事件(真机/App)+ mouse 事件(H5 桌面调试)双轨;
|
||||
* 位移小于阈值视为轻点(emit click),超过阈值才算拖动(touch 后屏蔽 mouse 兼容事件防双触发)。
|
||||
* 位移小于阈值视为轻点、超过才算拖动。点击上报走原生 click(onTap)而非 touchend/mouseup
|
||||
* 手动 emit:保留浏览器用户激活链,否则轻点里同步拉起文件选择器等 gesture API 会被静默拦截;
|
||||
* 拖动收尾置 suppressClick 吞掉随后的原生 click,防拖完误触。
|
||||
*/
|
||||
import { computed, onMounted, ref } from "vue";
|
||||
|
||||
@@ -90,6 +92,9 @@ function onDragMove(x: number, y: number): void {
|
||||
pos.value = clampPos(originPos.x + dx, originPos.y + dy);
|
||||
}
|
||||
|
||||
/** 拖动收尾后浏览器还会补发一次原生 click,置位吞掉它(轻点不置位,由 onTap 正常上报) */
|
||||
let suppressClick = false;
|
||||
|
||||
function onDragEnd(): void {
|
||||
if (!dragging) {
|
||||
return;
|
||||
@@ -97,10 +102,17 @@ function onDragEnd(): void {
|
||||
dragging = false;
|
||||
if (moved) {
|
||||
uni.setStorageSync(STORAGE_KEY, pos.value);
|
||||
suppressClick = true;
|
||||
}
|
||||
else {
|
||||
emit("click");
|
||||
}
|
||||
|
||||
/** 唯一点击出口:原生 click(鼠标轻点/触屏补发)保留用户手势,页面才能在里面拉起文件选择器 */
|
||||
function onTap(): void {
|
||||
if (suppressClick) {
|
||||
suppressClick = false;
|
||||
return;
|
||||
}
|
||||
emit("click");
|
||||
}
|
||||
|
||||
// ===== touch(真机 / App)=====
|
||||
@@ -128,7 +140,7 @@ function onMouseDown(e: MouseEvent): void {
|
||||
if (touchHandled) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
// 注意不能 preventDefault:它会取消后续原生 click 及其用户激活,onTap 就再也收不到点击
|
||||
onDragStart(e.clientX, e.clientY);
|
||||
const move = (ev: MouseEvent) => onDragMove(ev.clientX, ev.clientY);
|
||||
const up = () => {
|
||||
@@ -143,7 +155,7 @@ function onMouseDown(e: MouseEvent): void {
|
||||
|
||||
<template>
|
||||
<view class="float-add-btn" :style="posStyle" @touchstart="onTouchStart" @touchmove.stop.prevent="onTouchMove"
|
||||
@touchend="onTouchEnd" @mousedown="onMouseDown">
|
||||
@touchend="onTouchEnd" @mousedown="onMouseDown" @click="onTap">
|
||||
<u-icon name="plus" size="52" color="#ffffff" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
Reference in new issue
Block a user