使用jQuery实现伪元素的动画效果

9

我正在使用a:after,其中包含right: Ypx

我想使用jQuery中的animate方法将元素(a:after)从Ypx移动到Zpx,我该怎么做?

例如:

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

我知道如何在没有动画的情况下做到这一点,只需执行 a:hover:after { right: Zpx },但如何添加动画呢?

我不确定 jQuery 能否实现这个。但是,你可能可以使用 CSS3 动画来完成它(我相信),但这在不支持 CSS3 的浏览器上将无法支持,当然,不支持 CSS3 的浏览器通常也不支持 :after 伪类标签... - Shmiddty
@Shmiddty:为什么不呢?:after在CSS3中甚至都不是新的。 - BoltClock
@BoltClock 你是对的。它是在CSS2中添加的。我的错误。 - Shmiddty
3个回答

8
你试图做的事情非常不专业,我强烈建议你使用真正的元素而不是尝试动画伪元素。然而,作为参考:唯一可以动画化伪元素的方法是插入一个 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/

这是使用原生JavaScript编写的代码,但您可以在jQuery的animate中使用step回调函数来连接到jQuery的缓动和时间函数。


好的,它能够工作,但是动作不够流畅。我想我应该等待未来的一些解决方案。谢谢。 - Luis
不,不要等待未来的解决方案(不会有)。你必须更改你的代码,使用真正的元素而不是伪元素。 - methodofaction
我唯一能做的就是<a href="#">链接 <span></span></a>,但我不认为它具有语义性,你觉得呢? - Luis
<a href="#">Link <span></span></a>比尝试动画伪元素好得多。 - methodofaction
证明你自己吧! :P @Duopixel - Bill
2
@BillyMathews 因为使用CSS转换/动画来动画元素非常简单,但在伪元素上执行此操作需要更多的处理能力,并且需要使用相当数量的js。我唯一可以看到合理情况是当你绝对不能触碰标记时,否则请将您的伪元素变成真实元素并对其进行动画。 - methodofaction

2
您可以使用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;    
}

它们在许多其他浏览器中得到支持:http://caniuse.com/css-transitions……否则,在您的代码中使用这些前缀有什么意义呢? - tuff
1
@tuff 是的,但不适用于伪元素。 - Shmiddty
很不幸,我无法不支持其他浏览器,所以这个CSS3解决方案对我来说行不通。:-\ 不过还是谢谢你。 - Luis
@Luis 是的,不幸的是,我认为目前还不可能。 - Shmiddty
@Luis - 现在怎么样?现在可以了吗? :) - ashleedawg

-4

1
-1 完全错过了问题的重点。这是关于CSS伪元素的 - :after选择器。 - frnhr
请查看“[答案]”。 - ashleedawg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接