为了账号安全,请及时绑定邮箱和手机立即绑定

检测用户是否离开标签,Vuejs

检测用户是否离开标签,Vuejs

当年话下 2022-06-09 11:13:39
我在这里找到了一个很好的例子,看起来符合我的需要,我尝试在我的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;        }      };    },}
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

那是因为this分配给window.onfocus等的函数中的 不是指 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);

    }

}


查看完整回答
反对 回复 2022-06-09
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信