在JavaScript中将setTimeout作为事件处理程序无限期运行

kjthegm6  于 2023-01-11  发布在  Java
关注(0)|答案(3)|浏览(263)

我构建了一个完全依赖JavaScript的页面,每当用户点击链接或按钮时,它就会改变URL的哈希值(#doSomething)。
我已经设置了一个函数,每200ms检查一次哈希值的变化,换句话说,一个自定义的事件处理程序,并根据值运行一些代码。现在看起来很好,因为我还在开发过程中,我的页面很轻。
我的问题是,让一个脚本无限期地运行检查这个值是否可以?或者当页面有更多的内容和东西要处理时,是否会影响性能?
是否有更好的方法来设置脚本以检测URL哈希的更改?
下面是我的脚本:

var currenthash = (window.location.hash)?window.location.hash: '';
addEvent(window,'load',function () {
    if (currenthash != ''){
        hashChanged();
    }
    var timeInterval = setInterval(function () {
        if (window.location.hash != currenthash) {
            hashChanged();
            currenthash = window.location.hash;
        }
    },1000);
});

var hashChanged = function (str) {
    var id = window.location.hash.replace("#",'');
    var selected = $id(id);
    // do some more stuff

    }
}
vsikbqxv

vsikbqxv1#

如果它每隔1000毫秒检查一次(我通常在100运行我的),这应该不是问题,但是如果存在的话,请考虑使用本机事件处理程序(hashchange)...

if ('onhashchange' in window) {
    addEvent(window, 'hashchange', hashChanged);
} else {
   // Poll like normal.
}

这将保存您必须在支持此事件的现代浏览器中进行投票。

jrcvhitl

jrcvhitl2#

如果散列只在点击时改变,为什么不在文档上设置点击监听器,根本不需要setInterval或setTimeout,并且函数只在需要时运行。

nlejzf6q

nlejzf6q3#

只要间隔时间不是太短,就没有问题。

相关问题