html拖拽没有文字不能拖拽,优雅的防止页面文字选中拖拽问题?

博客讨论了如何防止网页上的文本和图片在鼠标操作下被意外选中或拖拽,影响用户体验。作者尝试通过监听body的选中和拖拽事件并阻止默认行为,但此方法过于严格,禁用了所有非输入元素的选中。然后,作者尝试使用CSS来禁止选中,但同样无法避免拖拽问题。问题在于,虽然可以单独禁止body的拖拽,只要有文本能被选中,就可能导致拖拽。寻求一种方法,既能允许特定DOM元素的文本被选中,又防止不必要的拖拽行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时页面上的文本被鼠标框选、键盘全选等操作,导致触发鼠标的拖拽机制,这对web体验很差,如图

ee3065d0e5a6858f459add8f5747c71f.png图中的文本和图片等很容易被鼠标所框选或手贱全选操作,接着鼠标再一拖,那场面就很尴尬了。

如何优雅地解决这样的麻烦?

试过监听页面body的选中和拖拽事件,效果非常明显,直接阻止了除输入/文本框以外的所有的选中和拖拽,代码如下。但是有个缺陷,部分dom(非文本/输入框)上的文本希望保留被框选的功能,这效果明显过头了,不太适合。document.body.onselectstart = document.body.ondrag = ()=>{ return false }

试着通过CSS来阻止,代码如下。效果和上面的方案一样,缺陷也一致body{  -webkit-touch-callout: none;

-webkit-user-select: none;

-khtml-user-select: none;

-moz-user-select: none;

-ms-user-select: none;

user-select: none;

}

接着缩小范围,但是发现只要有文本能选中,鼠标就能触发拖拽机制,通过单独禁止body的拖拽也无效

document.body.ondrag = ()=>{ return false }

如何才能做到只能选,不能拖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值