首頁 > web前端 > js教程 > 主體

為什麼我的 CSS 轉換會跳過並且回呼無法觸發?

Mary-Kate Olsen
發布: 2024-10-31 08:48:29
原創
780 人瀏覽過

Why Does My CSS Transition Skip and the Callback Fail to Fire?

CSS 轉換未啟動或未呼叫回呼:分析

您的問題源自於 CSS 轉換和瀏覽器的怪癖渲染過程。最初,您使用 CSS 位置值內嵌 HTML,在 left 和 top 屬性上設定過渡。新增位置值後,您預計會發生轉換,但它跳過了,沒有觸發回呼。

有趣的是,添加 1ms setTimeout 來包裝樣式更改啟動了轉換。然而,有時回調仍未觸發。此行為可以歸因於瀏覽器的計時。

說明:

設定新樣式時,瀏覽器尚未將內聯樣式套用於計算樣式。元素的計算樣式對於 left 和 top 屬性保持未設置,預設為 0px。稍後應用的任何過渡都只是與設定值匹配,不會發生任何過渡。

要解決此問題,必須強制回流以更新樣式。這可以使用 offsetHeight getter 或其他觸發回流的類似方法來完成。

使用 offsetHeight 的範例:

<code class="javascript">let tablehtml = `
<div id="spanky" 
  style="position: absolute; 
    left: 10px; 
    top: 10px; 
    background-color:blue; 
    width:20px; 
    height:20px;
    transition: left 1000ms linear 0s, top 1000ms linear 0s;">
</div>`;

document.body.innerHTML += tablehtml;

let animdiv = document.getElementById('spanky');
animdiv.addEventListener("transitionend", function(event) { 
  animdiv.style.backgroundColor='red';
}, false);
// force a reflow
animdiv.offsetTop;
// now animdiv will have all the inline styles set
// it will even have a proper display

animdiv.style.backgroundColor='green';
Object.assign(animdiv.style, {
  left: "100px", 
  top: "100px" 
});</code>
登入後複製

以上是為什麼我的 CSS 轉換會跳過並且回呼無法觸發?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!