huiyan-fe / mapvgl

百度地图三维地理信息可视化库
MIT License
37 stars 4 forks source link

当在图层鼠标拾取的onMousemove中使用openInfoWindow()会使当前onClick函数失效 #108

Open m4ngfu opened 2 years ago

m4ngfu commented 2 years ago

就像下面这样

// ...... 这是页面 https://mapv.baidu.com/gl/examples/editor.html#icon.html 上的示例
var layer = new mapvgl.IconLayer({
      width: 100 / 4,
      height: 153 / 4,
      offset: [0, -153 / 8],
      opacity: 0.8,
      icon: 'images/marker.png',
      enablePicked: true, // 是否可以拾取
      selectedIndex: -1, // 选中项
      selectedColor: '#ff0000', // 选中项颜色
      autoSelect: true, // 根据鼠标位置来自动设置选中项
      onClick: (e) => { // 点击事件怎么样都没反应
          console.log('click', e);
         alert(1)
      },
     // 我在这里使用了openInfoWindow
     onMousemove: (e) => {
         if (!e.dataItem) return
    console.log('mousemove', e);
      let infoWindow = new window.BMapGL.InfoWindow('内容', { title : "信息" }); 
         let point = new window.BMapGL.Point(e.dataItem.geometry.coordinates[0], e.dataItem.geometry.coordinates[1]);
         map.openInfoWindow(infoWindow, point)
   },
      onDblClick: e => {
          console.log('double click', e);
      },
      onRightClick: e => {
          console.log('right click', e);
      }
  });
  view.addLayer(layer);
  layer.setData(data);
// ......
Jasonliang79 commented 2 years ago

遇到相同问题,,,,有解决的吗?

m4ngfu commented 2 years ago

遇到相同问题,,,,有解决的吗?

目前没有,我不使用单击而使用双击,禁用地图的双击放大事件

zhangjian4 commented 2 years ago

遇到相同问题,,,,有解决的吗?

研究了一个上午,终于找到问题所在。 问题在于第一次openInfoWindow后极短时间内再次调用openInfoWindow或者infoWindow的close方法,就会造成click事件失效,解决的办法就是如果infoWindow存在的时候不要重复调用,这是修改后的代码

 let infoWindow
 var layer = new mapvgl.IconLayer({
      width: 100 / 4,
      height: 153 / 4, 
      offset: [0, -153 / 8],
      opacity: 0.8,
      icon: 'images/marker.png',
      enablePicked: true, // 是否可以拾取
      selectedIndex: -1, // 选中项 
      selectedColor: '#ff0000', // 选中项颜色
      autoSelect: true, // 根据鼠标位置来自动设置选中项
      onClick: (e) => { // 点击事件怎么样都没反应
          console.log('click', e);
         alert(1)
      },
     // 我在这里使用了openInfoWindow
     onMousemove: (e) => {  
        if (!e.dataItem||infoWindow) return
        console.log('mousemove', e);
        infoWindow = new window.BMapGL.InfoWindow('内容', { title : "信息" }); 
        infoWindow.addEventListener('close',()=>{
          infoWindow=null;
        });
        let point = new window.BMapGL.Point(e.dataItem.geometry.coordinates[0], e.dataItem.geometry.coordinates[1]);
        map.openInfoWindow(infoWindow, point)
      },
      onDblClick: e => {
          console.log('double click', e);
      },
      onRightClick: e => {
          console.log('right click', e);
      }
  });