2010-01-26 14 views
9

E 'possibile creare una selezione uniforme al 100% in jQuery (o solo javascript ma jQuery preferito)?JQuery Marquee senza cuciture?

Ho creato un semplice riquadro che si sposta a sinistra fino a quando non è fuori dallo schermo, quindi salta semplicemente (quando non è visibile) a destra e ricomincia. Comunque mi piacerebbe non avere l'attesa.

L'unico modo che potevo pensare di fare questo sarebbe quello di duplicare il testo e metterlo dopo il primo testo, quindi scambiarli di nuovo. Tuttavia non ho idea di come implementarlo in jQuery, ho guardato jQuery .clone() ma non riesco a farlo funzionare correttamente, tutto salta.

Qualche idea?

Grazie per il vostro tempo,

+14

Festeggiamo come se fosse il 1995! – Kevin

+0

La tua inclinazione è giusta. –

+0

Ho appena creato un plugin per questo. Spero che questo aiuti :) https://github.com/aamirafridi/jQuery-Marquee –

risposta

22

Data la seguente marcatura:

<div id="marquee">My Text</div> 

per la duplicazione, mi piacerebbe fare qualcosa di simile:

$("#marquee").wrapInner("span"); // wrap "My Text" with a new span 
$("#marquee").append($("#marquee span").clone().hide()); // now there are two spans with "My Text" 

Spostamento e scambiando le campate è molto facile. Ecco un esempio completamente funzionale:

$(function() { 

    var marquee = $("#marquee"); 
    marquee.css({"overflow": "hidden", "width": "100%"}); 

    // wrap "My Text" with a span (old versions of IE don't like divs inline-block) 
    marquee.wrapInner("<span>"); 
    marquee.find("span").css({ "width": "50%", "display": "inline-block", "text-align":"center" }); 
    marquee.append(marquee.find("span").clone()); // now there are two spans with "My Text" 

    // create an inner div twice as wide as the view port for animating the scroll 
    marquee.wrapInner("<div>"); 
    marquee.find("div").css("width", "200%"); 

    // create a function which animates the div 
    // $.animate takes a callback for when the animation completes 
    var reset = function() { 
     $(this).css("margin-left", "0%"); 
     $(this).animate({ "margin-left": "-100%" }, 3000, 'linear', reset); 
    }; 

    // kick it off 
    reset.call(marquee.find("div")); 

}); 

See it in action.

responsabilità:

Non consiglio questo per qualsiasi sito web professionale. Tuttavia, potrebbe essere utile se stai cercando di riprodurre un look retrò anni '90.

+0

Ancora bisogno di codice per scambiare una volta che il tendone ha passato la finestra visibile. –

+2

Questo non è perfetto, c'è un enorme vuoto dopo la fine del testo e prima che il testo ricominci. – Evgeny

+1

@Evgeny, dipende dalla tua definizione di seamless. Questo design fa sì che lo schermo si comporti come un cilindro, facendo apparire immediatamente il testo che scorre da un lato all'altro. – Joel