js如何处理同时发生的事件?

例如

window.addEventListener('pagehide', () => {
  // 其他逻辑
  print();
});
document.addEventListener('visibilitychange', () => {
  // 其他逻辑
  print();
});

function print() {
  console.log(1)
}

刷新页面的时候都会触发pagehidevisibilitychange,同时执行了一个print的方法,但我现在想要触发最后那一次print的逻辑该如何设计呢?就是有一个类似于节流的概念,请大佬指点一下~

阅读 1.9k
2 个回答

你需要的应该是防抖函数:

function debounce(fn, delay) {
    var timer;
    return function() {
        if (timer) clearTimeout(timer);
        var context = this;
        var args = arguments;
        timer = setTimeout(function() {
            fn.apply(context, args);
        }, delay);
    }
}
window.addEventListener("pagehide", debounce(() => {
    // 其他逻辑
    print();
}, 150));
document.addEventListener("visibilitychange", debounce(() => {
    // 其他逻辑
    print();
}, 150));
function print() {
    console.log(1);
}

两种事件是有些重合的吧,如果你是想做safari的兼容性的话,那就判断一下浏览器环境呗,如果是safari浏览器就使用pagehide触发回调,其他浏览器就使用visibilitychange触发回调。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏