Вы должны обрабатывать свои переменные прокрутки так же, как вы обрабатываете «текущую позицию». Храните их в объекте, а не хватайте их каждый раз. Вы в основном добавляете каждое движение в каждый раз, когда оно движется. Если вы двигаетесь на 2 пикселя, затем еще на 2, при первом перемещении на 2, а затем во второй раз на 2 + 2. Но вы уже двинулись на 2, так что теперь вы двигаетесь на 6 вместо 4 ... в конце концов, эти сборки будут очень быстрыми.
http://jsfiddle.net/XMhMR/3/