Google 地图 Api:折线可编辑事件 - 使顶点不可编辑
Google Maps Api: Polyline editable events - Make a vertex non-editable
我想将可编辑折线的起点和终点设为不可编辑。这样用户就可以编辑除这两个顶点之外的所有其他顶点。我已经实现了一个事件侦听器 (mousedown) 来过滤顶点,但是我怎样才能阻止它被编辑呢?
google.maps.event.addListener(poly, 'mousedown', function (event) {
if (event.vertex === 0) { // First vertex of polyline
//disable vertex from being editable
}
});
你走在正确的道路上。
要检测顶点是否已移动,您可以在折线的路径上监听 set_at
事件。但是,这不会让你知道原来的位置是什么,所以我要做的是捕获 mousedown
事件,就像你说的那样,并在 [=12= 上声明一个 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);
}
});
我想将可编辑折线的起点和终点设为不可编辑。这样用户就可以编辑除这两个顶点之外的所有其他顶点。我已经实现了一个事件侦听器 (mousedown) 来过滤顶点,但是我怎样才能阻止它被编辑呢?
google.maps.event.addListener(poly, 'mousedown', function (event) {
if (event.vertex === 0) { // First vertex of polyline
//disable vertex from being editable
}
});
你走在正确的道路上。
要检测顶点是否已移动,您可以在折线的路径上监听 set_at
事件。但是,这不会让你知道原来的位置是什么,所以我要做的是捕获 mousedown
事件,就像你说的那样,并在 [=12= 上声明一个 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);
}
});