Javascript 如何监听对象的属性变化?
一般来说,我对谷歌地图api和js都是新手。 我有一个有两个圆形对象的项目,它们可以更改半径和中心坐标,每次这些属性中的一个更改时,我都要执行特定的功能。 使用控制器按setradius方法更改圆的半径,也可以拖动圆。我不想在用户拖动圆圈时每帧执行一次函数。如果属性没有更改,则在0.1秒后可能会进行检查,然后才执行。 希望我没有把它弄得太复杂Javascript 如何监听对象的属性变化?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,一般来说,我对谷歌地图api和js都是新手。 我有一个有两个圆形对象的项目,它们可以更改半径和中心坐标,每次这些属性中的一个更改时,我都要执行特定的功能。 使用控制器按setradius方法更改圆的半径,也可以拖动圆。我不想在用户拖动圆圈时每帧执行一次函数。如果属性没有更改,则在0.1秒后可能会进行检查,然后才执行。 希望我没有把它弄得太复杂 TL;DR:如何在每次圆的属性发生变化时执行函数?谷歌地图Javascript API v3是基于事件的。具有在其任何属性更改时激发的事件。将事件侦听器添
TL;DR:如何在每次圆的属性发生变化时执行函数?谷歌地图Javascript API v3是基于事件的。具有在其任何属性更改时激发的事件。将事件侦听器添加到圆中,以侦听已更改的事件
cityCircle = new google.maps.Circle(populationOptions);
google.maps.event.addListener(cityCircle, 'radius_changed', radiusChanged);
基于以下内容的工作代码段:
//此示例在地图上创建圆,表示
//北美洲的人口。
//首先,为每个城市创建一个包含LatLng和人口的对象。
var citymap={};
城市地图[“芝加哥”]={
中心:新google.maps.LatLng41.878113,-87.629798,
人口:2714856
};
城市地图[纽约]={
中心:新google.maps.LatLng40.714352,-74.005973,
人口:8405837
};
城市地图[洛杉矶]={
中心:新google.maps.LatLng34.052234,-118.243684,
人口:3857799
};
城市地图[“温哥华”]={
中心:新的google.maps.LatLng49.25,-123.1,
人口:603502
};
var城市圈;
函数半径改变{
document.getElementById'info'。innerHTML=+this.title+radius=+this.radius.toFixed2+km;
};
函数初始化{
//创建地图。
变量映射选项={
缩放:4,
中心:新google.maps.LatLng37.09024,-95.712891,
mapTypeId:google.maps.mapTypeId.TERRAIN
};
var map=new google.maps.Mapdocument.getElementById'map-canvas',
地图选项;
//为城市地图中的每个值构建圆。
//注:我们根据人口来缩放圆的面积。
城市地图中的var城市{
变量填充选项={
strokeColor:'FF0000',
笔划不透明度:0.8,
冲程重量:2,
fillColor:'FF0000',
不透明度:0.35,
是的,
真的,
标题:城市,
地图:地图,
中心:城市地图[城市]。中心,
半径:Math.sqrtcitymap[城市].人口*100
};
//将该城市的圆圈添加到地图中。
cityCircle=new google.maps.CirclepopulationOptions;
google.maps.event.addListenercityCircle,'radius_changed',radius changed;
}
}
google.maps.event.AddDomainListenerWindow“加载”,初始化;
html,
身体
地图画布{
高度:500px;
宽度:500px;
边际:0px;
填充:0px
}
既然您提到了控制器,那么您使用的客户端框架是什么?还有,你能给你的问题添加一个改变半径的代码的例子吗?对于控制器,我使用谷歌地图中的内置控制器选项,从这里得到了参考。我用这样一个简单的函数来改变半径:functioncircle{circle.setRadiuscircle.getRadius*1.1};此函数使给定圆变大10%如果您总是从同一组函数中更改半径,则只需创建一个名为updateRadius的新函数,并在更改半径的函数中调用它。每次半径更改时,您希望执行什么函数?你的代码看起来像什么?请提供一个示例,演示您的代码看起来像什么,以及您认为应该工作的尝试。我可以向每个更改半径的控制器添加所需的函数,即我需要在圆的属性更改时执行的函数,但我仍然需要注意拖动圆-我在圆得到后如何执行函数拖到新位置?