1

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

  • onmousedown
  • onmousemove
  • onmouseup

但是在 IE 中感觉非常缓慢,而且当您快速移动光标时,地图在您停止移动之前不会更新它的位置。

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

  • 拖拽启动
  • 拖累
  • 悬而未决

使用这些事件时性能要好得多,但似乎我无法使用标准 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;
   }
} 
4

1 回答 1

1

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

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

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

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

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

于 2010-02-02T23:20:29.633 回答