2014-02-25 96 views
1

我需要水平移动DOM元素。拖动开始于鼠标按下,在移动鼠标移动mouseup事件结束移动元素的最佳方式(性能方面)

所有这一切都需要在与它吨动画和东西的网站的情况发生,所以性能是至关重要的。用我现在所拥有的,我确实看到了一些延迟;该元素稍稍移动一下鼠标移动。这样看起来很丑。

所以,基本上我有类似如下:

var offset = 0, startX; 
$('.draggable').on('mousedown', function (e) { 
     startX = e.pageX; 
    }) 
    .on('mouseup', function() { 
     startX = null; 
    }) 
    .on('mousemove', function (e) { 
     if(startX) { 
      newX = e.pageX; 
      offset += newX - startX; 
      startX = newX; 
      this.style['-webkit-transform'] = 'translate(' + offset + 'px)'; 
     } 
    }); 

jsfiddle

我想知道这个代码什么样的变化可以提高性能?

更新:例如,requestAnimationFrame和FPS,它可以帮助吗?

+1

我会通过降低jQuery的开始。 – PeeHaa

+0

是真的,虽然我怀疑在这种情况下,我只用它来绑定事件并不重要太多 –

+0

我怀疑你的怀疑是正确的。特别是因为你关心性能。即使2.0正常化你可能不需要的东西。 https://github.com/jquery/jquery/blob/2.1.0-rc1/src/event.js – PeeHaa

回答

1

不是一个巨大的进步,但你可以这样写:

var offset = 0, startX; 
$('.draggable').on('mousedown', function (e) { 
     startX = e.pageX - offset; 
    }) 
    .on('mouseup', function() { 
     startX = null; 
    }) 
    .on('mousemove', function (e) { 
     if(startX) { 
      offset = e.pageX - startX; 
      this.style['-webkit-transform'] = 'translate(' + offset + 'px)'; 
     } 
    }); 

fiddle

+0

Thnx为了改进,至少向前迈进了一步! –