Javascript 地图框总图:与“问题”;地图关闭“;

Javascript 地图框总图:与“问题”;地图关闭“;,javascript,mapbox-gl-js,eventhandler,Javascript,Mapbox Gl Js,Eventhandler,在我的Javascript Mapbox GL应用程序中,我很难让Map.off正常工作,因此很难关闭事件处理程序 我在地图上创建了多个对象(圆)实例(通过mapbox gl提供),每个实例都分配了多个事件处理程序,类似于上的示例: 不同之处在于我有多个该点的实例。它们中的每一个都可以在屏幕上拖动并放置。问题是,当用户需要在映射上预执行另一个函数时,他们无法关闭与所述点对应的所有事件处理程序 虽然map.off在“onUp”中工作,但在底部的“else”部分中没有任何效果 下面是我的代码的问题

在我的Javascript Mapbox GL应用程序中,我很难让Map.off正常工作,因此很难关闭事件处理程序

我在地图上创建了多个对象(圆)实例(通过mapbox gl提供),每个实例都分配了多个事件处理程序,类似于上的示例:

不同之处在于我有多个该点的实例。它们中的每一个都可以在屏幕上拖动并放置。问题是,当用户需要在映射上预执行另一个函数时,他们无法关闭与所述点对应的所有事件处理程序

虽然map.off在“onUp”中工作,但在底部的“else”部分中没有任何效果

下面是我的代码的问题片段。按钮导致调用MoveTree和stillTree

//---MOVE TREES CONTENT---//

//Move all Trees 
function moveTree(){
    var currName;
    for (var i = 1; i <= trees.length; i++){               
        currName = "circle" + i;
        selectCheck(currName, true);
    }   
}

//Turn off all tree interaction 
function stillTree(){
    for (var i = 1; i <= trees.length; i++){
            currName = "circle" + i;
            selectCheck(currName, false);
        }
}

//Perform or restrict tree moving functionality
function selectCheck(currName, move){    
    if (move == true){
        map.on('mouseenter', currName, onEnter) 
        function onEnter(){
            map.setPaintProperty(currName, 'circle-color', '#3bb2d0');
            canvas.style.cursor = 'move';
        }

        map.on('mouseleave', currName, onLeave)
        function onLeave(){
            map.setPaintProperty(currName, 'circle-color', 'black');
            canvas.style.cursor = '';
        };

        map.on('mousedown', currName, onDown)
        function onDown(e){
            e.preventDefault();
            canvas.style.cursor = 'grab';
            map.on('mousemove', onMove);
            map.once('mouseup', onUp);  
        }

        function onUp(){                          
            map.off('mousemove', onMove);
            map.off('touchmove', onMove);               
        }

        function onMove(){
            map.getSource(currName).setData(geojson);
        }            
    }
    else{
        alert(move);
        map.off('mousemove');
        map.off('mouseenter');
        map.off('mousemove');
        map.off('touchmove');         
    }
}
/---移动树内容---//
//移走所有的树
函数moveTree(){
var currName;
对于(var i=1;i根据,必须向
map.off()
提供两个参数:

  • 类型(字符串)
    :以前用于安装侦听器的事件类型
  • 侦听器(函数)
    :以前作为侦听器安装的函数
所以,“其他”部分应该是这样的:

else{
警戒(移动);
map.off('mousemove',onMove);
地图关闭('mouseenter',onEnter);
地图关闭('touchmove',onMove);
}

扩展四行中的每一行以更具体地执行操作,例如:map.off('mousemove',currName,onMove);也不起作用。您说过“它们不能关闭与所述点对应的所有事件处理程序”。只是在黑暗中拍摄,但这行不会永远关闭最后一个事件,因为您有欢呼声,尽管这不会引起任何问题“movetree”调用以应用每个树的处理程序和“stillTree”的方法“删除它们的方法,迭代次数与我相同,以防您重复使用一些好的旧代码段,并且仍然想知道为什么这次不起作用,传递一个参数以解除所有侦听器与用于工作的事件的绑定,但此功能在一次中断性更改中被删除。