javascript - Mouse over is not triggered while dragging marker Google Maps API -


in web page, trying use google map in can drag , drop markers around. problem while drag special marker, mouse on , mouse out events of other markers not triggered .

well, understand google map uses following layers: floatpane, overlaymousetarget, floatshadow, overlayimage, overlayshadow, overlaylayer, mappane,

and markers belong overlayimage layer. also, reason why mouse on , out events not triggered because draggable marker "absorbs" events never reach marker behind.

example: have markers m1, m2 , m3. marker m3 draggable. want drag m3 around , when passes on top of m1 , m2 , mouse on events of m1 , m2 triggered.

question 1: in layer draggable object belongs ? (i assume overlaymousetarget).

question 2: can change layer marker belongs ? way able modify it's z-index.

thank time.

this great case of question asking how don't need do. don't want play layers @ all, want monitor drag event , check proximity of marker being dragged other markers.

you won't want trigger events, want call functions attached events.

warning - lots of code ahead

var map = new google.maps.map(document.getelementbyid('map'),{  	zoom: 15,  	center: {lat:44.6478627,lng:-63.6116746}  });  var m1 = new google.maps.marker({  	map: map,  	position: {lat:44.6566246,lng:-63.6202576}  });    var m2 = new google.maps.marker({  	map: map,  	position: {lat:44.6566475,lng:-63.6197212}  });    var m3 = new google.maps.marker({  	draggable:true,  	map: map,  	position: {lat:44.6544724,lng:-63.6296561}  });    //some useful flags  var isdragging = false;  var hoveredmarker = null;    //a tolerance amount - how close dragging marker has to marker in order consider mouseover  //you may need play number achieve effect want  var tolerance = 30;      var methods = {    	fromlatlngtopoint: function(latlng) {  		var topright = map.getprojection().fromlatlngtopoint(map.getbounds().getnortheast());  		var bottomleft = map.getprojection().fromlatlngtopoint(map.getbounds().getsouthwest());  		var scale = math.pow(2, map.getzoom());  		var worldpoint = map.getprojection().fromlatlngtopoint(latlng);  		return new google.maps.point((worldpoint.x - bottomleft.x) * scale, (worldpoint.y - topright.y) * scale);  	},    	onstartdragging: function() {  		isdragging = true;  	},  	  	onstopdragging: function() {  		isdragging = false;  	},    	onmarkermouseover: function(marker) {  		//set hoveredmarker flag marker being hovered  		hoveredmarker = marker;  		  		if(isdragging) {  			//do here when mouse on `marker`, if dragging  			console.log('mouse on while dragging');  		}  		  		//do here when mouse on `marker`, regardless of if dragging or not  		//console.log('mouse over');  	},  	  	onmarkermouseout: function(marker) {  		//set hoveredmarker flag null  		hoveredmarker = null;  		  		if(isdragging) {  			//do here when mouse out `marker`, if dragging  			console.log('mouse out while dragging');  		}  		  		//do here when mouse out `marker`, regardless of if dragging or not  		//console.log('mouse out');  	},  	  	arepointsclose: function(latlng1,latlng2) {	  		var   			p1 = this.fromlatlngtopoint(latlng1),  			p2 = this.fromlatlngtopoint(latlng2);  			  		//if points within `tolerance` return true, otherwise, return false  		return math.abs( p2.x - p1.x ) <= tolerance && math.abs( p2.y - p1.y ) <= tolerance;  	  	},  	  	ondrag: function(e) {    		//it's unlikely you're coordinates of 	m3 ever 100% identical m1 or m2 when dragging,  		//so use maps projection convert latlngs point , allow tolerance ( see methods.arepointsclose() )  		if( methods.arepointsclose(e.latlng,m1.getposition()) ) {  			methods.onmarkermouseover(m1);  		} else if( hoveredmarker === m1 ) {  			methods.onmarkermouseout(m1);  		}  		  		  		if( methods.arepointsclose(e.latlng,m2.getposition()) ) {  			methods.onmarkermouseover(m2);  		} else if( hoveredmarker === m2 ) {  			methods.onmarkermouseout(m2);  		}  	  	}    };    google.maps.event.addlistener(m1,'mouseover',function() { methods.onmarkermouseover(m1); });  google.maps.event.addlistener(m2,'mouseover',function() { methods.onmarkermouseover(m2); });  google.maps.event.addlistener(m1,'mouseout',function() { methods.onmarkermouseout(m1); });  google.maps.event.addlistener(m2,'mouseout',function() { methods.onmarkermouseout(m2); });    google.maps.event.addlistener(m3,'dragstart',function() { methods.onstartdragging(); });  google.maps.event.addlistener(m3,'dragend',function() { methods.onstopdragging(); });    google.maps.event.addlistener(m3,'drag',function(event) { methods.ondrag(event); });
html,body { height: 100%; }  #map { height: 100%; }
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=drawing,geometry"></script>  <div id="map"></div>


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -