css3アニメーションとjqueryを使用する場合の注意点animation_html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 12:34:25
オリジナル
933 人が閲覧しました

少し前にデモを書いていたときに、要素に css3 または jquery アニメーションを追加するときに、アニメーションが終了する前に要素の css 属性を正確に取得できないという問題が発生しました。

1. CSS3 アニメーションのディスカッション

まずコードを見てください:

html:

<div id="hehe"></div><button class="change">change</button><button class="get">get</button>
ログイン後にコピー

css:

#hehe {    width: 100px;    height: 100px;    padding: 10px;    background: red;    -webkit-transition: all 10s ease-out;    -moz-transition: all 10s ease-out;    -o-transition: all 10s ease-out;    transition: all 10s ease-out;}
ログイン後にコピー

js:

$(document).ready(function() {    $('.change').click(function() {        $('#hehe').width(400);    });    $('.get').click(function() {        console.log($('#hehe').width());    });});
ログイン後にコピー

コードは非常に簡単です。 hehe div に赤い背景色を追加し、css3 でアニメーション スムージング効果の css3 trasition を使用しました (css3 trasition の使用方法については、この記事を参照してください: http://www.w3cplus.com/content/css3-transition 、非常に詳細に書かれています)。つまり、幅、高さ、背景、フォントなどの CSS プロパティを変更すると、イーズアウト (速度低下) スムーズ トランジション効果が 10 秒間持続します。たとえば、変更ボタンをクリックすると、hehe の幅が 10 秒かかり、徐々に 400px まで増加し、アニメーション効果が生成されます。

ここで質問が来ます: アニメーションの進行中に取得ボタンをクリックします。コンソールによって出力される「へへ」の幅はどれくらいですか?

変更をクリックすると、要素を検査するときに「

」が表示されたので、最初は 400 だと思いました。答えは「いいえ」です。得られるのは、アニメーション中のクリックの瞬間の「ふふふ」の幅です。

コンソール コードを変更します。

console.log($('#hehe').css('width');
ログイン後にコピー

これで、アニメーション プロセス全体で、[get] をクリックすると 400 ピクセルが取得されることがわかります。これは、jquery の width() が要素の幅をリアルタイムで取得するのに対し、css('width') は単位も持っているため、単に要素の CSS 値を取得することを示しています。

2.Jqueryアニメーションの議論

jqueryアニメーションは理解しやすいです。 css3 トランジションの css コードを削除し、jquery animate に置き換えます。

$(document).ready(function() {    console.log($('#hehe').width());    $('.change').click(function() {        $('#hehe').animate({width: "400px"}, 10000);    });    $('.get').click(function() {        console.log($('#hehe').width());    });});
ログイン後にコピー

jquery アニメーションは実際に要素にスタイルを動的に追加するため、hehe の幅は、width() を使用して取得するか css('width') を使用して取得するかに応じて動的に変化します。ただし、width を使用して取得される幅には単位 px がなく、すべて整数ですが、css('width') を使用して取得される幅には単位があり、小数点以下の桁数が大きくなります。長さ。

まとめ:

ここまで議論しましたが、重要なのは、アニメーションを使用するときに、まだ変化している CSS 属性、特に幅と高さをすぐに取得すると、問題が発生しやすいということです。これらの要素のプロパティを取得するには、アニメーションが終了するまで待つ必要があります。または、アニメーション化する CSS プロパティを指定することもできます。たとえば、アニメーションの幅と高さを取得したいが、実際に必要なアニメーション効果は背景色の変更だけである場合、css3 トランジションを記述するときに次のように記述できます

-webkit-transition: background .7s ease-out;-moz-transition: background .7s ease-out;-o-transition: background .7s ease-out;transition: background .7s ease-out;
ログイン後にコピー

ちなみに、アニメーション効果は背景色に反映されるだけで、幅や高さは動的に変化しません。

同様に、CSS3 アニメーションの他の 2 つの効果、トランスフォーム (http://www.w3cplus.com/content/css3-transform) とアニメーション (http://www.w3cplus.com/content/css3-animation ) については、また、アニメーションを使用している場合でも、transition と同じであることがわかりました。css('width') を使用して取得される幅も変化します。興味のある学生はぜひ試してみてください。

そのため、css3 アニメーションを使用する場合は、アニメーションの影響にもっと注意を払う必要があります。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート