onscroll事件仅执行一次
onscroll event executes only once
我使用此代码在滚动时获取页面中元素的偏移量,但滚动函数仅执行一次并提醒视口宽度,然后它停止在"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"});
}
}
}
斯菲德尔
问题是onscroll
被分配了运行scrolls(viewportWidth)
的结果,但你真正想要的是给onscroll
一个运行函数。如果你想通过viewportWidth
,你可以改为:
window.onscroll = function() {
scrolls(viewportWidth);
};
您更新的 JSFiddle: https://jsfiddle.net/n8vms2js/6/
当你这样做时,你正在将函数的结果附加到onscroll事件:
window.onscroll = scrolls(viewportWidth);
相反,您必须像这样附加可调用对象:
window.onscroll = scrolls;
然后通过获取函数内的视口宽度来使其适应您的需求,或者使用匿名函数使用预先计算的视口宽度调用您的 scrolls 函数,如下所示:
window.onscroll = function () {scrolls(viewportWidth)};
小提琴:
- https://jsfiddle.net/n8vms2js/3/
- https://jsfiddle.net/n8vms2js/4/
相关文章:
- 主干模型更改事件只触发一次
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 在单击事件中,第一次单击时激发代码一次,其余代码在所有单击时运行
- 简单的onclick事件只起过一次作用
- 一次点击,两次'单击'事件已启动
- Javascript事件发射器一次处理多个事件
- jQuery单击事件在一次之后不会触发
- JQuery只检查了一次事件工作
- 只为构造函数的所有实例触发一次事件侦听器
- 如何只调用一次事件处理程序,而不是每次单击项目时调用事件处理程序
- 在鼠标悬停时添加事件,如何只添加一次事件
- 每 60 秒仅启动一次事件 (JavaScript)
- 主干分组依据集合仅在一次事件单击后呈现
- 在没有jquery的情况下只执行一次事件侦听器函数
- 如何在Javascript中只执行一次事件处理程序
- jquery只在静态和动态元素上触发一次事件
- 在获得一次事件后删除ng单击事件
- HTML5 -视频播放时每隔几秒触发一次事件
- 为多个控件注册一次事件处理程序-是否可能
- 只运行一次事件