【问题标题】:removeEventListener won't removeremoveEventListener 不会删除
【发布时间】:2023-01-25 23:57:40
【问题描述】:

我知道这个问题被问了很多,但我一定忽略了一些东西,因为我无法弄清楚为什么我不能在下面的代码中删除事件监听器。

有人可以帮我吗?我错过了什么?

function winResize() {

    viewportWidth = window.innerWidth;
    viewportHeight = window.innerHeight;

    const $sidebar = document.querySelector('.sidebar');
    const $purchaseFormFixed = document.querySelector('form.purchase-form');

    function checkFromTop() {
        ...
    }

    if ( viewportWidth >= '1000' ) {
        let sidebarHeight = $sidebar.offsetHeight;
        let space = viewportHeight - (sidebarHeight + 50);

        if ( space > '0' ) {
            window.removeEventListener('scroll', checkFromTop, false);
            $sidebar.classList.add('sticky');
            $purchaseFormFixed.classList.remove('show');
        } else {
            window.addEventListener('scroll', checkFromTop, false);
            $sidebar.classList.remove('sticky');
        }
    }

}
window.addEventListener('resize', winResize);
winResize();    

【问题讨论】:

  • @Andy 条件运行正确 - removeEventListener 只是没有删除

标签: javascript


【解决方案1】:

checkFromTop 函数定义移到 winResize 之外,以便将相同的函数引用传递给 removeEventListener

【讨论】:

  • 是的,一般来说,函数不应该嵌套。
【解决方案2】:

你试过window.onscroll = null;吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2011-08-15
    • 1970-01-01
    • 2018-03-24
    • 2022-12-31
    相关资源
    最近更新 更多