【问题标题】:Google Maps API: max-width谷歌地图 API:最大宽度
【发布时间】:2015-04-05 02:16:02
【问题描述】:

我在尝试修复 Google Maps API for javascript 上的垂直条带问题时遇到问题。

事实上,我只能访问由 CRM 自动加载的 jQuery。

事实上,我需要为我的 Map div (#map-canvas) 中的所有 img 标签将 max-width 属性设置为 none

如果我直接从 Firefox 工具编辑 HTML 代码,这可以工作,但我找不到自动完成此操作的方法。

我可以访问的代码如下所示:

var mymap;

jQuery.Class("MapView",{
    initialize:function(){
    var mapOptions = {
        center: { lat: 45.447541, lng: 11.7451883},
        zoom: 14
    };
    return new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
    }
},{});

jQuery(document).ready(function(){
    mymap = MapView.initialize();
});

$(window).bind("load", function() {
    $('#map-canvas').find('img').css('max-width: none');
    $("#map-canvas").hide().fadeIn('fast');
});

我尝试了一堆其他在线教程,但我无法解决这个问题。

有没有人知道如何让我摆脱困境?

谢谢, 里卡多

编辑: 所以,这是我到目前为止的完整代码:

var mymap;
var mymap_markers = [];

jQuery.Class("MapView",{
    registerOnChangeEventOfSourceModule: function () {
        jQuery('#sourceModule').on('change', function (e) {
            jQuery('#picklistFields').find('option').remove().end().append('<option value="--">--</option>').val('--');

            var element = jQuery(e.currentTarget);
            var params = {};
            var sourceModule = element.val();

            params = {
                'module': 'Map',
                'action': "GetCVAjax",
                'mode': "changeModule",
                'sourceModule': sourceModule
            };

            AppConnector.request(params).then(
                function (data) {
                    if (data) {
                        jQuery.each(data.result.options, function (i, item) {
                            var o = new Option(item, i);
                            jQuery(o).html(item);
                            jQuery("#picklistFields").append(o);
                            jQuery("#picklistFields").trigger('liszt:updated');
                        });
                    }
                },
                function (jqXHR, textStatus, errorThrown) {
                    alert(textStatus);
                }
            );
        });
    },

    registerOnChangeEventOfCustomView: function () {
        jQuery('#picklistFields').on('change', function (e) {
            var element = jQuery(e.currentTarget);
            var params = {};
            var cvid = element.val();
            var module = jQuery('#sourceModule').val();

            params = {
                'module': 'Map',
                'action': "GetCVAjax",
                'mode': "getMarkers",
                'sourceModule': module,
                'cvid': cvid
            };

            for (var i = 0; i < mymap_markers.length; i++) {
                mymap_markers[i].setMap(mymap);
            }
            mymap_markers = [];

            AppConnector.request(params).then(
                function (data) {
                    if (data) {
                        jQuery.each(data.result, function (i, item) {
                            var myLatlng = new google.maps.LatLng(item['coords']['lat'],item['coords']['lng']);
                            var popupcontentCV = "<table class=\"table table-condensed table-striped table-bordered\"><tr><td colspan=\"2\"><strong>"+item['title']+"</strong></td></tr>";

                            jQuery.each(item['data'], function (label, value){
                                popupcontentCV += "<tr><td>"+app.vtranslate(label,module)+"</td><td>"+value+"</td></tr>";
                            });
                            popupcontentCV += "</table>";

                            var infowindow = new google.maps.InfoWindow({
                                content: popupcontentCV,
                                maxWidth: 315,
                                maxHeight: 550
                            });

                            var marker = new google.maps.Marker({
                                position: myLatlng,
                                map: mymap,
                                title: item['data']['title']
                            });

                            mymap_markers.push(marker);

                            google.maps.event.addListener(marker, 'click', function() {
                                infowindow.open(mymap,marker);
                            });
                        });
                    }
                },
                function (jqXHR, textStatus, errorThrown) {
                    alert(textStatus);
                }
            );
        });
    },

    initialize:function(){
        var mapOptions = {
          center: { lat: 45.447541, lng: 11.7451883},
          zoom: 14
        };

        return new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
    }
},{});

jQuery(document).ready(function(){
    mymap = MapView.initialize();
    MapView.registerOnChangeEventOfSourceModule();
    MapView.registerOnChangeEventOfCustomView();
});

google.maps.event.addListener(mymap, 'idle', function () {
    $('#map-canvas img').css('max-width', 'none');
});
/*
$(window).bind("load", function() {
    $('#map-canvas').find('img').css('max-width: none');
    $("#map-canvas").hide().fadeIn('fast');
});*/

【问题讨论】:

  • 请问垂直带问题是什么?没有理由覆盖地图 CSS。
  • @MrUpsidown,很多地方都报告了这个问题,比如这里:stackoverflow.com/questions/17050808/…。我必须覆盖地图 CSS,因为正如我所说,我无权访问 CRM 的任何其他部分,而且我知道某处属性“max-width: 95%”适用于所有 img 元素(因此,也到地图上),导致问题。
  • 那么您尝试了哪些 CSS 规则? #map-canvas img { max-width: none; }?
  • @MrUpsidown,我试着像 sn-p 中的最后一个函数一样。对于 map-canvas div 下的所有 img 实体,我需要将 max-width 设置为 none。可悲的是,如果我愿意,这些样式似乎不适用。全局设置也不起作用。这有点像我的操作后 img 样式被覆盖了。顺便说一句, $('#map-canvas').find('img') 返回了很多 img 实体,所以当我执行 .css(...) 时它们已经存在了
  • 没有看到您的编辑。是的,我试过了。

标签: javascript jquery css google-maps-api-3


【解决方案1】:

尝试使用 CSS 规则或使用 jQuery:

CSS

#map-canvas img {
    max-width: 100%;
}

jQuery

google.maps.event.addListenerOnce(map, 'idle', function () {
    $('#map-canvas img').css('max-width', '100%');
});

我不确定您是否应该将max-width 设置为none100%。尝试两者。如果不能立即使用,可以尝试使用!important 编写您的 CSS 规则。

对于 jQuery 版本,我在地图 idle 事件监听器中添加了 css() 函数(因此您确定地图已加载并准备就绪)。

编辑

我无法测试你的代码,但你可以试试这个方法:

jQuery(document).ready(function () {

    mymap = MapView.initialize();

    google.maps.event.addListenerOnce(mymap, 'idle', function () {
        $('#map-canvas img').css('max-width', '100%');
    });

    MapView.registerOnChangeEventOfSourceModule();
    MapView.registerOnChangeEventOfCustomView();
});

【讨论】:

  • 我试过这个。同样的结果。我用它代替了这个:$(window).bind("load", function() {
  • 请将您的完整代码粘贴到您的问题中。
  • 完成,我在问题中发布了它
  • 查看我的编辑。也许在事件监听器中做一个console.log 以确保它到达那里。
  • 我这样做了。它确实注册了侦听器,并且在地图空闲时执行它。但是,地图内的 img 标签仍然缺少 max-width 属性。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
相关资源
最近更新 更多