I think this is the best you can get with jQuery: [ Demo ]
jQuery.fx.interval = 1; // since v1.4.3 var photos = $(".photos"); var scrollLeft = photos[0].scrollLeft; var $el = $(photos[0]); var lastTime = +new Date(); $(window).mousemove(function(event){ var now = +new Date(); var elapsed = now - lastTime; if (dragging && elapsed > 10) { scrollLeft += x - event.clientX; $el.stop().animate({scrollLeft: scrollLeft}, 300, "easeOutCubic"); x = event.clientX; lastTime = +new Date(); } }); $(window).mouseup(function(event){ dragging = false; $el.stop().animate({scrollLeft: scrollLeft}, 500, "easeOutCubic"); });
Please note that all possible (small) slowness cannot be fixed at the moment, because it is related to the performance of rendering images of modern browsers. Test - simple linear animation, no events, no jQuery
source share