【问题标题】:Attach scroll event handler to an dynamically created element将滚动事件处理程序附加到动态创建的元素
【发布时间】:2021-11-10 07:51:51
【问题描述】:

我正在使用simplescroll bar (SSB),它会在页面加载时在我的滚动内容周围添加包装器。我需要附加一个事件监听器,它可以在滚动上工作。

没有SSB简单

document.querySelector(".element").parentNode.addEventListener('scroll', handler);

确实有效。但是现在不行了,因为右边的.parentNode还不存在,后面会被SSB后台添加(不知道什么时候,不知道怎么做,也没法控制它)。

如何将滚动处理程序附加到动态创建的(不是由我创建的)元素?

通过点击事件,我确实使用了这样的功能

function addPostponedEventListener(selector, eventName, handler)
{
    document.addEventListener(
        eventName, 
        e => 
        {
            const el = e.target;
        
            if (el.closest(selector))
            {
                handler();
            }
        }
    )
}
addPostponedEventListener('.element', 'scroll', handler);

但它只适用于冒泡,并且冒泡似乎对滚动事件被禁用,所以它不起作用。

【问题讨论】:

    标签: javascript events scroll


    【解决方案1】:

    感谢this answer我能够做到:

    function addPostponedEventListener(selector, eventName, handler)
    {
        let interval = setInterval(() => 
        {
            let el = document.querySelector(selector);
            if (el)
            {
                el.addEventListener(eventName, handler);
                clearInterval(interval);
            }
        }, 100);
    }
    

    【讨论】:

    • MutationObserver 听起来很棒!你能用它来回答吗?不依赖 jQuery,$ 只是一个自定义的 1 行函数,我已将其从我的答案中删除,谢谢。
    • @Ouroborus,我没有,我只是将 ss-container 属性添加到我的滚动面板中。它会自动初始化。
    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多