Hello Sajeer,

When I try to use {hover: true} in the SelectFeature definition, the popups appear and dissapear when I hover the mouse over a marker. If I use hover:false, I get the regular functionality - the popups appear/dissapear when I click on them.

This is great... problem is - I would like to use both methods of interaction: when the user hovers over a marker, he gets a small div/popup with minimal information, and if the user clicks on the marker he gets the whole information in a different popup.

From what I've seen, and from your example, there are no special events for mouseOver/mouseOut. It can be achieved with hover true/false. In this case, the only sollution would be to create a different selectControl for the same layer that handles just hover events. I don't know if I can associate different select controls with the same layer, or if I can have two controls active and working at the same time (a previous example I tried with 2 select cotrols on different layers didn't allow the "bottom" select to work).

Here's what I tried so far:

      //markers is a KML layer
       map.addLayer(markers);
      //add the regular select behaviour
       select = new OpenLayers.Control.SelectFeature(markers);
markers.events.on({ "featureselected": onMarkerSelect, "featureunselected": onMarkerUnselect, "visibilitychanged": onMarkerToggle });
       map.addControl(select);
       select.activate();

        //add the hover select control
var hoverSelect = new OpenLayers.Control.SelectFeature(markers, {clickout:true, hover:true, onSelect: tooltipSelect}); map.addControl(hoverSelect);
       hoverSelect.activate();

The behavior is the following: when I hover over an item, tooltipSelect() is executed, but also onMarkerSelect(). It seems the hover:true "jumps" to the select object :)
Any ideas on how to get the behavior I need?

Thanks.


Regards,
Adrian

Sajeer... wrote:
Ok, then replace
selectControl = *new* OpenLayers.Control.SelectFeature(kmlLayer,

{hover: *true*,onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});

with

selectControl = *new* OpenLayers.Control.SelectFeature(kmlLayer,

{ clickout: true, hover: false });

and add this too

kmlLayer.events.on({

"featureselected": function(e) {

onFeatureSelect(e.feature);

},

"featureunselected": function(e) {

onFeatureUnselect(e.feature);

}

});

Regards

Sajeer


On Thu, Jul 16, 2009 at 3:49 PM, Adrian Popa <[email protected] <mailto:[email protected]>> wrote:

    Thank you Sajeer,

    To make it clear for me: you would register the "featureselected"
    event for mouse over? Where do you specify hover:true/hover:false?
    I'd like to be able to keep featureselected for when the user
    actually clicks on the feature - so I'd like to register 2 events
    to generate 2 different popups...

    Regards,
    Adrian


    Sajeer... wrote:
    you can register this function for click event by replacing
    hover:true  with hover:false    *  *
    Regards

    Sajeer



    On Thu, Jul 16, 2009 at 3:38 PM, Adrian Popa
    <[email protected]
    <mailto:[email protected]>> wrote:

        Hello Sajeer,

        How do you register your functions to events so that they are
        executed on mouse over instead of on click? Or is your popup
        created when you click a feature?

        Thanks,
        Adrian


        Sajeer... wrote:
        *

        Hi,

        try this one,

        function

        *onFeatureSelect(feature) {

        selectedFeature = feature;

        popup =

        *new*
        OpenLayers.Popup.FramedCloud("",

        feature.geometry.getBounds().getCenterLonLat(),

        *new* OpenLayers.Size(100,100), "<div style='padding:15px
        5px 5px 10px;'>"+ "<table
        style='font-size:13px;color:red'>"+ "<tr>"+ "<td
        width='40%'>Name</td>"+ "<td width='5%'>:</td>"+
        "<td>"+feature.attributes.label+"</td>"+ "</tr>"+
        "</table></div>", *null*, *true*, onPopupClose);

        feature.popup = popup;

        map.addPopup(popup);

        }

        *function* onPopupClose(evt) {

        selectControl.unselect(selectedFeature);

        }

        *function* onFeatureUnselect(feature) {

        *      *map.removePopup(feature.popup);

        feature.popup.destroy();

        feature.popup = *null*;

        }

        var  kmlLayer = new OpenLayers.Layer.GML(.............);

var selectControl = *new*
        OpenLayers.Control.SelectFeature(kmlLayer,

        {hover: *true*,onSelect: onFeatureSelect, onUnselect:
        onFeatureUnselect});

        map.addControl(selectControl);

        selectControl.activate();


        Regards

        Sajeer


On Thu, Jul 16, 2009 at 3:07 PM, Adrian Popa
        <[email protected]
        <mailto:[email protected]>> wrote:

            Hello Pavel,

            Great idea... However - I would like to keep popups for
            when I click on an item.
            Would it be possible to do something like:

            layer.events.on({ "featureselected": onLocationSelect,
            "featureunselected": onLocationUnselect,  //open regular
            popups
                                              "onMouseOver":
            onLocationMouseOver, "onMouseOut": onLocationMouseOut
             });?

            Problem is - I don't see those kinds of events on my
            layer. These are the event types for a vector layer:
            0 "beforefeatureadded"
            1 "beforefeaturesadded"
            2 "featureadded"
            3 "featuresadded"
            4 "beforefeatureremoved"
            5 "featureremoved"
            6 "featuresremoved"
            7 "beforefeatureselected"
            8 "featureselected"
            9 "featureunselected"
            10 "beforefeaturemodified"
            11 "featuremodified"
            12 "afterfeaturemodified"
            13 "vertexmodified"
            14 "sketchstarted"
            15 "sketchmodified"
            16 "sketchcomplete"
            17 "refresh"
            18 "loadstart"
            19 "loadend"
            20 "loadcancel"
            21 "visibilitychanged"
            22 "move"
            23 "moveend"

            Any idea what the events would be? If they are supported?

            Pavel Iacovlev wrote:
            There many possible ways around this problem.

            One is rewrite/extend your popup code. Popup is triggered on 
mouseover
            and on mouseout popup is hidden. You can style the popup so it looks
            more like a tooltip/label.

            On Thu, Jul 16, 2009 at 2:34 PM, Adrian
            Popa<[email protected]> 
<mailto:[email protected]> wrote:
            Hi,

            Just a quick question - my users want to see the name of the city 
when
            they are hovering over points loaded through KML in a vector layer. 
I
            know this isn't supported, but are there plans to support such 
labels?

            I'm thinking a different strategy might be to override/inherit the
            OpenLayers.Control.MousePosition class and based on coordinate 
changes,
            load the name from the closest KML feature. It doesn't need to be 
too
            accurate, but it can't be an exact match, because the mouse will 
never
            get that close to the KML coordinates.
            However this solution will be costly - because on every mouse move 
you
            would have to go through all the KML items and see which match...

            What are your ideas regarding this subject?

            ---

            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
            [email protected] <mailto:[email protected]>
            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
            [email protected] <mailto:[email protected]>
            http://openlayers.org/mailman/listinfo/users








_______________________________________________
Users mailing list
[email protected]
http://openlayers.org/mailman/listinfo/users

Reply via email to