jQuery

2012-09-12 11 views
9

kullanarak sözde öğeleri oluşturma a:after kullanıyorum, right: Ypx içeriyor.jQuery

JQuery'de animate yöntemini kullanmak için (a:after) Ypx - Zpx öğesinden taşımak için nasıl yapabilirim? Örneğin

:

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

ben, animasyon olmadan bunu nasıl biliyor sadece animasyon ile a:hover:after { right: Zpx } ama nasıl yapıyor?

+0

Jquery'nin bunu yapabileceğinden emin değilim. Bununla birlikte, bunu başarmak için CSS3 animasyonlarını kullanabiliyor olabilirsiniz (inanıyorum), fakat CSS3 olmayan tarayıcılarda desteklenmezdi, tabi ki, CSS3 olmayan tarayıcılar genellikle ': sonra' sahte etiketini desteklemez. .. – Shmiddty

+0

@Shmiddty: Neden olmasın? ': sonra' CSS3 için yeni değil. – BoltClock

+0

@BoltClock Haklısınız. CSS2'ye eklendi. Benim hatam. – Shmiddty

cevap

7

Yapmaya çalıştığınız şey son derece rahatsızlık verici ve sahte öğeler oluşturmaya çalışmak yerine gerçek öğeler oluşturmanızı şiddetle tavsiye ediyorum. Ancak, ileride başvurmak üzere: Bir sözde elemanı canlandırmanın tek yolu

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/

... Bir style etiketinin yerleştirilmesini ve bu şekilde gerçek CSS, değeri değiştirerek Bu vanilya js olduğunu Ancak jquery'nin animate numaralı telefonundaki step geri bildirimini jquery'nin hareket hızı ve zamanlama işlevlerine bağlamak için kullanabilirsiniz.

+0

Tamam, elbette çalışıyor ama hareket kaygan değil. Gelecekte bazı çözümlere beklemeliyim. Teşekkür ederim. – Luis

+0

Hayır, gelecekteki çözümleri beklemeyin (hiçbiri olmayacak). Kodunuzu değiştirmeli ve sahte öğeler yerine gerçek öğeleri kullanmalısınız. – Duopixel

+0

Yapabileceğim tek şey Link ve semantik olduğunu sanmıyorum, ne düşünüyorsun? – Luis

1

Bunu yapmak için CSS3 geçişlerini kullanabilirsiniz, ancak ne yazık ki şu anda sadece FireFox 4+ içinde desteklenmektedir (bildiğim kadarıyla). Bir sonraki

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

Diğer birçok tarayıcıda destekleniyorlar: http://caniuse.com/css-transitions ... aksi halde kodunuzdaki bu öneklerin noktası ne olurdu? – tuff

+1

@tuff Evet, ancak sahte öğeler üzerinde değil. – Shmiddty

+0

Maalesef, diğer tarayıcıları desteklememek için kendimi karşılayamıyorum, bu yüzden CSS3'teki bu çözüm benim için çalışmayacaktır. : - Ama yine de teşekkürler. – Luis

-3

Kullanım() yerine. Here's how tam olarak bunu başarabilirsiniz.

+1

-1 Tamamen sorunun cevabını kaçırdı. Bu CSS sözde elemts - ': after selector. – frnhr