解决dnd-kit点击事件和拖拽事件的冲突
dnd-kit:https://github.com/clauderic/dnd-kit
在使用dnd-kit
作为拖拽库时,可能会遇到拖拽的组件中包含可交互的组件。例如一个input
或者button
,当绑定上事件之后,例如click
,这时浏览器会优先响应拖拽事件,那么点击事件就无效了。
方法一
useSensor(PointerSensor, {
activationConstraint: {
distance: 5,
},
})
使用传感器,设置鼠标传感器,当距离小于5是不响应拖拽事件。
缺点:拖拽要>5才会生效,看起来有一点点卡顿。
方法二
import type { MouseEvent } from 'react'
import { MouseSensor } from '@dnd-kit/core'
export class MouseSensorCustomize extends MouseSensor {
static activators = [
{
eventName: 'onMouseDown' as const,
handler: ({ nativeEvent: event }: MouseEvent) => {
return shouldDragEvent(event.target)
}
}
]
}
function shouldDragEvent(element: HTMLElement | null) {
let current = element;
while (current) {
if (current?.dataset?.noDrag) {
return false;
}
cur = current.parentElement;
}
return true;
}
---- using ----
<Button data-no-drag="true"/>
使用html
的data属性来标记这个标签是否能拖动,true则是不能拖动。
缺点:可交互的元素就不能再响应拖动事件。
方法三
useSensor(PointerSensor, {
activationConstraint: {
delay: 10,
tolerance: 10,
},
})
delay
表示在按住拖拽元素多久之后才能拖动,tolerance
表示在拖动操作终止前容忍的拖动距离。
缺点:拖拽的动作需要等待一小段时间。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfiaibg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01