Eh bien, il est pas très efficace, mais cela est un bon début, je pense:
jQuery.fn.verticalMarquee = function(vertSpeed, horiSpeed) {
this.css('float', 'left');
vertSpeed = vertSpeed || 1;
horiSpeed = 1/horiSpeed || 1;
var windowH = this.parent().height(),
thisH = this.height(),
parentW = (this.parent().width() - this.width())/2,
rand = Math.random() * 1000,
current = this;
this.css('margin-top', windowH + thisH);
this.parent().css('overflow', 'hidden');
setInterval(function() {
current.css({
marginTop: function(n, v) {
return parseFloat(v) - vertSpeed;
},
marginLeft: function(n, v) {
return (Math.sin(new Date().getTime()/(horiSpeed * 1000) + rand) + 1) * parentW;
}
});
}, 15);
setInterval(function() {
if (parseFloat(current.css('margin-top')) < -thisH) {
current.css('margin-top', windowH + thisH);
}
}, 250);
};
$('.message').verticalMarquee(0.5, 1);
Il utilise Math.sin
pour déplacer l'élément horizontalement. La fonction verticalMarquee
accepte deux arguments, l'un pour la vitesse verticale et l'autre pour la vitesse horizontale. La fonction ne peut être appelée que sur des objets jQuery qui ne contiennent qu'un seul élément - pendant le test, plus d'un élément a été animé en même temps, ce qui a provoqué un retard important.
Voir une simple démo ici: http://jsfiddle.net/CcccQ/2/
pourrait vous donner un exemple? – chchrist