Ecco un modo abbastanza semplice per farlo. In primo luogo, impostare un div contenente il lungo testo:
<div id="container">
Here is the long content, long long content. So long. Too long.
</div>
È possibile utilizzare alcuni CSS per gestire automaticamente il troncamento e puntini di sospensione:
div#container {
/* among other settings: see fiddle */
width: 200px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
Se quindi determinare la larghezza originaria untruncated del contenuto , è possibile utilizzare jQuery .animate()
per spostare quel contenuto a una velocità costante, anche se non si conosce la lunghezza del testo fino al runtime (come sarebbe il caso con un feed di Twitter). Ecco un modo un po 'meccanica di ottenere la misura:
var true_width = (function(){
var $tempobj = $('#container') // starting with truncated text div container
.clone().contents() // duplicate the text
.wrap('<div id="content"/>') // wrap it in a container
.parent().appendTo('body') // add this to the dom
.css('left','-1000px'); // but put it far off-screen
var result = $tempobj.width(); // measure it
$tempobj.remove(); // clean up
return result;
})();
Infine, alcune animazioni:
$('#container').one('mouseenter', function(){ // perhaps trigger once only
var shift_distance = true_width - $(this).width(); // how far to move
var time_normalized = parseInt(shift_distance/100, 10) * 1000; // speed
$(this).contents().wrap('<div id="content">').parent() // wrap in div
.animate({
left: -shift_distance,
right: 0
}, time_normalized, 'linear'); // and move the div within its "viewport"
});
A prescindere dalla lunghezza del testo, si otterrà una velocità costante di circa un secondo per 100 pixel (regolare come desiderato). La reimpostazione o il riavvolgimento del contenuto su mouseleave viene lasciato come esercizio. Questo approccio ha alcuni elementi ingenui, ma potrebbe darti qualche idea.
Ecco un esempio di lavoro: http://jsfiddle.net/redler/zdvyj/
grazie per il violino e la grande :) expl commenti anatory – Purefan