У меня есть две скрипки JS для вас.
Первый исправляет ваш код http://jsfiddle.net/VCBXz/12/. Первая проблема заключалась в том, что вам нужно манипулировать полем контейнера, а не текущим элементом. Во-вторых, вам нужно отсоединить и повторно добавить текущий элемент в DOM, чтобы список был обновлен.
Вторая скрипка использует CSS3 http://jsfiddle.net/ca7Ef/4/. Таким образом, код не задействован. Поддержка браузера может быть не так хороша, как jquery, но это то, что нужно учитывать.
Вот обновленный javascript. Обратите внимание, что я изменил ваш внутренний тег p на div.
var ticker = $('#ticker');
var container = $('#ticker > div');
var spacing = ticker.outerHeight() - ticker.height();
function animator(currentItem) {
var distance = currentItem.outerHeight() + spacing;
var currentTop = parseInt(container.css('margin-top'), 10);
var duration = (distance + currentTop) / 0.05;
container.animate({ marginTop: -distance}, duration, "linear", function() {
var parent = currentItem.parent();
currentItem.detach();
parent.css("marginTop", 5);
parent.append(currentItem);
animator(parent.children(":first"));
});
};
animator(container.children(":first"));
ticker.mouseenter(function() {
container.stop();
});
ticker.mouseleave(function() {
animator(container.children(":first"));
});