Javascript 旧浏览器中的高效元素定位

Javascript 旧浏览器中的高效元素定位,javascript,css,performance,internet-explorer-8,internet-explorer-7,Javascript,Css,Performance,Internet Explorer 8,Internet Explorer 7,我目前正在为一个必须与IE7兼容的客户构建一个相当雄心勃勃的交互墙 它基本上是一个大的、可拖动的六边形网格,使用Raphael.js绘制。网格的大小取决于屏幕大小,但在大多数情况下不会超过2500个SVG元素 在现代浏览器(包括IE9)中拖动包含DIV的部分时,它非常平滑。在IE7和IE8中,情况并非如此 必须支持较旧的浏览器意味着不支持CSS3,因此也不支持CSS转换。因此,我必须更新CSS的left和top属性来定位元素 在这些旧浏览器中,有没有更有效的方法来移动大型元素?我注意到缓慢拖动相

我目前正在为一个必须与IE7兼容的客户构建一个相当雄心勃勃的交互墙

它基本上是一个大的、可拖动的六边形网格,使用Raphael.js绘制。网格的大小取决于屏幕大小,但在大多数情况下不会超过2500个SVG元素

在现代浏览器(包括IE9)中拖动包含DIV的部分时,它非常平滑。在IE7和IE8中,情况并非如此

必须支持较旧的浏览器意味着不支持CSS3,因此也不支持CSS转换。因此,我必须更新CSS的left和top属性来定位元素

在这些旧浏览器中,有没有更有效的方法来移动大型元素?我注意到缓慢拖动相当平稳,而快速拖动则会导致死亡。我尝试过限制每秒处理拖动事件的次数,但效果不太好

我的主要选择是在IE7/8中禁用拖动或减小主元素的大小。这两个都不理想,但到目前为止,这是我唯一的选择


我认为这是一个长期的机会,但任何建议都将是伟大的

如何限制执行?这实际上意味着div只有在您停止移动鼠标,而不随moouse光标移动时才被定位

所以做一些类似于

var timeout;
$("#element").mouseover(function() {
  if ([ie_lte_9]) {
    clearTimeout(timeout);
    timeout = setTimeout(doDrag, 10);
  } else {
    doDrag();
  }
});

源代码中的mouseover可能是代码中的另一种事件类型,doDrag被称为另一种方式。。。“[ie_lte_9]”只是意味着您需要检测Internet Explorer<9

在这里回答我自己的问题,我想如果其他人有类似的问题,他们可能会偶然发现这一点,这将很有帮助


在我的拖动函数(movemove事件)中,我未能包含stopPropagation或preventDefault()调用。添加了这些,性能显著提高

我也尝试过类似的方法,但它似乎更多地与元素的移动量有关,而不是与mousemove事件的触发次数有关……您是否尝试通过JS进行单个移动?它是快还是像通过拖动移动一样慢?如果答案是速度很快,则拖动处理程序中可能有太多定位调用。。。如果仍然很慢,那么需要(重新)绘制的元素数量将非常慢!我试过了,结果显示这是一段时间内的定位电话数量,而不是距离。我想节流绝对是答案…我只需要弄清楚如何正确地实现它!