I wrote some working examples. JsFiddle shows a live example. The idea is to create a container with position = relative and place a div with text in it. In addition, we need to create a copy of the text to avoid empty space when the last part of the text is displayed. The jQuery animate () function will do the rest.
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() {
var distance = Math.abs(end_y - parseInt(obj.css("top")));
obj.animate(
{ top: end_y },
1000 * distance / options.speed,
"linear",
function() {
obj.css("top", start_y);
animate();
}
);
};
obj.find(".text").clone().appendTo(obj);
$(this).on("mouseover", function() {
obj.stop();
}).on("mouseout", function() {
animate();
});
obj.css("top", start_y);
animate();
});
};
}(jQuery));
$(".news_container").loopScroll();
Parameters:
direction ("down" or "up") - the direction of text movement;speed - speed of movement.
Here is an example of using this plugin with parameters:
$("#example3").loopScroll();
$("#example4").loopScroll({ speed: 120 });
$("#example1").loopScroll({ direction: "downwards" });
$("#example2").loopScroll({ direction: "downwards", speed: 30 });
source
share