“静态”变量持有保持元素失去价值

时间:2014-02-08 00:32:11

标签: javascript element

所以我正在尝试为元素滚动条创建一个“软自动滚动”功能,基本上它的意思是调用然后为你滚动一个元素。但是正如你在下面的代码中看到的那样,我将函数封装在一个自动调用函数中,该函数将元素保存在“element”中。但是,当它首次从行else if (pos>element.scrollHeight)返回的函数中读取变量时,元素将返回为null

'use strict';
window.onload=(function() 
{
    window.scrollTo=(function()
    {
        var element=document.getElementById('more_info'),
            ease=function(pos)
            {
                var diff=(pos-element.scrollTop).
                    increment=(diff / Math.abs(diff));

                if (Math.abs(diff)<1)
                {
                    element.scrollTop=pos;
                    return;
                }

                else if (Math.abs(diff)<30)
                {
                    element.scrollTop+=1-(increment / diff);
                }

                else 
                {
                    element.scrollTop+=increment*10;
                }

                window.setTimeout(ease,1000 / 10);
            };
        return function(pos)
        {
            if (pos<0) {pos=0;}
            else if (pos>element.scrollHeight) {pos=element.scrollHeight;}
            ease(pos);
        };
    }());
}());

我更新了代码,以便在文档加载后调用它,但是我的调试器似乎显示在window.onload之前仍然调用了var元素

1 个答案:

答案 0 :(得分:2)

您正在立即执行onload功能。

window.onload = (function () {
  ...
}());

这使得函数execute 然后将返回的值赋值为onload处理程序。这意味着它在DOM准备好之前执行。更改它以删除自我执行。

window.onload = function () {
  ...
};