IE拖动时平滑地图平移

时间:2010-02-02 06:00:27

标签: javascript performance internet-explorer drag smoothing

我试图平滑我使用javascript构建的地图应用程序的性能。我最初使用

实现了拖动平底锅
  • onmousedown事件
  • 的OnMouseMove
  • onmouseup

然而在IE浏览器中感觉真的很迟钝,看起来当你快速移动光标时,地图不会更新它的位置,直到你停止移动。

我将代码转换为使用本机IE事件

  • ondragstart
  • ondrag当
  • ondragend

使用这些事件时性能好多了但是我似乎无法使用标准的css属性设置鼠标光标。我只能将光标设置为一些不是我想要的预定义光标。

所以我的问题是。如何使用第一组事件平滑IE中的拖动,或者如何使用本机事件设置自定义光标。

编辑:代码示例

代码非常简单。即使我删除了加载新磁贴的逻辑(即只有容器被移动),它仍然感觉笨重。下面是平移功能:

// the "this" object refers to the div containing all the tile layers.
function movemap(e) 
{ 
   e = e || window.event;
   var dx = this.mouseX - e.clientX; 
   var dy = this.mouseY - e.clientY; 

   if (dx !== 0 || dy !== 0) {
      this.style.left = parseInt(this.style.left) + dx + 'px'; 
      this.style.top = parseInt(this.style.top) + dy + 'px'; 
      this.mouseX = e.clientX; 
      this.mouseY = e.clientY;
   }
} 

1 个答案:

答案 0 :(得分:1)

很难说,没有代码示例,是什么让你的拖动事件变得缓慢。

缓慢的影响可能是由于您在事件执行中运行的一些繁重的操作。浏览器中的事件系统非常有趣。这是同步的。这意味着,在当前执行完成之前,不会再次触发事件。

这意味着,您有两种可能:1。优化事件内部的代码,以便减少CPU时间或2.使您的事件异步并实现您自己的互斥/信号逻辑。

您可以使用setTimeout功能执行第二个操作。如果你执行setTimeout,((代码),1),事件将异步继续,因此将调度下一个事件,而无需等待代码完成。那么,请提前注意,在这种情况下,你必须开始考虑锁定和排队。通过排队我的意思是,将所有调度的事件排队以备将来使用。

很久以前,我还做了一些异步事件调度,因为代码执行很繁重。它对我有用。也许它对你也有用。