我使用此代码在滚动时获取页面中元素的偏移量,但滚动功能仅执行一次并提醒viewportWidth然后它停在' off'变量
这是原始脚本中的一个简单示例,它不仅仅是将#menuIcon设置为始终固定
$(document).ready(function(){
document.body.style.overflow = "hidden";
var viewportWidth = $(window).innerWidth();
document.body.style.overflow = "";
window.onscroll = scrolls(viewportWidth);
});
function scrolls(viewportWidth){
alert(viewportWidth);
if(viewportWidth>100 && viewportWidth<=820){
alert('test');
var w = $(window);
var offset = $("#menuIcon").offset();
var off = offset.top-w.scrollTop();
if(off<='10'){
$("#menuIcon").css({"position":"fixed","top":"20px"});
}
}
}
答案 0 :(得分:2)
问题是onscroll
被分配了运行scrolls(viewportWidth)
的结果,但你真正想要的是给onscroll
一个运行的函数。如果您想通过viewportWidth
,则可以执行以下操作:
window.onscroll = function() {
scrolls(viewportWidth);
};
您更新的JSFiddle:https://jsfiddle.net/n8vms2js/6/
答案 1 :(得分:1)
当你这样做时,你正在将函数的结果附加到onscroll事件:
window.onscroll = scrolls(viewportWidth);
相反,你必须像这样附加callable:
window.onscroll = scrolls;
然后通过获取函数内部的视口宽度来调整它的需要,或者使用anonimous函数以预先计算的视口宽度调用滚动函数,如下所示:
window.onscroll = function () {scrolls(viewportWidth)};
小提琴: