亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

fadeTo() 僅在一定延遲后生效

fadeTo() 僅在一定延遲后生效

一只斗牛犬 2023-03-24 14:11:29
我有一個簡單的 JS 代碼,在用戶從頂部滾動一定數量(在本例中為 400)然后淡入所述元素后,我嘗試淡出某個元素(帶有 id“intro-section”的標簽)當用戶從頂部超過某些像素時。這是我正在使用的 JS、JQuery 代碼:問題是 fadeTo() 函數僅在愚蠢的長時間后才顯示動畫效果(淡出在我越過 400px 標記后 20 秒開始,而在我返回后淡入過程開始,一個又一個開始20 秒)。我希望它在我超過 400 像素或小于 400 像素后立即淡入淡出。(我不想使用 fadeIn() 和 fadeOut() 函數,因為它們將顯示設置為無)。這是整個過程的一分鐘長視頻: https ://imgur.com/a/lXQcgWB我不確定 fadeTo() 是否有某種自動添加的延遲,或者我是否做錯了什么。$(document).scroll(function() {  var y = $(this).scrollTop();  console.log(y);  if (y > 400) {    console.log('fading out');    $('#intro-section').fadeTo(400, 0.0);    console.log('done fading out');  } else {    console.log('fading in');    $('#intro-section').fadeTo(400, 1.0);    console.log('done fading in');  }});body {  height: 1000px;}#intro-section {  padding: 2rem;  height: 200px;  width: 200px;  background-color: red;}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  <body><div style="height: 300px">  Scroll down!</div><div id="intro-section">  Intro</div><div style="height: 100vh"></div>  </body>
查看完整描述

2 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

問題是你總是調用fadeTo(),即使你不需要。當您滾動通過y > 400時,fadeTo(400, 0)將調用 (fade out)。但是,當您進一步向下滾動時,fadeTo(400, 0)即使該元素不再可見,您也會繼續調用。


我不完全確定為什么淡出需要這么長時間,但我想這與在短時間內鏈接大量動畫請求有關。


您可以通過跟蹤元素的可見性來解決問題。我添加了以下內容:


if (y <= 400 == isVisible) return;


// or if you find the above confusing

if (y <= 400 && isVisible || y > 400 && !isVisible) return;

如果不必更改可見性,這會提前退出回調。這個保護子句確保fadeTo()只在實際需要時調用它。


另一件有助于提高性能的事情是確保您$("#intro-section")事先保存在變量中。你不應該忘記這$()是一個函數,每次調用它時都必須在 DOM 中搜索提供的查詢選擇器。把它想象成findSelectorInDOM("#intro-section"). 將結果緩存在變量中可能會大大加快速度,尤其是當您$()經常使用相同的參數調用時。


const $introSection = $("#intro-section");

let isVisible = $introSection.is(":visible");


$(document).scroll(function() {

  const y = $(this).scrollTop();

  console.log(y);

  

  if (y <= 400 == isVisible) return;  

  isVisible = !isVisible;

  const opacity = +isVisible;

  

  console.log(`start fading to ${opacity}`);

  $introSection.fadeTo(400, opacity, () => {

    console.log(`done fading to ${opacity}`);

  });

});

#intro-section {

  padding: 4rem;

}


#intro-section .row {

  padding: 4rem 8rem 7rem 8rem;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div style="height: 300px">

  Scroll down!

</div>


<div id="intro-section">

  Intro

</div>


<div style="height: 100vh">

</div>


查看完整回答
反對 回復 2023-03-24
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

您在滾動時多次調用 FadeTo,因此它在嘗試淡入時仍然淡出。此代碼已經過測試并且可以正常工作。


let fading = false;


jQuery(document).scroll(function() {

    var y = jQuery(this).scrollTop();

    console.log(y);

    if(!fading) {

        fading = true;

        if (y > 400) {

            console.log('fading out');

            jQuery('#intro-section').fadeTo(400, 0.0, () => fading = false);

            console.log('done fading out');

        } else {

            console.log('fading in');

            jQuery('#intro-section').fadeTo(400, 1.0, () => fading = false);

            console.log('done fading in');

        }

    }



});


查看完整回答
反對 回復 2023-03-24
  • 2 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號