私の目標は、CSS animation
を使用して特定のテキストにランダムな輝き効果を与えることです。 私はすでに実用的なコードを持っていますが、より効果的な/簡単な解決策があるかどうかを知りたいだけです。DOM子を効率的に操作する
HTML:
<span class="foo">
<span class="bar">
</span>
</span>
はCSS:
@keyframes masked-animation {
0% {background-position: -1000px 0}
50% {background-position: 1000px 0}
100% {background-position: 1000px 0}
}
.foo{
text-align: center;
font-size: 40px;
font-weight: bold;
display: block;
color: red;
position: absolute;
}
.bar{
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
color: rgba(0,0,0,0);
background-image: linear-gradient(-45deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.67) 48%, rgba(255,255,255,0.9) 50%, rgba(255,255,255,0.67) 52%, rgba(255,255,255,0) 100%);
background-repeat: no-repeat;
-webkit-background-clip: text;
animation-name: masked-animation;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
background-size: 400% 100%;
}
JS:
$('.foo')[0].childNodes[0].nodeValue = "Text";
$('.foo > .bar').css({
"animation-duration" : 8 + Math.round(Math.random()*40)/10 + "s",
"animation-delay" : Math.round(Math.random()*100)/10 + "s"
}).text("Text");
きちんと見てアニメーションためには、その要素/テキストの上にする必要があります。それを同じ要素に置くと、後ろにレンダリングされます。 ::before
を使ってみましたが、実際にはDOMに存在しないためJSで選択できません。
これは、頻繁に変更される<span>
内の複数の要素とテキストに適用する必要があります。