你可能需要考虑这将如何影响用户体验,但是关于这个问题,可以考虑以下链接:http://jsfiddle.net/7Xuep/6/
好的,因为使用CSS动画轻松实现彩虹颜色的旋转。问题在于将它们连接到所有标记上,使动画从正确的位置开始。(即,您需要绿色字母从绿色开始其动画等)为此,我们可以使用animation-delay
属性:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation-delay
我们可以使用此属性以每个字母的适当颜色开始彩虹动画。使用线性时间函数,很容易确定动画何时到达每种颜色。因此,只需将正确的animation-delay
值附加到每个元素即可。我通过将已生成的HTML添加到每个元素的style
属性中的CSS规则来实现这一点:
var animTime = 6,
hueChange = 3,
prefixes = ["", "-webkit-", "-moz-", "-o-"],
numPrefixes = prefixes.length;
$('.unicorn').find('span').each(function (i) {
for (var j = 0; j < numPrefixes; j++) {
$(this).css(prefixes[j] + 'animation-delay', (animTime * ((i * hueChange) % 360) / 360) - animTime + 's');
}
});
但是您可以在生成所有 span
元素的同时完成此操作。然后,只需使用 CSS 设置动画即可:
.unicorn:hover span {
animation: colorRotate 6s linear 0s infinite;
}
@keyframes colorRotate {
from {
color: rgb(255, 0, 0);
}
16.6% {
color: rgb(255, 0, 255);
}
33.3% {
color: rgb(0, 0, 255);
}
50% {
color: rgb(0, 255, 255);
}
66.6% {
color: rgb(0, 255, 0);
}
83.3% {
color: rgb(255, 255, 0);
}
to {
color: rgb(255, 0, 0);
}
}
这让我们来到这里:http://jsfiddle.net/P6WVg/7/
现在,如果您不想让颜色在某人不再悬停在.unicorn
上时重置,则可以使用animation-play-state
:
https://developer.mozilla.org/en-US/docs/Web/CSS/animation-play-state
然而,我发现Chrome在结合-webkit-animation-play-state:paused;
的初始值和负值的-webkit-animation-delay
时存在问题,因此它只显示了第一帧(即在这种情况下color: rgb(255,0,0);
)。因此,我不得不使用一个事件监听器在第一次悬停时添加包含动画CSS的类,这导致我们到达:
http://jsfiddle.net/7Xuep/6/
(Chrome中的此错误可在此处跟踪:https://code.google.com/p/chromium/issues/detail?id=269340)