【问题标题】:Google Maps Api: Polyline editable events - Make a vertex non-editableGoogle Maps Api:折线可编辑事件 - 使顶点不可编辑
【发布时间】:2015-09-21 05:07:50
【问题描述】:

我想让可编辑多段线的开始和结束顶点不可编辑。这样用户就可以编辑除这两个之外的所有其他顶点。我已经实现了一个事件侦听器(mousedown)来过滤顶点,但是我怎样才能阻止它被编辑?

google.maps.event.addListener(poly, 'mousedown', function (event) {
    if (event.vertex === 0) { // First vertex of polyline
        //disable vertex from being editable
    }
});

【问题讨论】:

    标签: google-maps google-maps-api-3 polyline vertex


    【解决方案1】:

    你在正确的道路上。

    要检测顶点已被移动,请在折线路径上监听 set_at 事件。但是,这不会让你知道原来的位置是什么,所以我要做的是捕获mousedown 事件,就像你说的那样,并在路径的set_at 事件上声明一个addListenerOnce如果我在第一点或最后一点,请重置顶点坐标。

    以下监听器将允许用户拖动这些顶点,但它们会下意识地回到原来的位置:

    google.maps.event.addListener(poly, 'mousedown', function (event) {
        var thePath = this.getPath();
        if (event.vertex === 0 || event.vertex === thePath.getLength() - 1) {
            google.maps.event.addListenerOnce(thePath, 'set_at', function (vertex) {
                this.setAt(vertex, event.latLng);
            });
        }
    });
    

    为什么我使用addListenerOnce?你看,这是因为否则重置第一个或最后一个点的行为会触发相同的事件,导致最大堆栈错误。

    编辑:这是另一个尝试。以下侦听器不允许用户拖动所述顶点。但是,我正在立即重新启用可编辑行为。您的浏览器中可能存在竞争条件。

    google.maps.event.addListener(poly, 'mousedown', function (event) {
        var thePath = this.getPath();
    
        if (event.vertex === 0 || event.vertex === thePath.getLength() - 1) {
            console.debug('Vertex forbidden!');
            this.set('editable',false);
            this.set('editable',true);
        } 
    });
    

    【讨论】:

    • 好的,但是没有办法禁用移动。为了使观点稳定?
    • 嘿@StathisGaknis 我添加了第二种方法来做到这一点,这可能是您正在寻找的。祝你好运。
    • 感谢您的两个回答。我正在寻找一个可靠的解决方案(没有竞争条件),所以当我解决它时我会回来。但是我确实认为这应该由带有事件或某事的 gmaps 处理。
    • 不要太挑剔。您只需要在超时内重新启用可编辑设置,这就是当且只有您能注意到甚至可能不存在的竞争条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多