如何在谷歌地图中收听用户生成的缩放
How to listen for user generated zoom in Google Maps?
我想知道谷歌地图zoom_changed事件何时由用户与+/-缩放按钮的交互触发。 如果我使用通用事件侦听器进行zoom_changed,我无法判断它是用户生成的事件还是由 fitBounds() 之类的东西引起的缩放更改。 寻找最好的方法来做到这一点。
我尝试了以下方法,但似乎都不起作用:
1) 查找有关zoom_changed的活动信息。 似乎没有。
2)为鼠标悬停和鼠标退出添加侦听器,让我设置一个标志以查看用户是否在地图边界内,并检查zoom_changed上的标志。 这不起作用,因为地图不会将缩放按钮视为地图框的一部分(换句话说,将鼠标悬停在缩放按钮上会触发鼠标退出事件)。
3) 将普通(非 gMap)侦听器添加到缩放按钮。 但是,我找不到一个明确的CSS选择器,可以让我只抓住按钮。
4)在gMaps API中寻找一个函数,可以让我做一些类似getZoomElements()的事情,然后我可以使用它来设置侦听器。
奇怪的是,如果我向地图添加自定义控件,我可以清楚地做我想做的事。 他们强迫我这样做而不是将钩子钩入默认缩放控件似乎很奇怪。
我不会只是挂在+
/-
按钮(或您自己的自定义控件上的按钮)。 用户可以使用鼠标滚轮或双击地图来更改地图上的缩放比例。 此外,您将依赖实现细节而不是记录的API,这是一个主要的禁忌。
这实际上意味着检测变焦变化的唯一可靠、有据可查的方法是监听Map
的zoom_changed
事件。
如果事件处理程序无法确定事件是来自用户操作还是 API 调用,则有两种方法:
- 在调用 API 函数之前设置一个标志,以便知道可以忽略此更改。
- 您能否重新构建您的应用,以便缩放更改来自代码还是用户无关紧要?
我通过为地图创建自定义缩放按钮来解决此问题。
这是我项目中的代码:
编辑:删除了不必要且一目了然的通用代码
您的变焦控制功能:
function zoomControl(map, div) {
var controlDiv = div,
control = this;
// Set styles to your own pa DIV
controlDiv.style.padding = '5px';
// Set CSS for the zoom in div.
var zoomIncrease = document.createElement('div');
zoomIncrease.title = 'Click to zoom in';
// etc.
// Set CSS for the zoom in interior.
var zoomIncreaseText = document.createElement('div');
// Use custom image
zoomIncreaseText.innerHTML = '<strong><img src="./images/plusBut.png" width="30px" height="30px"/></strong>';
zoomIncrease.appendChild(zoomIncreaseText);
// Set CSS for the zoom out div, in asimilar way
var zoomDecreaseText = document.createElement('div');
// .. Code .. Similar to above
// Set CSS for the zoom out interior.
// .. Code ..
// Setup the click event listener for Zoom Increase:
google.maps.event.addDomListener(zoomIncrease, 'click', function() {
zoom = MainMap.getZoom();
MainMap.setZoom(zoom+1);
// Other Code parts
});
// Setup the click event listener for Zoom decrease:
google.maps.event.addDomListener(zoomDecrease, 'click', function() {
zoom = MainMap.getZoom();
MainMap.setZoom(zoom-1);
});
}
您的初始化函数:
function initializeMap() {
var latlng = new google.maps.LatLng(38.6, -98);
var options = {
zoom : 5,
center : latlng,
mapTypeId : google.maps.MapTypeId.ROADMAP,
// Other Options
};
MainMap = new google.maps.Map(document.getElementById("google-map-canvas"),
options);
// The main part - Create your own Custom Zoom Buttons
// Create the DIV to hold the control and call the zoomControl()
var zoomControlDiv = document.createElement('div'),
zoomLevelControl = new zoomControl(MainMap, zoomControlDiv);
zoomControlDiv.index = 1;
MainMap.controls[google.maps.ControlPosition.RIGHT_TOP].push(zoomControlDiv);
}
希望对你有帮助
var zoomFlag = "user"; // always assume it's user unless otherwise
// some method changing the zoom through API
zoomFlag = "api";
map.setZoom(map.getZoom() - 1);
zoomFlag = "user";
// google maps event handler
zoom_changed: function() {
if (zoomFlag === "user") {
// user zoom
}
}
我想做同样的事情。 我希望找到谷歌地图API内置的一种方法,但至少,你应该能够在初始化地图时将起始缩放级别存储为变量。然后,将getZoom()的结果与它进行比较,以了解它是放大还是缩小。
例如:
map = new google.maps.Map(document.getElementById('map_canvas'), { zoom: 11 });
var previous_zoom = 11;
google.maps.event.addListener(map,'zoom_changed',function(){
if(map.getZoom() > previous_zoom) {
alert('You just zoomed in.');
}
previous_zoom = map.getZoom();
}
我建议使用自定义控件进行放大/缩小,然后在自定义 congrol 上使用事件侦听器:
http://goo.gl/u8gKC
您可以轻松隐藏默认缩放控件:
http://goo.gl/N5HIE
(具体zoomControl
)
- 如何在用户缩放我的网站时修复字体大小(CTRL+'+')
- 区分程序化Bing AJAX地图导航与用户平移/缩放和窗口大小
- 显示图形点的平均值,随着用户缩放而动态修正
- 如何为 jpg 文件创建响应式视口,供用户缩放、滚动和点击
- 如何在谷歌地图中收听用户生成的缩放
- 交换时间和线性缩放取决于用户选择
- 如何等待元标签“;用户可缩放=否”;在安卓系统上做好准备
- 谷歌地图API v3:如何设置缩放级别和地图中心到用户提交的位置
- 谷歌地图watchposition {setzoom()}覆盖用户缩放
- 如何在iOS Web应用程序中访问用户可扩展的缩放状态
- 改变地图类型的缩放变化与用户的鼠标
- 检测用户在传单上发起的平移/缩放操作
- 我们是否有办法对用户缩放事件做出反应
- 缩放/缩放页面上的负载为用户是一样宽看到我的wordpress网站的图片
- 当用户浏览器缩放时,如何处理覆盖
- 如何防止用户使用CTRL &+缩放
- 模拟用户按键缩放屏幕
- 根据用户的机器屏幕尺寸将图像缩放为背景
- 使用jQuery根据用户屏幕大小缩放图像
- 创建增加变量的javascript按钮,以便用户可以有效地缩放页面