Javascript 禁用VML和Internet Explorer中的图形元素选择

Javascript 禁用VML和Internet Explorer中的图形元素选择,javascript,internet-explorer,google-closure,vml,Javascript,Internet Explorer,Google Closure,Vml,我有一个JavaScript应用程序,可以让用户在绘图区域中移动形状,而我正好使用了Google闭包库。在FF/Safari中,一切都很好。在IE中,当图形元素移动时,浏览器会选择它们(移动元素和其他元素),以不可预测的方式在某些元素周围显示彩色虚线背景: 如何在IE中关闭此行为?根据提供的信息很难诊断您的问题。IE VML没有得到很好的支持,因此存在相当多的bug 在DojoX绘图中,我在绘制线条时遇到了类似的问题。VML有一个错误,你不能同时拖动和调整大小,但是,你可以同时拖动和创建,所以

我有一个JavaScript应用程序,可以让用户在绘图区域中移动形状,而我正好使用了Google闭包库。在FF/Safari中,一切都很好。在IE中,当图形元素移动时,浏览器会选择它们(移动元素和其他元素),以不可预测的方式在某些元素周围显示彩色虚线背景:


如何在IE中关闭此行为?

根据提供的信息很难诊断您的问题。IE VML没有得到很好的支持,因此存在相当多的bug

在DojoX绘图中,我在绘制线条时遇到了类似的问题。VML有一个错误,你不能同时拖动和调整大小,但是,你可以同时拖动和创建,所以我重新绘制了线,我不转换它

此外,我不会将单击/拖动事件附加到形状,而是将它们附加到整个主容器,在mousedown事件上检测id,然后跟踪mousemove并通过在形状容器上执行setTransform来移动形状


基本上,由于VML支持薄弱,您必须愿意尝试完全不同的方法才能使其工作。

经过一些实验,我找到了部分答案

该类有一个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上是必要的


还有一个小问题。在图形区域外按鼠标,然后将光标拖动到图形区域中,将导致选中整个区域,或同时选中区域和图形元素。

请您提供用于创建图形的代码和处理事件处理程序的代码。