これは(明らかに)大きなプロジェクトの一部ですが、setTimeout
でCSトランジションをトリガーしようとしています。JavaScript:window.setTimeoutを使用してCSSトランジションをトリガー
(私はCSSアニメーションの使用について知っていますが、これはちょっとした繰り返しの遷移ではありません)。
プロパティが変更されるとCSSの遷移が発生します。私自身の目的のために、私はsetAttribute
を使用します。それは他のクラス関連のものから動作を分離しますが、以下の動作は同じです。 HTMLやその他のコードを仮定し
が所定の位置にあり、ここでは単純化したバージョンです:
var test=document.querySelector('div#test');
window.setInterval(doit,4000);
function doit() {
test.removeAttribute('thing');
test.innerHTML=new Date();
test.setAttribute('thing',null);
}
CSSは次のとおりです。
div#test {
opacity: 0;
}
div#test[thing] {
transition: opacity 1s;
opacity: 1;
}
私がしようとしているトリックは、属性を明確に変更することがあり、その後、再度設定してください。これはCSSの変更を引き起こすはずです。上記のように動作しません。しかし、は私が0秒でattribut遅延設定ならば、それは仕事を行います。私はこの微小遅延を追加しない限り、なぜそれが動作しない、とこれを行うには良い方法があります:
function doit() {
test.removeAttribute('thing');
window.setTimeout(function() {
test.setAttribute('thing',null);
},0);
test.innerHTML=new Date();
}
質問です?
jQueryなしの回答が欲しいです。
注:以下の回答を受け入れました。次のコードは動作します:
function doit() {
test.removeAttribute('thing');
test.offsetHeight; // force update
test.innerHTML=new Date();
test.setAttribute('thing',null);
}
おかげ
私は同じような問題がありましたが、場所を指定してURLを変更しようとしました(これは角度がありましたが、とにかくラッパーと思う)。私はlocation.searchの値を変更し、その直後にページをリダイレクトしました。ブラウザーで「戻る」機能を使用しているとき、リダイレクトをタイムアウト内に置かなかった場合、最後のページに変更された「検索」パラメーターが反映されませんでした。なぜか分かりませんが、それはそれがそうであるように思われますが、少なくともどこでも良い答えは見つけられていません。 – Millenjo