当前位置: 首页 > article >正文

vueDraggable插件拖拽过程中节点文本不允许选中方案

如上图,在拖拽“睡眠”节点过程中划过了“下载代码”其他节点,发现其他节点的文本被选中变色,会影响拖拽体验,针对这个问题有以下解决方案:

方案一:

通过onStart在拖拽开始时给body添加一个class类,然后通过这个类设置全局的指针事件,并在onEnd拖拽结束时清除这个class类。

<script setup>
// 在拖拽开始/结束时添加 body 样式控制
const onDragStart = () => {
  document.body.classList.add('drag-active');
}

const onDragEnd = () => {
  document.body.classList.remove('drag-active'); 
}
</script>

<style>
// 增强拖拽时的全局控制
body.drag-active {
  cursor: grabbing !important;
  
  * {
    cursor: grabbing !important;
    pointer-events: none;
    
    &.ghost,
    &.drag {
      pointer-events: auto;
    }
  }
}
</style>

但是这个方式可能会影响页面其他容器的效果。

方案二:

通过物理屏蔽+定时清理,确保拖拽过程中无法选中文本,也不影响拖拽元素操作,可以根据实际效果调整清理间隔时间(50ms)。

// 在拖拽开始时添加终极保护
const onDragStart = () => {
  // 添加事件防护
  const cleanSelection = () => {
    window.getSelection().removeAllRanges()
    document.onselectstart = () => false
  }
  
  // 高频清理选区
  const selectionCleaner = setInterval(cleanSelection, 50)
  
  // 拖拽结束时清理
  const onEnd = () => {
    document.onselectstart = null
    clearInterval(selectionCleaner)
    document.removeEventListener('mouseup', onEnd)
  }
  
  document.addEventListener('mouseup', onEnd, { once: true })
}


http://www.kler.cn/a/573728.html

相关文章:

  • 最新技术趋势与应用解析:未来科技走向
  • 【每日学点HarmonyOS Next知识】动图循环播放、监听tab切换、富文本上下滚动、tab默认居中、a标签唤起拨号
  • AIGC(生成式AI)试用 26 -- 跟着清华教程学习 - 个人理解
  • TCP、UDP、WebSocket 和 HTTP 教程
  • 玩转大模型——Trae AI IDE国内版使用教程
  • 学网络安全报班可靠吗?
  • Baklib内容中台赋能企业智管
  • Unity 实现在模型表面进行绘画
  • DeepSeek赋能智慧工厂:推动制造业高效智能可持续,开启制造业转型升级
  • 网站搭建需要做些什么
  • 模板字符串【ES6】
  • Mac OS升级后变慢了,如何恢复老系统?
  • 在 Aspire 项目下使用 AgileConfig
  • 【HTTP】解码网络通信的奥秘:HTTP,IP 地址,端口,DNS及NAT地址转换的协同之舞
  • 一个结合创意与技术的Python数据可视化案例,展示动态3D粒子轨迹图与热力图的融合效果,代码包含注释与关键技术点解析
  • 【C++】函数指针和指针函数
  • 什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
  • FieldFox 手持射频与微波分析仪
  • 六十天前端强化训练之第七天CSS预处理器(Sass)案例:变量与嵌套系统详解
  • 零基础C语言学习日志19(C语言内存函数)