[OpenLayers-Users] Displaying a popup on mouse over AND a different popup on click. [SOLVED]

Esteban olm esteban.olm at gmail.com
Thu Aug 13 13:09:45 EDT 2009


Hi,

I'm sorry, but I have a problem.

When I implement this, I can "pan" the map, and when I go over a marker, A
popup appears, and when I go out of the marker, the popup disappear.

That's ok, but after the popup has appear an disappear, now I can not "pan"
the map.
Maybe the popup has deactivated something.
Can anyone help me?
Thanks
  Esteban Olm


after a popup is how

2009/8/5 Adrian Popa <adrian_gh.popa at romtelecom.ro>

> Following Alexandre's suggestion, here's what I did:
>
> ... //in init()
> map.addLayer(markers);
> //add the main select (for regular popups)
> select = new OpenLayers.Control.SelectFeature(markers, {toggle:true,
> clickout: true});
> markers.events.on({ "featureselected": onMarkerSelect,
> "featureunselected": onMarkerUnselect});
>
> //add the second select for tooltips:
> var highlightCtrl = new OpenLayers.Control.SelectFeature(markers, {
> hover: true, highlightOnly: true, renderIntent: "temporary",
>                    eventListeners: { featurehighlighted: tooltipSelect,
> featureunhighlighted: tooltipUnselect } });
>
> //the order in which you add these lines seems to matter!
> map.addControl(highlightCtrl);
> map.addControl(select);
> highlightCtrl.activate();
> select.activate();
>
> ...//support functions
> var lastFeature = null;
> var tooltipPopup = null;
>
> function tooltipSelect(event){
>        var feature = event.feature;
>        var selectedFeature = feature;
>        //if there is already an opened details window, don\'t draw the
> tooltip
>        if(feature.popup != null){
>            return;
>        }
>        //if there are other tooltips active, destroy them
>        if(tooltipPopup != null){
>            map.removePopup(tooltipPopup);
>            tooltipPopup.destroy();
>            if(lastFeature != null){
>                delete lastFeature.popup;
>                tooltipPopup = null;
>            }
>        }
>        lastFeature = feature;
>        var tooltipPopup = new OpenLayers.Popup("activetooltip",
>                    feature.geometry.getBounds().getCenterLonLat(),
>                    new OpenLayers.Size(80,12),
>                    "&nbsp;"+feature.attributes.name,
>                    true );
>         //this is messy, but I'm not a CSS guru
>        tooltipPopup.contentDiv.style.backgroundColor='ffffcb';
>        tooltipPopup.closeDiv.style.backgroundColor='ffffcb';
>        tooltipPopup.contentDiv.style.overflow='hidden';
>        tooltipPopup.contentDiv.style.padding='3px';
>        tooltipPopup.contentDiv.style.margin='0';
>        tooltipPopup.closeOnMove = true;
>        tooltipPopup.autoSize = true;
>        feature.popup = tooltipPopup;
>        map.addPopup(tooltipPopup);
>    }
>    function tooltipUnselect(event){
>        var feature = event.feature;
>        if(feature != null && feature.popup != null){
>            map.removePopup(feature.popup);
>            feature.popup.destroy();
>            delete feature.popup;
>            tooltipPopup = null;
>            lastFeature = null;
>        }
>    }
>
>    function onMarkerSelect(event) {
>        //unselect any previous selections
>        tooltipUnselect(event);
>        var feature = event.feature;
>        var selectedFeature = feature;
>        var popup = new OpenLayers.Popup.FramedCloud("activeAlarm",
>                    feature.geometry.getBounds().getCenterLonLat(),
>                    new OpenLayers.Size(100,100),
>                    "Loading...<img
> src='http://$server/map/symbols/ajax-loader.gif' border=0>",
>                    null, true, onMarkerPopupClose );
>        feature.popup = popup;
>        popup.setOpacity(0.7);
>        map.addPopup(popup);
>        //call ajax to get the data
>        loadDetails(feature.attributes.description);
>    }
>    function onMarkerUnselect(event) {
>        var feature = event.feature;
>        if(feature.popup) {
>            map.removePopup(feature.popup);
>            feature.popup.destroy();
>            delete feature.popup;
>        }
>    }
>    function onMarkerPopupClose(evt) {
>        select.unselectAll();
>    }
> I hope this helps others trying to add this feature.
>
> Thanks again for your help.
>
> Regards,
> Adrian
>
> Alexandre Dube wrote:
> > Hi Adrian,
> >
> >  Take a look at this example (1).  You can use 2 SelectFeature
> > controls for what you need, one with hover:true and
> > highlightOnly:true, the other with hover false.  The first one won't
> > actually select the feature and you can register 3 kinds of
> > "highlight" events (see the source) to display your small div/popup.
> >
> > Hope this helps,
> >
> > Alexandre
> >
> > (1) http://openlayers.org/dev/examples/highlight-feature.html
> >
> > Adrian Popa wrote:
> >> Hello everyone,
> >>
> >> This is sort of a repeat message of "Re: [OpenLayers-Users]
> >> Labels/Tooltips on mouse over a Vector layer" - but with a slightly
> >> different idea.
> >>
> >> Problem: I want to display a small div/popup with the marker's name
> >> when the user hovers his mouse over the location, and I want to
> >> display a bigger popup when the user actually clicks on the location.
> >>
> >> Current status:
> >> * I can use {hover: true} to register
> >> featureselected/featureunselected when I hover over a marker instead
> >> on when I click on the maker.
> >> * I haven't found any events that could differentiate between hover
> >> and click
> >>
> >> I'm thinking I could register my select control with hover: true and
> >> allow featureselected to execute the same function for both when I
> >> click on the makrer as well as when I hover over the marker. I would
> >> like to know if there's any way to find out in the event inside the
> >> function if the user clicked or not his mouse. Depending on this, I
> >> would show one popup or the other.
> >>
> >> Something like:
> >>
> >> select = new OpenLayers.Control.SelectFeature(markers,
> >> {clickout:true, hover:true});
> >>         markers.events.on({ "featureselected": onMarkerSelect,
> >> "featureunselected": onMarkerUnselect, "visibilitychanged":
> >> onMarkerToggle });
> >>         map.addControl(select);
> >>         select.activate();
> >>
> >> function onMarkerSelect(event){
> >>     var feature = event.feature;
> >>     //find out if the user clicked or not
> >>     var clicked = event.*findAWayToSeeIfTheUserClicked()*;
> >>     if(clicked){
> >>        //show larger popup
> >>     }
> >>     else{
> >>        //show smaller popup
> >>     }
> >> }
> >>
> >> Suggestions are welcome.
> >>
> >> Thanks,
> >> Adrian
> >> ------------------------------------------------------------------------
> >>
> >> _______________________________________________
> >> Users mailing list
> >> Users at openlayers.org
> >> http://openlayers.org/mailman/listinfo/users
> >>
> >
> >
>
>
> --
> ---
> Adrian Popa
> NOC Division
> Network Engineer
> Divizia Centrul National de Operare Retea
> Departament Transport IP & Metro
> Compartiment IP Core & Backbone
> Phone: +40 21 400 3099
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20090813/c337c23a/attachment.html


More information about the Users mailing list