現在、私はこのコードを持っています:
@-webkit-keyframes blinker {
from { opacity: 1.0; }
to { opacity: 0.0; }
}
.waitingForConnection {
-webkit-animation-name: blinker;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1);
-webkit-animation-duration: 1.7s;
}
点滅しますが、「一方向」にしか点滅しません。つまり、それはフェードアウトするだけで、それからopacity: 1.0
で再び現れ、それから再びフェードアウトし、再び現れるというように...そして私はそれをフェードアウトし、そして再びこのフェードからopacity: 1.0
へ「上げる」ことを望みます。 。それは可能ですか?
最初にopacity: 1;
を設定してから0
で終了しているので、0%
で始まり100%
で終わるので、代わりに0
でopacityを50%
に設定するだけで残りはそれ自体で処理されます。
.blink_me {
animation: blinker 1s linear infinite;
}
@keyframes blinker {
50% {
opacity: 0;
}
}
<div class="blink_me">BLINK ME</div>
ここでは、アニメーションのデュレーションを設定するのはtiming
をlinear
に設定するよりも1 second
にする必要があります。つまり、infinite
を使用します。これは継続して継続することを意味します。
注:これがうまくいかない場合は、
animation
と-webkit
に必要なブラウザの接頭辞-moz
、@keyframes
などを使用してください。あなたは私の詳細なコードを参照することができます ここで
コメントしたように、これは古いバージョンのInternet Explorerでは動作しません。そのため、jQueryまたはJavaScriptを使用する必要があります。
(function blink() {
$('.blink_me').fadeOut(500).fadeIn(500, blink);
})();
より良いアプローチを提案してくれたAlnitakに感謝します 。
デモ (jQueryを使ったブリンカー)
animation-direction
にalternate
の値を使用します(この方法でkeframeを追加する必要はありません)。
alternate
アニメーションは各サイクルの方向を逆にする必要があります。逆方向に再生すると、アニメーションステップは逆方向に実行されます。さらに、タイミング機能も逆になります。たとえば、イージーインアニメーションを逆方向に再生すると、イーズアウトアニメーションに置き換えられます。偶数反復であるか奇数反復であるかを判断するためのカウントは1から始まります。
_ css _ :
.waitingForConnection {
animation: blinker 1.7s cubic-bezier(.5, 0, 1, 1) infinite alternate;
}
@keyframes blinker { to { opacity: 0; } }
from
キーフレームを削除しました。見つからない場合は、要素のアニメーションプロパティに設定した値(この場合はopacity
)から、または設定していない場合(この場合は設定していない場合)のデフォルト値から生成されます。 value(opacity
の場合は1
).
そしてWebKit版だけを使わないでください。それ以降も接頭辞のないものを追加してください。もっと少ないコードを書きたいだけの場合は、 短縮形 を使用してください。
古い<blink>
のように、純粋な「100%オン、100%オフ」の点滅を取得する最良の方法は次のとおりです。
.blink {
animation: blinker 1s step-start infinite;
}
@keyframes blinker {
50% {
opacity: 0;
}
}
<div class="blink">BLINK</div>
あるいは、表示と非表示を徐々に切り替える必要がない場合(テキストの点滅カーソルなど)は、次のようにします。
/* Also use prefixes with @keyframes and animation to support current browsers */
@keyframes blinker {
from { visibility: visible }
to { visibility: hidden }
/* Alternatively you can do this:
0% { visibility: visible; }
50% { visibility: hidden; }
100% { visibility: visible; }
if you don't want to use `alternate` */
}
.cursor {
animation: blinker steps(1) 500ms infinite alternate;
}
すべての1s
.cursor
はvisible
からhidden
に行きます。
CSSアニメーションがサポートされていない場合(例えばSafariのいくつかのバージョンで)、この単純なJSインターバルにフォールバックすることができます。
(function(){
var show = 'visible'; // state var toggled by interval
var time = 500; // milliseconds between each interval
setInterval(function() {
// Toggle our visible state on each interval
show = (show === 'hidden') ? 'visible' : 'hidden';
// Get the cursor elements
var cursors = document.getElementsByClassName('cursor');
// We could do this outside the interval callback,
// but then it wouldn't be kept in sync with the DOM
// Loop through the cursor elements and update them to the current state
for (var i = 0; i < cursors.length; i++) {
cursors[i].style.visibility = show;
}
}, time);
})()
この単純なJavaScriptは実際には非常に高速であり、多くの場合、CSSよりも優れたデフォルトになる可能性があります。注目に値するのは、JSアニメーションを遅くするのはDOM呼び出しの数が多いことです(例:JQueryの$ .animate())。
また、.cursor
要素を後で追加しても、状態が共有されているので他の.cursor
sとまったく同時にアニメーション化されますが、私の知る限りCSSでは不可能です。
理由はわかりませんが、visibility
プロパティのみをアニメートしてもどのブラウザでも機能しない。
ブラウザにテキストをフェードインまたはフェードアウトさせるのに十分なフレームがないように、opacity
プロパティをアニメートすることができます。
例:
span {
opacity: 0;
animation: blinking 1s linear infinite;
}
@keyframes blinking {
from,
49.9% {
opacity: 0;
}
50%,
to {
opacity: 1;
}
}
<span>I'm blinking text</span>
持続時間と不透明度を適切に変更してください。
.blink_text {
-webkit-animation-name: blinker;
-webkit-animation-duration: 3s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-moz-animation-name: blinker;
-moz-animation-duration: 3s;
-moz-animation-timing-function: linear;
-moz-animation-iteration-count: infinite;
animation-name: blinker;
animation-duration: 3s;
animation-timing-function: linear;
animation-iteration-count: infinite; color: red;
}
@-moz-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.3; }
100% { opacity: 1.0; }
}
@-webkit-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.3; }
100% { opacity: 1.0; }
}
@keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.3; }
100% { opacity: 1.0; }
}
@-webkit-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
最近、キーフレームを増やした新しいものを追加したいと思いました...組み込みのコードスニペットに問題があったので、こちらが CodePenの例 です。
.block{
display:inline-block;
padding:30px 50px;
background:#000;
}
.flash-me {
color:#fff;
font-size:40px;
-webkit-animation: flash linear 1.7s infinite;
animation: flash linear 1.7s infinite;
}
@-webkit-keyframes flash {
0% { opacity: 0; }
80% { opacity: 1; color:#fff; }
83% { opacity: 0; color:#fff; }
86% { opacity: 1; color:#fff;}
89% { opacity: 0}
92% { opacity: 1; color:#fff;}
95% { opacity: 0; color:#fff;}
100% { opacity: 1; color:#fff;}
}
@keyframes flash {
0% { opacity: 0; }
80% { opacity: 1; color:#fff; }
83% { opacity: 0; color:#fff; }
86% { opacity: 1; color:#fff;}
89% { opacity: 0}
92% { opacity: 1; color:#fff;}
95% { opacity: 0; color:#fff;}
100% { opacity: 1; color:#fff;}
}
<span class="block">
<span class="flash-me">Flash Me Hard</span>
</span>
<style>
.class1{
height:100px;
line-height:100px;
color:white;
font-family:Bauhaus 93;
padding:25px;
background-color:#2a9fd4;
border:outset blue;
border-radius:25px;
box-shadow:10px 10px green;
font-size:45px;
}
.class2{
height:100px;
line-height:100px;
color:white;
font-family:Bauhaus 93;
padding:25px;
background-color:green;
border:outset blue;
border-radius:25px;
box-shadow:10px 10px green;
font-size:65px;
}
</style>
<script src="jquery-3.js"></script>
<script>
$(document).ready(function () {
$('#div1').addClass('class1');
var flag = true;
function blink() {
if(flag)
{
$("#div1").addClass('class2');
flag = false;
}
else
{
if ($('#div1').hasClass('class2'))
$('#div1').removeClass('class2').addClass('class1');
flag = true;
}
}
window.setInterval(blink, 1000);
});
</script>
.blink_me {
animation: blinker 1s linear infinite;
}
@keyframes blinker {
50% {
opacity: 0;
}
}
<div class="blink_me">BLINK ME</div>