Я думаю, что это лучшее, что вы можете получить с помощью jQuery: [ Демо ]
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");
});
Обратите внимание, что все возможные (незначительные) медлительности в настоящее время не могут быть исправлены, поскольку они связаны с производительностью рендеринга изображений в современных браузерах. Тест - простая линейная анимация, без событий, без jQuery