我ng-map
用来在我的 Angular 应用程序中显示谷歌地图,但他很可能是一个直接的 JS 问题(甚至只是 CSS?)。
如何实现响应式设计,以便我的地图在不同的显示尺寸(无论是桌面/移动设备,还是只是用户调整浏览器页面大小)上看起来都很好?
这个页面做到了,但它使用 I 帧并且只有一个静态地图,而我将在运行时更新我的地图(定期跟踪)。
我对这一切都很陌生,所以我希望我可以理解地表达我的问题。
我ng-map
用来在我的 Angular 应用程序中显示谷歌地图,但他很可能是一个直接的 JS 问题(甚至只是 CSS?)。
如何实现响应式设计,以便我的地图在不同的显示尺寸(无论是桌面/移动设备,还是只是用户调整浏览器页面大小)上看起来都很好?
这个页面做到了,但它使用 I 帧并且只有一个静态地图,而我将在运行时更新我的地图(定期跟踪)。
我对这一切都很陌生,所以我希望我可以理解地表达我的问题。
按照建议使用 CSS 查询来调整 Google 地图非常容易。响应式地图的棘手部分是当您的地图上有标记、多边形或任何其他元素时。然后你必须添加一个事件监听器并操纵你的地图的行为。我在 Jsfiddle 上创建了一个完整的示例,尝试创建一个简单的 Angular.js 应用程序。
我为标记附加了一个主地图和一个事件侦听器。此外,另一个事件侦听器正在处理地图的大小调整。
//resize function add bounds to fit the markers
google.maps.event.addDomListener(window, "resize", function() {
var bound = new google.maps.LatLngBounds();
for(var i in $scope.markers)
{
bound.extend($scope.markers[i].getPosition());
}
$scope.map.fitBounds(bound);
});
最不重要的是,您将看到动态创建的地图的网格视图和一些用于操作其视图的 CSS 样式。
好问题。
您需要使用 CSS 媒体查询的组合来设置您希望地图所在的 div 的断点(这里有很多屏幕尺寸http://screensiz.es/phone)和 google maps API 来监听和响应调整大小事件。
如果您为地图设置了一个中心,那么它在加载时将始终是窗口的中心。但是,如果您想监听窗口调整大小然后重新居中地图,您可以使用一些基本的谷歌地图 APIv3 方法来计算中心然后重置它。
这是一个要点,其中包含您所追求的工作示例。我在上面Sai Ram Sudheer的回答中加入了一些媒体查询,只是为了举例(在这种情况下,地图占据了整个屏幕,所以它们对于那么大的地图并不重要)。
计算和重新设置中心所需的实际代码只有几行(查看 map.js 文件)
https://gist.github.com/markthethomas/5da15a050f560cc58d4f
这只是与调整大小相关的代码。如果您想对标记和边界做更多的事情,您必须编写函数来确定center
您的程序和/或参数的含义(即框架中适合多少标记,应该显示哪些标记等)
// create a variable to hold center
var center;
// calculate the center with getCenter
function calculateCenter() {
center = map.getCenter();
}
// Add an event listener that calculates center on idle
google.maps.event.addDomListener(map, 'idle', function() {
calculateCenter();
});
// Add an event listener that calculates center on resize
google.maps.event.addDomListener(window, 'resize', function() {
map.setCenter(center);
});
希望这会有所帮助!
您可以使用媒体查询来执行此操作,请考虑您的地图 div 与类地图
css:考虑您希望您的 div 与设备的 div 宽度居中对齐
// show maps in a div with width 600px when you're on a big screen
//and div width of 160px in a device of 320px
@media screen and (min-width: 1200px) {
.maps{
width:600px;
}
}
@media screen and (max-width: 320px) {
.maps{
width:160px;
}
}
这是常见设备断点的列表
/* Smartphones (portrait and landscape) ----------- */
@media only screen and (min-device-width : 320px) and (max-device-width : 480px) {
/* Styles */
}
/* Smartphones (landscape) ----------- */
@media only screen and (min-width : 321px) {
/* Styles */
}
/* Smartphones (portrait) ----------- */
@media only screen and (max-width : 320px) {
/* Styles */
}
/* iPads (portrait and landscape) ----------- */
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) {
/* Styles */
}
/* iPads (landscape) ----------- */
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) {
/* Styles */
}
/* iPads (portrait) ----------- */
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) {
/* Styles */
}
/**********
iPad 3
**********/
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) and (-webkit-min-device-pixel-ratio : 2) {
/* Styles */
}
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) and (-webkit-min-device-pixel-ratio : 2) {
/* Styles */
}
/* Desktops and laptops ----------- */
@media only screen and (min-width : 1224px) {
/* Styles */
}
/* Large screens ----------- */
@media only screen and (min-width : 1824px) {
/* Styles */
}
/* iPhone 4 ----------- */
@media only screen and (min-device-width : 320px) and (max-device-width : 480px) and (orientation : landscape) and (-webkit-min-device-pixel-ratio : 2) {
/* Styles */
}
@media only screen and (min-device-width : 320px) and (max-device-width : 480px) and (orientation : portrait) and (-webkit-min-device-pixel-ratio : 2) {
/* Styles */
}
对于谷歌地图 V3,您将需要触发调整大小事件,该事件用于当带有地图的 div 更改大小时。
google.maps.event.trigger(map, "resize");
这里是事件参考。
您可以通过检查此答案在页面更改时触发调整大小事件。
基本上,您只需让 div 响应大小(可能使用基于百分比的大小),然后要求地图自行调整大小。
希望这有帮助!