Сделать так, чтобы виртуальная земля отображалась при щелчке, а не при наведении? - PullRequest
7 голосов
/ 26 ноября 2008

Можно ли сделать так, чтобы дисплей инфобокса кнопки виртуальной Земли реагировал на нажатие вместо нажатия мыши?

В настоящее время я использую что-то вроде этого:

...

  var pin = new VEShape(
                  VEShapeType.Pushpin,
                  [location]
                );
  pin.SetCustomIcon(icon_url);
  pin.SetTitle(title);
  pin.SetDescription(info_window_template);
  map.AddShape(pin);

  document.getElementById(pin.GetPrimitive().iid).onmouseover = EventHandlerOnMouseOver;
}

var EventHandlerOnMouseOver = function(e) {
    // Handle content loading...
}

...

Однако, если я пытаюсь изменить onmouseover на onclick, VE подхватывает onclick и полностью отключает инфобокс.

1 Ответ

1 голос
/ 22 апреля 2009

Вы можете выполнить то, что описываете, используя события ... обратите внимание, что я использую Virtual Earth 6.2.

Хитрость заключается в подавлении события onmouseover и подписке на событие onclick. Когда вы выяснили, нажал ли пользователь на фигуру или нет, вы можете вызвать метод ShowInfoBox в элементе управления карты, чтобы заставить его отображать информационное окно.

А вот и кодез =)

// Begin by supressing the onmouseover event. Returning true 
// from an event handler disables the default Virtual Earth action
map.AttachEvent('onmouseover', function(e) { if(e.elementID) return true; });

// Subscribe to the onclick event and react whenever we get an element id
map.AttachEvent("onclick", function(e) {

    // elementID is null when someone clicks on the map and not on a shape
    if(e.elementID) {

        var shape = map.GetShapeByID(e.elementID); 
        if(shape) map.ShowInfoBox(shape);
    } 
});

Обратите внимание, что информационный блок будет отображаться, даже если вы щелкните правой кнопкой мыши на форме; чтобы избежать этого, вы должны посмотреть на свойства leftMouseButton или rightMouseButton объекта .

Ссылки:

...