Show context menu on-click (marker)
I have this code for context menu and it's working fine
google.maps.event.addListener(map, 'rightclick', function(e)
{
// start buy hiding the context menu if its open
contextMenu.hide();
var mapDiv = $(map.getDiv()),
x = e.pixel.x,
y = e.pixel.y;
// save the clicked location
clickedLatLng = e.latLng;
// adjust if clicked to close to the edge of the map
if ( x > mapDiv.width() - contextMenu.width() )
x -= contextMenu.width();
if ( y > mapDiv.height() - contextMenu.height() )
y -= contextMenu.height();
// Set the location and fade in the context menu
contextMenu.css({ top: y, left: x }).fadeIn(100);
});
My question is why this isn't working, the same thing but click is now startMarker *click*?
google.maps.event.addListener(startMarker, 'click', function(e) {
// start buy hiding the context menu if its open
contextMenu.hide();
var mapDiv = $(map.getDiv()),
x = e.pixel.x,
y = e.pixel.y;
// save the clicked location
clickedLatLng = e.latLng;
// adjust if clicked to close to the edge of the map
if ( x > mapDiv.width() - contextMenu.width() )
x -= contextMenu.width();
if ( y > mapDiv.height() - contextMenu.height() )
y -= contextMenu.height();
// Set the location and fade in the context menu
contextMenu.css({ top: y, left: x }).fadeIn(100);
});
And th开发者_运维知识库e rest of the code
// Create the context menu element
var contextMenu = $(document.createElement('ul')).attr('id', 'contextMenu');
// Fill our context menu with links
contextMenu.append(
'<li><a href=\"#startMenu\">Start</a></li>' +
'<li><a href=\"#stopMenu\">End</a></li>'
);
// Disable the browser context menu on our context menu
contextMenu.bind('contextmenu', function() { return false; });
// Append it to the map object
$(map.getDiv()).append(contextMenu);
// Set some events on the context menu links
contextMenu.find('a').click( function()
{
// fade out the menu
contextMenu.fadeOut(75);
// The link's href minus the #
var action = $(this).attr('href').substr(1);
switch (action) {
case 'startMenu':
$.get('something1.php', method1);
break;
case 'stopMenu':
$.get('something2.php', method2);
break;
}
return false;
});
I got to activate the context menu right click on the map and mark, steps:
1) Create a new MapCanvasProjection to use fromLatLngToContainerPixel function:
overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);
2) For Each Marker include RightClick Listener:
google.maps.event.addListener(marker, 'rightclick', function() {
google.maps.event.trigger(map, 'rightclick', this);
});
3) Replace the RightClick Listener Map with:
g.event.addListener(this.theMap, 'rightclick', function(e)
{
try {
var lpx = overlay.getProjection().fromLatLngToContainerPixel(e.getPosition());
var latLng_r=e.getPosition();
} catch(err) {
var lpx=e.pixel;
var latLng_r=e.latLng;
}
// Shorthand some stuff
var mapDiv = $(self.theMap.getDiv()),
menu = self.theMenu,
x = lpx.x,
y = lpx.y;
// Hide the context menu if its open
menu.hide();
// Save the clicked location
self.clickedLatLng = latLng_r;
// Adjust the menu if clicked to close to the edge of the map
if ( x > mapDiv.width() - menu.width() )
x -= menu.width();
if ( y > mapDiv.height() - menu.height() )
y -= menu.height();
// Set the location and fade in the context menu
menu.css({ top: y, left: x }).fadeIn(200);
});
// Hide context menu on several events
$.each('click dragstart zoom_changed maptypeid_changed center_changed'.split(' '), function(i,name){
g.event.addListener(self.theMap, name, function(){ self.theMenu.hide(); });
});
}
Marker event (e) does not return a pixel object or a latLng object (unlike a map event) - it only returns x & y coordinates of the event - so the following lines in your code will not work for the marker
x = e.pixel.x,
y = e.pixel.y;
clickedLatLng = e.latLng;
To get coordinates you will need to replace the lines above with
x=e.x
y=e.y
You will not be able to get latLng object from clicking on the marker. I suppose best way to get that is to read the object from the property of the marker itself.
clickedLatLng = startMarker.getPosition()
精彩评论