【发布时间】:2019-08-24 23:47:11
【问题描述】:
根据滚动位置平滑固定元素的正确方法是什么? 我尝试对滚动侦听器进行去抖动以提高性能,但固定不准确。即使将去抖动设置为 10 毫秒,它也不平滑,并且元素也不会干净地捕捉到其初始位置。
var scrolling = false;
var stickPosY = 100;
var heights = [];
$(".element").each( function(index) {
heights[index] = $(".element[data-trigger=" + index + "]").offset().top;
});
function pin() {
if ( !$("#aside").hasClass("fixed") ) {
var stickyLeft = $("#aside").offset().left;
var stickyWidth = $("#aside").outerWidth();
var stickyTop = $("#aside").offset().top - stickPosY;
$("#aside").addClass("fixed");
$("#aside").css({"left": stickyLeft, "top": stickyTop, "width": stickyWidth});
}
}
function unpin() {
$("#aside").css({"left": "", "top": "", "width": ""});
$("#aside").removeClass("fixed")
}
$( window ).scroll( function() {
scrolling = true;
});
setInterval( function() {
if ( scrolling ) {
scrolling = false;
var y = window.scrollY;
console.log(y);
// PIN SIDEBAR
y > stickPosY ? pin() : unpin();
//TRIGGERS
for (var i=0; i < heights.length; i++) {
if (y >= heights[i]) {
$('.element[data-trigger="' + i + '"]').addClass("blue");
}
else {
$('.element[data-trigger="' + i + '"]').removeClass("blue");
}
}
}
}, 250 );
这是我的Pen
我尝试在带有大头针和其他触发器的场景中使用 scrollMagic 进行项目,但滚动不是很流畅。所以我试图用一个精简的版本和去抖动的监听器来重建它。这种方法是否可行,还是我应该尝试优化我的 scrollMagic 场景?
【问题讨论】:
标签: javascript jquery performance scroll debounce