如何删除 DOM 就绪处理程序,以便可以触发 Javascript 函数

How to remove a DOM ready handler so a Javascript function can be fired on

本文关键字:函数 Javascript 程序 处理 何删除 删除 就绪 DOM      更新时间:2023-09-26

我在JS中制作了一个模块(没有jQuery),它根据来自客户端浏览器的数据(获取浏览器宽度,高度并做适当的事情......等)更改网页的背景图像,但我只知道如何通过DOM eventListeners在页面加载时初始化它,我希望能够通过单击或其他用户驱动的事件触发它。

我不认为我完全掌握了在不使所有其他代码无法使用的情况下删除 EventListener 需要做什么,这是我自己尝试的最终结果。

任何

正确方向的点将不胜感激 - 下面是脚本调用的前几个函数:

// the initialization of the page
bindReady(function(){
    startBGResize();
});
// DOM ready handler
function bindReady(handler){
    var called = false;
    var ready = function() {
        if (called) return;
        called = true;
        handler();
    };
    if (document.addEventListener) {
        document.addEventListener('DOMContentLoaded', ready, false);
    } else if (document.attachEvent) {
        if (document.documentElement.doScroll && window == window.top) {
            var tryScroll = function(){
                if (called) return;
                if (!document.body) return;
                try {
                    document.documentElement.doScroll('left');
                    ready();
                } catch(e) {
                    setTimeout(tryScroll, 0);
                }
            };
            tryScroll();
        }
        document.attachEvent('onreadystatechange', function(){
            if (document.readyState === 'complete') {
                ready();
            }
        });
    }
    if (window.addEventListener) window.addEventListener('load', ready, false);
    else if (window.attachEvent) window.attachEvent('onload', ready);
}
如果你想在

单击某个元素时调用startBGResize,你可以这样做:

var element = document.querySelector("CSS selector for the element that you'll click");
if (element.addEventListener) {
    element.addEventListener("click", startBGResize, false);
} else if (element.attachEvent) {
    element.attachEvent("onclick", startBGResize);
}

这适用于所有现代浏览器,也适用于IE8。

如果你

要定期钩接事件(如果你需要在更高版本的IE中支持IE8或"兼容性"模式),你可能希望从另一个答案中获取hookEvent函数,而不是每次都对if语句进行编码(hookEvent也做补丁stopPropagation等事情)。