2012-09-12 6 views
9

Я использую a:after, он содержит right: Ypx.Анимация псевдоэлементов с использованием jQuery

Я хочу использовать метод animate в jQuery для перемещения элемента (a:after) от Ypx до Zpx, как я могу это сделать?

Например:

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

Я знаю, как сделать это без анимации, просто делать a:hover:after { right: Zpx }, но как с анимацией?

+0

Я не уверен, что jquery может это сделать. Тем не менее, вы можете использовать анимацию CSS3 для выполнения этого (я считаю), но он не будет поддерживаться в браузерах, не поддерживающих CSS3, конечно, браузеры, не поддерживающие CSS3, обычно не поддерживают псевдо-тег ': after'. .. – Shmiddty

+0

@Shmiddty: Почему бы и нет? ': after' даже не является новым для CSS3. – BoltClock

+0

@BoltClock Вы правы. Он был добавлен в CSS2. Виноват. – Shmiddty

ответ

7

То, что вы пытаетесь сделать, очень хаки, и я настоятельно рекомендую вам поставить реальные элементы вместо того, чтобы пытаться анимировать псевдоэлементы. Однако, для дальнейшего использования: единственный способ анимировать псевдо-элемент является вставкой style тег и изменения значения в реальной CSS, такие как ...

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/

Это ваниль JS , но вы можете использовать обратный вызов step в jQuery animate, чтобы подключиться к функциям ослабления и синхронизации jquery.

+0

Хорошо, это работает, конечно, но движение не пятно. Думаю, я должен ждать некоторых решений в будущем. Спасибо. – Luis

+0

Нет, не ждите будущих решений (их не будет). Вы должны изменить свой код и использовать реальные элементы вместо псевдоэлементов. – Duopixel

+0

Единственное, что я могу сделать, это Link , и я не думаю, что это семантический, как вы думаете? – Luis

1

Вы можете использовать переходы CSS3 для выполнения этого, но, к сожалению, они поддерживаются (насколько мне известно) только в FireFox 4+ прямо сейчас.

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

Они поддерживаются в большом количестве других браузеров: http://caniuse.com/css-transitions ... в противном случае, какой смысл для этих префиксов в вашем коде? – tuff

+1

@tuff Да, но не на псевдоэлементах. – Shmiddty

+0

К сожалению, я не могу позволить себе не поддерживать другие браузеры, поэтому это решение в CSS3 не будет работать для меня. : - \ Но спасибо вам в любом случае. – Luis

-3

Используйте следующий() вместо этого. Here's how вы можете добиться именно этого.

+1

-1 Полностью упустил точку вопроса. Это псевдоэлементы CSS - селектор ': after'. – frnhr

Смежные вопросы