前端问题求解(最强 AI ChatGPT 无法解决的问题)

2023-12-11 00:42:14 +08:00
 61162833
一个网页横向展示若干个 100x100 的链接方格,不换行,用 javascript 实现可以按住鼠标左右拖拽来实现内容的左右滚动。

https://jsfiddle.net/1r6k4b7n/

现在的问题是,如果拖拽滚动后,松开鼠标会直接打开鼠标下方的链接
需求是如果进行拖拽则不会激活方格的链接。

在我之前的理解中,只需要在 mouseup 事件中加一个阻止事件冒泡即可实现:
const stopDragging = () => {
isDragging = false;
e.stopPropagation(); //阻止事件冒泡
e.preventDefault(); //或者加这个,阻止默认事件
}

但事实不是如此,仍然会在拖拽后激活链接。

然后针对这个问题与 ChatGPT 进行了长时间对话,ChatGPT 给的方案就是在拖拽时移除所有 a 的 click 事件,然后 mouseup 后加回去,但实际的情况是打开链接是在 mouseup 后激活的,所以无效。


所以求助各位大神,就是拖拽滚动松开鼠标后不要打开链接,应该如何优雅的实现?

例子代码非常简单,放在: https://jsfiddle.net/1r6k4b7n/
1537 次点击
所在节点    前端开发
6 条回复
BwNVlwSq
2023-12-11 01:12:14 +08:00
拖动的元素上增加一个透明层
CopyRight
2023-12-11 09:00:41 +08:00
.rounded-reel-item {
pointer-events:none;
}
llwxi
2023-12-11 09:04:40 +08:00
拖动的时候给 a 标签添加 `pointer-events: none` css 属性,停止拖动的时候去掉。这里应该在 mouesmove 里面加,写一个阈值,鼠标点击之后移动的距离超过这个阈值,就判断为拖动,不然的话就是点击。判断为拖动的时候加上面说的 css 属性
heishu
2023-12-11 09:32:29 +08:00
鼠标按下时不触发 a 标签跳转,在鼠标松开时判断是否为拖拽,不是拖拽就用 js 实现页面跳转
AllenCai
2023-12-11 09:57:43 +08:00
4 楼的方案比较好
LelouchXC
2023-12-11 14:54:52 +08:00
同四楼,之前我写过的拖拽逻辑是:onmouseup 时鼠标的位置不变且和 onmousedown 的时间间隔不超过 200ms ,及判定为点击事件,否则判定为拖拽

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/999218

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX