zoukankan      html  css  js  c++  java
  • 浏览器切换窗口事件

    方法来源:张鑫旭博客

    今天有个需求,浏览器页面切换时执行一下事件,但是F5刷新页面时,不需要执行。网上找到了解决办法。

    考虑到浏览器兼容性,封装的公用对象,这个对象有俩个属性,一个方法,如下:

    var pageVisibility = (function() {
        var prefixSupport, keyWithPrefix = function(prefix, key) {
            if (prefix !== "") {
                // 首字母大写
                return prefix + key.slice(0,1).toUpperCase() + key.slice(1);    
            }
            return key;
        };
        var isPageVisibilitySupport = (function() {
            var support = false;
            if (typeof window.screenX === "number") {
                ["webkit", "moz", "ms", "o", ""].forEach(function(prefix) {
                    if (support == false && document[keyWithPrefix(prefix, "hidden")] != undefined) {
                        prefixSupport = prefix;
                        support = true;   
                    }
                });        
            }
            return support;
        })();
        
        var isHidden = function() {
            if (isPageVisibilitySupport) {
                return document[keyWithPrefix(prefixSupport, "hidden")];
            }
            return undefined;
        };
        
        var visibilityState = function() {
            if (isPageVisibilitySupport) {
                return document[keyWithPrefix(prefixSupport, "visibilityState")];
            }
            return undefined;
        };
        
        return {
            hidden: isHidden(),   // 当前tab窗口离开时为true,进入时为false
            visibilityState: visibilityState(),   // 当前tab窗口离开时为hidden,进入时为visible
            visibilitychange: function(fn, usecapture) {   // 当前tab窗口离开或者进入时会执行该事件
                usecapture = undefined || false;
                if (isPageVisibilitySupport && typeof fn === "function") {
                    return document.addEventListener(prefixSupport + "visibilitychange", function(evt) {
                        this.hidden = isHidden();
                        this.visibilityState = visibilityState();
                        fn.call(this, evt);
                    }.bind(this), usecapture);
                }
                return undefined;
            }
        };    
    })(undefined);

     需要时调用对象的 visibilitychange 方法:

    pageVisibility.visibilitychange(function(){
        if(!pageVisibility.hidden){   // 页面进入时才执行
            console.log("你切换回当前页面啦...");
        }
    })
  • 相关阅读:
    定义 : angular view 和controller 之前的 ng-init 由谁来负责
    pl/sql如何在云端服务器上新建数据库
    oracle连接服务器上数据库
    svn check下来的代码在eclipse中没有run on server
    sql server在修改表结构后不能保存
    用mybatis-generator自动生成代码报“前言中不允许有内容”
    启动Tomact时报failed to start conponent
    spring MVC中controller失效
    maven项目中连接sqlserver和mysql的区别
    DBCP连接池的配置
  • 原文地址:https://www.cnblogs.com/xulinjun/p/11452001.html
Copyright © 2011-2022 走看看