Javascript 如何防止从子级拖动到父级时发生父级单击事件

Javascript 如何防止从子级拖动到父级时发生父级单击事件,javascript,preventdefault,dom-events,stoppropagation,Javascript,Preventdefault,Dom Events,Stoppropagation,如果希望子元素内的单击不会冒泡到其父元素,可以使用stopPropagation <div class="parent"> <div class="child"></div> </div> document.querySelector('.parent').addEventListener('click', ()=> { .. } document.querySelector('.child').addEventListener('

如果希望子元素内的单击不会冒泡到其父元素,可以使用
stopPropagation

<div class="parent">
    <div class="child"></div>
</div>

document.querySelector('.parent').addEventListener('click', ()=> { .. }
document.querySelector('.child').addEventListener('click', ()=> { .. }

document.querySelector('.parent').addEventListener('click',()=>{..}
document.querySelector('.child').addEventListener('click',()=>{..}

但是,当单击从子对象内部开始到外部结束时,如何防止父对象单击。换句话说:
mousedown
在子对象内部,然后是
mousemove
,它将指针移动到子对象外部(但在父对象内部),然后是
mouseup

对我来说最重要的是,在这种情况下,我不希望家长点击,有什么建议吗


更新:如果您还记得mousedown目标,您可以在父单击回调中使用它:。但我希望有更好的解决方案

我希望我能足够清楚地理解您的问题。您正在寻找一个事件或某种类型的方法,使您能够始终找到单击的第一个值。e.stopPropagation()作为事件侦听器的第三个参数的capture属性也将不起作用(&C)

同时,我要做的是在侦听器范围之外添加一个额外的变量。单击后,您可以将该变量指定给您单击的任何项目


或者,您可以修改您的单击处理程序,使其与用户拖动第一次单击的部分无关。用户向下鼠标的第二次,它们将触发事件。

注意,firefox中的行为与chrome中的不同。当在chrome中测试mouseup occursI时,firefox中不会触发父单击:)但FF显示了我需要的行为!!对…我想是的。我第一次在firefox中查看演示时就感到困惑,而且看起来还不错