2012-09-12 20 views
9

Sto usando a:after, contiene right: Ypx.Animate di pseudo elementi usando jQuery

Desidero utilizzare il metodo animate in jQuery per spostare l'elemento (a:after) da Ypx a Zpx, come posso farlo?

Ad esempio:

[link-text][after] 
[link-text]-- moving > --[after] 

so come farlo senza animazione, solo facendo a:hover:after { right: Zpx } ma come con l'animazione?

+0

Non sono sicuro che jquery possa farlo. Potresti, tuttavia, essere in grado di usare le animazioni CSS3 per realizzare questo (credo), ma non sarebbe supportato su browser non CSS3, ovviamente, i browser non CSS3 generalmente non supportano il tag pseudo ': after'. .. – Shmiddty

+0

@Shmiddty: Perché no? ': after' non è nemmeno nuovo per i CSS3. – BoltClock

+0

@BoltClock Hai ragione. È stato aggiunto nei CSS2. Errore mio. – Shmiddty

risposta

7

Quello che stai cercando di fare è estremamente hacky e ti consiglio vivamente di creare elementi reali invece di provare ad animare pseudo-elementi. Tuttavia, per riferimento futuro: l'unico modo di animare una pseudo-elemento è inserendo un tag style e cambiando il valore effettivo CSS, come ...

var styles = document.getElementById("pseudo-mover") 
var distance = 100; 

var move = function(){ 
    styles.innerHTML = ".box:after {left: " + distance + "px}"; 
    distance++; 
    if (distance < 200) 
     setTimeout(move, 30);  
} 

move() 

http://jsfiddle.net/X7aTf/

Questo è js vaniglia , ma è possibile utilizzare la richiamata step in jQuery's animate per collegarsi alle funzioni di andamento e di timing di jquery.

+0

Ok, funziona ovviamente, ma il movimento non è fluido. Credo che dovrei aspettare qualche soluzione in futuro. Grazie. – Luis

+0

No, non aspettare soluzioni future (non ce ne saranno). Devi cambiare il tuo codice e usare elementi reali invece di pseudo-elementi. – Duopixel

+0

L'unica cosa che posso fare è Link e non penso che sia semantica, cosa ne pensi? – Luis

1

È possibile utilizzare le transizioni CSS3 per ottenere questo risultato, ma purtroppo sono supportati (per quanto ne so) in FireFox 4+ al momento.

http://jsfiddle.net/XT6qJ/1/

#foo:after{ 
    content:'!'; 
    display:inline-block; 
    border:solid 1px #f00; 
    padding:3px; 
    width:25px; 
    text-align:center; 
    -webkit-transition:margin-left 1s; 
    -moz-transition:margin-left 1s;  
    -ms-transition:margin-left 1s; 
    -o-transition:margin-left 1s;  
    transition:margin-left 1s;  
} 
#foo:hover:after{ 
    margin-left:100px;  
} 
+0

Sono supportati in molti altri browser: http://caniuse.com/css-transitions ... altrimenti, quale sarebbe il punto di quei prefissi nel tuo codice? – tuff

+1

@tuff Sì, ma non sugli elementi pseudo. – Shmiddty

+0

Purtroppo non posso permettermi di non supportare gli altri browser, quindi questa soluzione in CSS3 non funzionerà per me. : - \ Ma grazie comunque. – Luis

-3

Usa next(), invece. Here's how è possibile ottenere esattamente questo.

+1

-1 Completamente mancato il punto della domanda. Questo è CSS pseudo-elemts: il selettore ': after'. – frnhr