Search code examples
cssscrollbing-mapsinfobox

bing maps infobox with scroll sticks


I'm trying to make sure content inside an infobox popup scrolls so all the info is shown but when I try to scroll using the scrollbar on releasing the mouse button the map sticks to this point as if holding down and panning. Here's some code to reproduce:

    var location = new Microsoft.Maps.Location(0, 0);
    var html = "title<br/>description desc desc"
            + " description desc desc description desc desc"
            + " description desc desc description desc desc"
            + " description desc desc description desc desc"
            + " description desc desc description desc desc"
        ;

    var popupHTML = '<div style="height: 50px; width: 100px; overflow: auto; background: white;">{content}</div>';

    var options = {
        htmlContent: popupHTML.replace('{content}', html),
        visible: true,
    };
    var popup = new Microsoft.Maps.Infobox(location, options);

    map.entities.push(popup);

or alternatively paste the below into the Bing maps SDK under infobox section:

    map.entities.clear(); 
    var infoboxOptions = {title:'Infobox Title', description:'<div style="height:20px; overflow: auto;">Infobox description description description description description description description description description description description description description description description description description description description<div>'}; 
    var defaultInfobox = new Microsoft.Maps.Infobox(map.getCenter(), infoboxOptions );    
    map.entities.push(defaultInfobox);

Then try to scroll down and when you release, the map will be stuck to that position as if you're holding down and panning.

Any suggestions welcome, Thanks!


Solution

  • You must disable the default event handlers!

    Try something like the following in your infobox creation func:

    map.infobox = new Microsoft.Maps.Infobox(center, infoboxOptions);
            map.moveHandler = Microsoft.Maps.Events.addHandler(map, 'mousemove', function (e) {
                        e.handled = true;});
            map.wheelHandler = Microsoft.Maps.Events.addHandler(map, 'mousewheel', function (e) {
                        e.handled = true;});
            Microsoft.Maps.Events.addHandler(map, 'click', function(e) { 
                if (map.infobox) 
                    {map.entities.remove(map.infobox);
                    map.infobox = false;
                    Microsoft.Maps.Events.removeHandler(map.moveHandler);
                    Microsoft.Maps.Events.removeHandler(map.wheelHandler);
                    map.moveHandler = false;
                    map.wheelHandler = false}});