2 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
問題是你總是調(diào)用fadeTo(),即使你不需要。當(dāng)您滾動(dòng)通過y > 400時(shí),fadeTo(400, 0)將調(diào)用 (fade out)。但是,當(dāng)您進(jìn)一步向下滾動(dòng)時(shí),fadeTo(400, 0)即使該元素不再可見,您也會繼續(xù)調(diào)用。
我不完全確定為什么淡出需要這么長時(shí)間,但我想這與在短時(shí)間內(nèi)鏈接大量動(dòng)畫請求有關(guān)。
您可以通過跟蹤元素的可見性來解決問題。我添加了以下內(nèi)容:
if (y <= 400 == isVisible) return;
// or if you find the above confusing
if (y <= 400 && isVisible || y > 400 && !isVisible) return;
如果不必更改可見性,這會提前退出回調(diào)。這個(gè)保護(hù)子句確保fadeTo()只在實(shí)際需要時(shí)調(diào)用它。
另一件有助于提高性能的事情是確保您$("#intro-section")事先保存在變量中。你不應(yīng)該忘記這$()是一個(gè)函數(shù),每次調(diào)用它時(shí)都必須在 DOM 中搜索提供的查詢選擇器。把它想象成findSelectorInDOM("#intro-section"). 將結(jié)果緩存在變量中可能會大大加快速度,尤其是當(dāng)您$()經(jīng)常使用相同的參數(shù)調(diào)用時(shí)。
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>

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
您在滾動(dòng)時(shí)多次調(diào)用 FadeTo,因此它在嘗試淡入時(shí)仍然淡出。此代碼已經(jīng)過測試并且可以正常工作。
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');
}
}
});
添加回答
舉報(bào)