我有一个React-LeafletMap,我在里面渲染了一个div
。
出于某种原因,与div的内容交互会导致下面的Map响应(例如:双击将缩放Map,拖动将平移Map)-即使我在附加到div的处理程序中调用e.stopPropagation()
。
据我所知,调用stopPropagation()
应该可以防止DOM事件到达map本身。
为什么stopPropagation()
被忽略了?
我怎样才能在Map中渲染一个div * 而不使它的事件冒泡到Map本身?
Here is an example codepen显示问题。
import { Map, TileLayer } from 'react-leaflet';
const MyMap = props => (
<Map zoom={13} center={[51.505, -0.09]}>
<TileLayer url={"http://{s}.tile.osm.org/{z}/{x}/{y}.png"} />
{/*
HOW do I get this div to NOT pass it's events down to the map?!?!
Why does e.stopPropagation() appear to not work?
*/}
<div
id="zone"
onClick={e => e.stopPropagation()}
onMouseDown={e => e.stopPropagation()}
onMouseUp={e => e.stopPropagation()}
>
<p>Double-click or click and drag inside this square</p>
<p>Why does the map zoom/pan?</p>
</div>
</Map>
);
ReactDOM.render(<MyMap />, document.getElementById('root'));
2条答案
按热度按时间4nkexdtk1#
对于瓣叶图,使用
L.DomEvent.disableClickPropagation
代替:将
stopPropagation
添加到元素的'click'
、'doubleclick'
、'mousedown'
和'touchstart'
事件中。示例
何处
Updated codepen
备选项
另一个阻止div元素传播到map事件的选项是将div * 放在map元素的外部:
何处
qyyhg6bp2#
对于使用
react-leaflet
的更新版本的用户(例如:^4.2.1
),我只能让它与react-leaflet-custom-control一起工作Codesandbox