Javascript 屏幕调整大小后使用旧值滚动事件

Javascript 屏幕调整大小后使用旧值滚动事件,javascript,jquery,resize,Javascript,Jquery,Resize,我希望你做得很好,并祝你新年快乐 我试图用jquery完成一件简单的事情。我想有一个函数,可以在加载时调用,调整大小,并在其中有一个滚动事件监听器。此函数在加载时设置一个标志,该标志在scroll事件中用于执行某些计算 这是我的密码: jQuery function rezval() { var alpha = false; document.getElementById('output').innerHTML = ''; window.addEventListener(

我希望你做得很好,并祝你新年快乐

我试图用jquery完成一件简单的事情。我想有一个函数,可以在加载时调用,调整大小,并在其中有一个滚动事件监听器。此函数在加载时设置一个标志,该标志在scroll事件中用于执行某些计算

这是我的密码:

jQuery

function rezval() {
    var alpha = false;
    document.getElementById('output').innerHTML = '';
    window.addEventListener('scroll', function(e){
        //Some calculations here
        document.getElementById('output').innerHTML += alpha + '\r';
        alpha = true; //Updating flag
    });
}
$(window).resize(function() {
    rezval();
});
$(window).load(function() {
    rezval();
});
HTML

我希望此函数在调用/调用变量“alpha”时将其值设置为false(最初),并在滚动事件结束时更新flag的值(稍后我将使用if条件和用于计算的标志)。我输出alpha的值只是为了突出问题

当我第一次运行load函数时,它工作得非常好。我得到以下输出:

false true true true...
当我调整窗口大小时,问题就出现了。我得到的输出类似于

true false false false true true true.....
我不明白为什么会出现这种情况

1) 当它应该为false时,作为第一个输出为True。它就像滚动事件一样缓存变量并调用它

2) 当应该只有一个输出时,输出中有多个false

我还设置了一个JSFIDLE来复制此问题:


任何帮助都将不胜感激。先谢谢你

您需要全局初始化
alpha变量

var alpha = false; // alpha is global here, now
function rezval() {
    document.getElementById('output').innerHTML = '';
    window.addEventListener('scroll', function(e){
        //Some calculations here
        document.getElementById('output').innerHTML += alpha + '\r';
        alpha = true; //Updating flag
    });
}
// also you need to reinit again in resize function
$(window).on('resize', function() {
    alpha = false;
    rezval();
}).resize();
var alpha=false;
函数rezval(){
document.getElementById('output')。innerHTML='';
window.addEventListener('scroll',函数(e){
document.getElementById('output')。innerHTML+=alpha+'\r';
α=真;
});
}
$(窗口).on('resize',function()){
α=假;
rezval();
}).resize();
正文{
高度:2000px;
背景:#333;
溢出x:隐藏;
}
.输出部门{
字体大小:14px;
颜色:#fff;
宽度:1000px;
}

试试这个

 var alpha = false;
    function rezval() {

        document.getElementById('output').innerHTML = '';
        window.addEventListener('scroll', function(e){
            document.getElementById('output').innerHTML += alpha + '\r';
            alpha = true;
        });
    }
    $(window).on('resize', function() {
        alpha = false;
        rezval();

}).resize();

感谢您的帮助,但是如果变量alpha在屏幕上不在函数范围内,我如何重置它的值呢?请参阅我更新的答案和演示,在整个页面中运行代码片段以查看调整大小事件和滚动条。太好了。非常感谢你帮助我,太好了。非常感谢你帮助我。
var alpha = false; // alpha is global here, now
function rezval() {
    document.getElementById('output').innerHTML = '';
    window.addEventListener('scroll', function(e){
        //Some calculations here
        document.getElementById('output').innerHTML += alpha + '\r';
        alpha = true; //Updating flag
    });
}
// also you need to reinit again in resize function
$(window).on('resize', function() {
    alpha = false;
    rezval();
}).resize();
 var alpha = false;
    function rezval() {

        document.getElementById('output').innerHTML = '';
        window.addEventListener('scroll', function(e){
            document.getElementById('output').innerHTML += alpha + '\r';
            alpha = true;
        });
    }
    $(window).on('resize', function() {
        alpha = false;
        rezval();

}).resize();