【问题标题】:How do you stop event propagation when clicking a scrollbar in IE10+在 IE10+ 中单击滚动条时如何停止事件传播
【发布时间】:2016-03-19 19:35:32
【问题描述】:

我有一个位于 div 中的传单地图,并在其顶部有一个图层列表。图层列表通常很长,并且由于设置了 overflow:scrollbar 的 CSS 属性而显示滚动条。

如果您单击滚动条上的任意位置,则拖动不会传播到下面的地图,但是如果您单击并拖动滚动条,它会传播到地图并开始被拖动。

这仅适用于 IE10+,它在 Firefox、Chrome 等中按预期工作。

如何防止这种行为?

【问题讨论】:

  • 捕捉你的事件并告诉它停止,developer.mozilla.org/en/docs/Web/API/Event/stopPropagation
  • 是否可以在滚动条上捕获点击事件?我的图层列表包含可点击元素,我不想停止这些事件。
  • 没有。 JS 的作用域是直到窗口,窗口外的任何东西都不能被捕获。但是如果你想停止滚动,你可以检查 window.scroll 事件并进行相应处理
  • 但滚动条在 div 上是内联的 - 这算作窗口外吗?
  • 也不是滚动事件——它是滚动条上的点击事件触发了对底层的拖动

标签: javascript css dom-events scrollbar event-propagation


【解决方案1】:

我应该阅读更多有关 Leaflet 的信息。我发现 Leaflet 劫持了所有的事件处理并实现了自己的事件模型。正常的 stopPropagation、window.event.cancelBubble 或者你有什么都行不通。

你必须使用 Leaflet 自己的处理程序:

L.DomEvent.disableClickPropagation(leafletMenu); 

原因是我的菜单元素是作为 Leaflet 控件创建的:

leafletMenu = L.DomUtil.create('div', 'niras-map-menu');

【讨论】:

    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多