2010-07-17 7 views
0

У меня есть приложение JavaScript, которое позволяет пользователям перемещать фигуры вокруг области рисования, и я использую библиотеку Google Closure. В FF/Safari все хорошо. В IE, так как графические элементы перемещаются, они выбраны в браузере (как подвижный элемента и другие элементы), показывая цветную пунктирную фон вокруг некоторых элементов непредсказуемы:Отключение выбора графического элемента в VML и Internet Explorer

http://i.imgur.com/O33MN.png

Как я могу выключить это поведение в IE?

+0

Не могли бы вы рассказать код, который вы используете для создания графики и кода, связанного с обработчиками событий. – Maz

ответ

0

После некоторых экспериментов я нашел частичный ответ.

Класс goog.events.Event имеет метод preventDefault. Просто обработайте событие MOUSEMOVE на элементе графики. Затем вызовите метод событий # preventDefault:

var element = ... // some element 
var graphics = goog.graphics.createGraphics('400', '300'); 

var fill = new goog.graphics.SolidFill('#00ff00', 0.5); 
var stroke = new goog.graphics.Stroke(1, 'black'); 

graphics.drawEllipse(60, 60, 10, 10, stroke, fill); 
graphics.drawEllipse(90, 90, 10, 10, stroke, fill); 

graphics.render(element); 

goog.events.listen(graphics.getElement(), goog.events.EventType.MOUSEMOVE, function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
}); 

При нажатии на кнопку внутри графического элемента, затем тащит больше не выбирает круги. Опять же, это необходимо только для IE.

Одна незначительная проблема остается. Нажатие мыши за пределы области графики, а затем перетаскивание курсора в графическую область приводит к выбору всей выбранной области или к области и графическим элементам.

2

Трудно диагностировать вашу проблему по предоставленной информации. IE VML не очень хорошо поддерживается и, следовательно, довольно глючит.

В чертеже DojoX я столкнулся с подобной проблемой при рисовании линий. У VML есть ошибка, в которой вы не можете одновременно перетаскивать и изменять размер, но вы можете одновременно перетаскивать и создавать, поэтому я перерисовываю строку, я ее не преобразовываю.

Кроме того, я не прикрепляю события click/drag к фигуре, я прикрепляю их к основному основному контейнеру, обнаруживаю идентификатор в событии mousedown, затем отслеживаю mousemove и перемещаю фигуру с помощью setTransform on контейнер формы.

По существу, из-за слабой поддержки VML, вы должны быть готовы попробовать совершенно разные вещи, чтобы заставить его работать.