javascript - 检测用户是否离开选项卡,Vuejs

标签 javascript vue.js vuejs2

我找到了一个很好的例子here这看起来符合我的需要,我尝试在我的 Vuejs 应用程序中实现它。 ,但到目前为止,该代码没有检测到任何更改,也没有错误。

data() {
    return {
      tabFocus:false,
    }
}

created() {
  this.detectFocusOut();
},

watch:{
    tabFocus(value) {
      console.log("New value:", value);
    },
}

 methods:{
    detectFocusOut() {
      console.log("It is here");
      var inView = false;
      window.onfocus = window.onblur = window.onpageshow = window.onpagehide = function(
        e
      ) {
        if ({ focus: 1, pageshow: 1 }[e.type]) {
          if (inView) return;
          this.tabFocus = true;
          inView = true;
        } else if (inView) {
          this.tabFocus = !this.tabFocus;
          inView = false;
        }
      };
    },
}

最佳答案

这是因为分配给window.onfocus等的函数中的this并不是指VueJS应用程序本身,而是指window 对象。如果将其转换为箭头函数,它应该可以工作:

methods:{
    detectFocusOut() {
        console.log("It is here");
        var inView = false;
        window.onfocus = window.onblur = window.onpageshow = window.onpagehide = (e) => {
            if ({ focus: 1, pageshow: 1 }[e.type]) {
                if (inView) return;
                this.tabFocus = true;
                inView = true;
            } else if (inView) {
                this.tabFocus = !this.tabFocus;
                inView = false;
            }
        };
    },
}

就我个人而言,我建议不要进行菊花链分配。您可以简单地将所有逻辑抽象为一个函数:

methods:{
    detectFocusOut() {
        let inView = false;

        const onWindowFocusChange = (e) => {
            if ({ focus: 1, pageshow: 1 }[e.type]) {
                if (inView) return;
                this.tabFocus = true;
                inView = true;
            } else if (inView) {
                this.tabFocus = !this.tabFocus;
                inView = false;
            }
        };

        window.addEventListener('focus', onWindowFocusChange);
        window.addEventListener('blur', onWindowFocusChange);
        window.addEventListener('pageshow', onWindowFocusChange);
        window.addEventListener('pagehide', onWindowFocusChange);
    }
}

关于javascript - 检测用户是否离开选项卡,Vuejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60952273/

相关文章:

javascript - 我如何知道组件是否包含指令绑定(bind)

javascript - 绑定(bind)对象到Vue多选

javascript - Vue 组件没有出现在 laravel 中

javascript - 属性 <position> 的值无效

javascript - 谁能向我解释这段定义一些变量并循环它们的 JavaScript 代码?

javascript - 如何选中数据表中的所有复选框

javascript - v-for 和自定义组件的未定义行为

javascript - Vuejs从数组中删除元素无法完全删除

javascript - for-in 循环 VS in-operator

javascript - Vuetify 项目组如何预选项目?