0

我目前正在尝试学习 Bing Maps API,并且目前正在尝试构建具有多个引脚的地图,这些引脚可以悬停以显示带有该引脚数据的信息窗口。目前我遇到了一些问题。如果有人可以帮助解决以下几点,那就太好了:

  1. 当我鼠标离开图钉时,信息窗口不会被删除?
  2. 如何使用我在 addPin() 中检索到的数据来填充所需的信息窗口?
  3. 在 createInfoBox() 中,我想在地图移动时隐藏任何活动的信息窗口,但即使地图没有移动,这似乎也会被触发?
  4. 如果我可以做任何改进,请告诉我

jsfiddle: http: //jsfiddle.net/kyllle/vpepD/23/和下面的JS

JS

var dealerMap = {        

        createInfoBox: function(infobox) {

            var instance = this,
                pushpin = infobox;

            // Now create infowindows
            var NewWindow = new Microsoft.Maps.Infobox(pushpin.getLocation(), {
                title: 'title',
                offset: new Microsoft.Maps.Point(-3, pushpin.getHeight() - 5),
                zIndex: 999,
                visible: true
            });

            //Display infowindow
            instance.displayInfoBox(NewWindow, pushpin);

            //Hide infowindow if map is moved - currently gets run without moving map
            //Microsoft.Maps.Events.addHandler(dealerMap.myMap, 'viewchange', instance.hideInfoBox(NewWindow));

        },

        displayInfoBox: function(infobox, pin) {

            var instance = this;

            //Show updated infowindow
            dealerMap.myMap.entities.push(infobox);

            //Mouse out handler to remove window
            Microsoft.Maps.Events.addHandler(pin, 'mouseleave', function() {        
                instance.hideInfoBox(NewWindow);
            });
        },

        hideInfoBox: function(infobox) {

            var instance = this;

            console.log('this was called');
            dealerMap.myMap.entities.remove(infobox);

        },

        addPin: function() {

            var instance = this;

            //make $.ajax json call            
            var response = data.dummy;

            //on success make each pin with returned data
            for (var i = 0, len = response.length; i < len; i++) {    

                var responseItem = response[i],
                    pinLocation = new Microsoft.Maps.Location(responseItem.lat, responseItem.long);                       

                //Create new pin
                var NewPin = new Microsoft.Maps.Pushpin(pinLocation, {
                    icon: 'http://www.kylehouston.com/testing/sportscar_' + responseItem.id +'.png',
                    width: 32,
                    height: 37
                });    

                //Push new pin onto map
                this.myMap.entities.push(NewPin);          

                //Event handlers to show and hide requested infowindow information
                Microsoft.Maps.Events.addHandler(NewPin, 'mouseover', function(e) {
                    console.log(this);
                    dealerMap.createInfoBox(e.target);
                });
            }                      
        },

        init: function() {

            var instance = this;

            var mapOptions = {
                credentials: "AvGoKWSuMorGQb5h4UyyatCBGmGzSZe7-dWQMzXt4qqz6mV_WCC5m-paxvQhednd",
                center: new Microsoft.Maps.Location(37.09024, -95.712891),
                zoom: 5,
                enableClickableLogo: false,
                enableSearchLogo: false
            }

            dealerMap.myMap = new Microsoft.Maps.Map(document.getElementById('mapDiv'), mapOptions);

            //now add some pins
            instance.addPin();           



        }

    }

    dealerMap.init();


});
4

1 回答 1

0

我强烈建议在地图上一次只显示一个信息框。显示多个信息框会挤满地图并导致糟糕的用户体验。它还占用了更多的资源。更好的方法是创建一个信息框,并在您想要显示内容时为每个图钉重复使用它。我写了一篇博客文章,展示了如何在这里做到这一点:http ://rbrundritt.wordpress.com/2011/10/13/multiple-pushpins-and-infoboxes-in-bing-maps-v7/

于 2014-09-17T14:23:28.273 回答