我试图平滑我使用javascript构建的地图应用程序的性能。我最初使用
实现了拖动平底锅然而在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;
}
}
答案 0 :(得分:1)
很难说,没有代码示例,是什么让你的拖动事件变得缓慢。
缓慢的影响可能是由于您在事件执行中运行的一些繁重的操作。浏览器中的事件系统非常有趣。这是同步的。这意味着,在当前执行完成之前,不会再次触发事件。
这意味着,您有两种可能:1。优化事件内部的代码,以便减少CPU时间或2.使您的事件异步并实现您自己的互斥/信号逻辑。
您可以使用setTimeout功能执行第二个操作。如果你执行setTimeout,((代码),1),事件将异步继续,因此将调度下一个事件,而无需等待代码完成。那么,请提前注意,在这种情况下,你必须开始考虑锁定和排队。通过排队我的意思是,将所有调度的事件排队以备将来使用。
很久以前,我还做了一些异步事件调度,因为代码执行很繁重。它对我有用。也许它对你也有用。