Ich habe ein funktionierendes Beispiel geschrieben. Es gibt Live-Beispiel auf JsFiddle . Die Idee ist, Container mit position=relative zu erstellen, und setzen div mit Text in sie. Außerdem müssen wir eine Kopie des Textes erstellen, um leeren Raum zu vermeiden, wenn der letzte Teil des Textes angezeigt wird. jQuery animate() Funktion wird den Rest erledigen.
HTML:
<div class="news_container">
<div class="news">
<div class="text">
Long text
</div>
</div>
</div>
CSS:
.news_container {
border: 1px solid black;
width:150px;
height: 300px;
overflow: hidden;
position: relative;
padding: 3px;
}
.news {
position: absolute;
left: 0px;
top: 0px;
}
JavaScript:
(function($, undefined) {
$.fn.loopScroll = function(p_options) {
var options = $.extend({
direction: "upwards",
speed: 60
}, p_options);
return this.each(function() {
var obj = $(this).find(".news");
var text_height = obj.find(".text").height();
var start_y, end_y;
if (options.direction == "downwards") {
start_y = -text_height;
end_y = 0;
} else if (options.direction == "upwards") {
start_y = 0;
end_y = -text_height;
}
var animate = function() {
// setup animation of specified block "obj"
// calculate distance of animation
var distance = Math.abs(end_y - parseInt(obj.css("top")));
//duration will be distance / speed
obj.animate(
{ top: end_y }, //scroll upwards
1000 * distance / options.speed,
"linear",
function() {
// scroll to start position
obj.css("top", start_y);
animate();
}
);
};
obj.find(".text").clone().appendTo(obj);
$(this).on("mouseover", function() {
obj.stop();
}).on("mouseout", function() {
animate(); // resume animation
});
obj.css("top", start_y);
animate(); // start animation
});
};
}(jQuery));
$(".news_container").loopScroll();
Optionen:
direction
("abwärts" oder "aufwärts") - Richtung der Textbewegung;
speed
- Geschwindigkeit der Bewegung.
Hier ein Beispiel für die Verwendung dieses Plugins mit Optionen:
$("#example3").loopScroll();
$("#example4").loopScroll({ speed: 120 });
$("#example1").loopScroll({ direction: "downwards" });
$("#example2").loopScroll({ direction: "downwards", speed: 30 });