3

Я построил карту google, где маркеры отскакивают от опрокидывания некоторых внешних ссылок. Я создал эту короткую функцию, чтобы перебросить маркер:Карты Google - маркеры мигают перед отскоком onmouseover

function makeBounce(marker) { 
     marker.setAnimation(google.maps.Animation.BOUNCE); 
     setTimeout(function(){ marker.setAnimation(null); }, 750); 
} 

, и я использую это, чтобы выполнить его:

<a onmouseover="javascript:map.panToBounds(bounds);makeBounce(markersArray[1]);" href="javascript:google.maps.event.trigger(markersArray[1], 'click');">Marker name</a> 

Что я заметил, что как раз перед маркерами отказов они мигают , Это почти незаметно, но этого достаточно, чтобы быть очень раздражающим (особенно потому, что собственный блог Google, создающий отскоки от маркеров, очень плавный: http://googlegeodevelopers.blogspot.com/2010/12/map-markers-they-move.html).

Я создал здесь скрипт JS, который демонстрирует его: http://jsfiddle.net/RmDuz/ (сверните по синим ссылкам, чтобы увидеть проблему).

Я пробовал в FF9 и Chrome 16, и проблема в обоих.

Любые мысли?

Проблема заключается в том, что изображение маркера динамически загружается непосредственно перед отказом, потому что в Chrome я вижу поле «нет изображения» перед тем, как маркер снова появляется, а затем отскакивает.

EDIT: Я никогда изменил код, чтобы сделать использование карты API слушателем вместо яваскрипта функции, в надежде, что код API может быть немного более эффективным, но никакой радости :(

google.maps.event.addListener(marker, 'dblclick', (function(marker, i) { 
     return function() { 
      marker.setAnimation(google.maps.Animation.BOUNCE); 
      setTimeout(function(){ marker.setAnimation(null); }, 750); 
     } 
    })(marker, i)); 

Я использую DblClick, потому что я не хочу MouseOver, что означало бы анимация была вызвана, когда маркеры перевернулась я только хочу анимация срабатывает, когда внешние ссылки перевернулась:.

<a onmouseover="javascript:google.maps.event.trigger(markersArray[1], 'dblclick');">Link name</a> 

Я обновил JS Fiddle, чтобы отразить это: http://jsfiddle.net/RmDuz/1/

ответ

7

Я столкнулся с этой проблемой. Оказывается, установка MarkerOptionsoptimized: false или draggable: true остановит маркеры от мигания перед их оживлением.

Не-оптимизированный маркер:

// Create a non-optimized marker 
var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(39.107182, -123.501868), 
    map: map, 
    optimized: false // stops the marker from flashing 
}); 

// Bounce once 
marker.setAnimation(google.maps.Animation.BOUNCE); 
marker.setAnimation(null); 

перетаскиваемый маркер:

// Create a draggable marker 
var draggableMarker = new google.maps.Marker({ 
    position: new google.maps.LatLng(39.107182, -123.501868), 
    map: map, 
    draggable: true // stops the marker from flashing 
}); 

// Bounce once 
draggableMarker.setAnimation(google.maps.Animation.BOUNCE); 
draggableMarker.setAnimation(null); 

Если вы посмотрите на Google example, вы увидите, что они устанавливают draggable: true.

+1

Именно так, спасибо! Вы могли бы подумать, что мигание будет означать отсутствие оптимизации, но там вы идете ... – melat0nin

+1

обходной путь не идеальный, до сих пор не работает :( –

+0

Это решение более 18 месяцев назад. Возможно, в новой версии версии API Карт Google. Сообщите, если вы найдете решение! – lazd

Смежные вопросы