最初に非表示にしたときに要素の遷移が失敗するのはなぜですか?

Susan Sarandon
リリース: 2024-11-14 18:59:02
オリジナル
402 人が閲覧しました

Why Do Element Transitions Fail When Initially Hidden?

Element Transitions Fail When Initially Hidden

Scenario Overview

Consider two elements, labeled 'A' and 'B', where 'B' is initially hidden using display: none. When using transitions to animate 'B' upon revealing it with methods like $.show() or $.toggle(), the element instantly appears at its final position without any animation.

Explanation

The root cause lies in the relationship between the Document Object Model (DOM) and the CSS Object Model (CSSOM). CSS transitions rely on the last computed value of an element. For elements initially hidden, the computed value is display: none, which essentially removes the element from the CSSOM.

DOM Manipulation and Reflow

The DOM manipulation phase involves updating a JavaScript object, which is an asynchronous process. In contrast, the reflow phase, which updates CSS rules and recomputes computed styles, occurs only when necessary. Since initially hidden elements have no computed styles, they don't trigger a reflow during DOM manipulation.

Transition Initial State

As a result, when the transition for 'B' starts, the initial state is not defined because the reflow hasn't occurred yet. This can lead to incorrect transitions.

Forcing a Reflow

To resolve this issue, you can force a reflow before triggering the transition. You can achieve this using Element.getBoundingClientRect() or element.offsetHeight, which require up-to-date computed values and, therefore, force a reflow.

Improved Example with Force Reflow

Here's a revised code snippet that forces a reflow before animating the transition:

$('button').on('click', function() {
  $('.b').show(); // apply display:block synchronously

  requestAnimationFrame(() => { // wait just before the next paint
    document.body.offsetHeight; // force a reflow
    $('.b').css('right', '80%');
    $('.a').css('right', '80%');
  });
});
ログイン後にコピー

By forcing a reflow before the transition is triggered, you ensure that the computed values are up-to-date, allowing the transition to work correctly.

以上が最初に非表示にしたときに要素の遷移が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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