layer frame 点击穿透

使用了layer tab

发行,点击第二个tab. 在tab内再打开一个frame,点击frame,会发生点击穿透;

所以.我这里只能使用链接跳转的方式,

最后发现,是因为我配置了web自动刷新,BrowserSync+gulp;

弹框的页面注入了BrowserSync的js,然后父页面也注入的有BrowserSync的js,造成点击上层窗口,就是触发父级窗口出发点击事件;

 

### 解决OpenLayers中图标点击事件穿透的问题 在OpenLayers应用中,当图层叠加时,默认情况下点击事件可能会穿透到下一层。为了阻止这种行为并确保点击仅作用于最上层的对象,可以调整交互逻辑以及配置图层属性。 对于矢量图层上的特征(如图标),可以通过自定义`styleFunction`来控制样式,并利用`select`交互方式捕获点击事件而不让其传递给底层地图[^1]。下面是一个具体的实现方法: #### 使用 `ol/interaction/Select` 通过创建一个选择交互对象并与特定条件相结合,可以在用户点击某个要素时触发相应的操作而不会影响其他图层。这里的关键在于设置合适的过滤器函数(filter function),它决定了哪些要素能够被选中。 ```javascript import 'ol/css'; import Map from 'ol/Map'; import View from 'ol/View'; import TileLayer from 'ol/layer/Tile'; import VectorLayer from 'ol/layer/Vector'; import OSMSource from 'ol/source/OSM'; import GeoJSON from 'ol/format/GeoJSON'; import { Select } from 'ol/interaction'; // 创建底图图层 const osmBaseMap = new TileLayer({ source: new OSMSource(), }); // 假设有一个包含多个点位的geojson数据源作为覆盖物 const vectorSource = new VectorSource({ url: '/path/to/features.geojson', format: new GeoJSON() }); const iconOverlayLayer = new VectorLayer({source:vectorSource }); // 添加选择交互 const selectInteraction = new Select({ layers:[iconOverlayLayer], // 只允许在这个图层内选取 filter(feature, layer){ // 这里可以根据feature特性进一步筛选可响应点击的目标 return true; } }); map.addInteraction(selectInteraction); // 绑定选择改变后的处理程序 selectInteraction.on('select', (event)=>{ const selectedFeatures = event.selected; if(selectedFeatures.length>0){ console.log(`Selected feature id:${selectedFeatures[0].getId()}`); // 执行针对所选要素的操作... } }) ``` 此代码片段展示了如何使用`ol.interaction.Select`类来管理图标的点击事件,从而避免这些事件传播至背景的地图或其他下方图层。注意,在实际项目中可能还需要考虑更多细节,比如优化性能、增强用户体验等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值