前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于HTML面试题汇总之visibility

关于HTML面试题汇总之visibility

作者头像
sam dragon
发布2018-01-17 10:44:47
7940
发布2018-01-17 10:44:47
举报
文章被收录于专栏:cnblogscnblogs

一、页面可见性(visibility)

主要提供两个属性,一个事件(都在document对象上): 1. 属性:    1.1.  hidden:获取或设置当前页面的可见性,boolean值;    1.2. visibilityState: 获取当前页面可见性状态,值为hidden、visibility其中一个 2. 事件:visibilityChange:页面可见性发生改变时触发的事件

3. 由于各类浏览器的支持情况不一致,都需要加上私有属性的前缀,如 webkit、moz、ms、o等。在ie9-不支持。

3. 可见性的应用场景:   3.1. 视频播放的切换   3.2. 用户状态的验证

二、代码示例:

2.1. Utils类,提供page visibility的检测能力,主要实现兼容各种浏览器的能力:
代码语言:javascript
复制
const BROWER_PREFIX = ['webkit','moz','ms','o',''];
class Utils{
    constructor(){
      this.isPageVisibilitySupport = false;
      this.prefix = '';
    }
    /**
     * 获取驼峰命名格式的属性名
     * @param prefix {string} 前缀
     * @param value {string} 属性名
    */
    prefixToCamel( prefix, value){
      if(prefix){
        return prefix + value.slice(0,1).toUpperCase() + value.slice(1);
      }
      return value;
    }
    calculatePageVisibilitySupport(){
        var that = this;
        BROWER_PREFIX.forEach(function (data) {
          if(!that.isPageVisibilitySupport && document[that.prefixToCamel(data,'hidden')] != undefined ){
            that.isPageVisibilitySupport = true;
            that.prefix = data;
          }
        });
        return that.isPageVisibilitySupport;
    }
    isHidden(){
        if(this.calculatePageVisibilitySupport()){
            return document[this.prefixToCamel(this.prefix,'hidden')];
        }
        return undefined;
    }
    visibilityState(){
        if(this.calculatePageVisibilitySupport()){
            return document[this.prefixToCamel(this.prefix,"visibilitystate")];
        }
        return undefined;
    }
} 
export default Utils;
2.2. core类,提供外部可访问的静态方法和属性:
代码语言:javascript
复制
import utils from 'src/utils';
var _utils = new utils();
class Core {
    static visibilityChange(callback){
        if( _utils.calculatePageVisibilitySupport() && typeof callback == 'function'){
            return document.addEventListener(Core.prefix + 'visibilitychange',function(event){
                this.hidden = Core.hidden;
                this.visibilityState = Core.visibilityState;
                callback.call(this,event);
            });
            return undefined;
        }
    }
}
Core.hidden = _utils.isHidden();
Core.visibilityState = _utils.visibilityState();
export default Core;

visibilityChange方法:实现page visibility值改变时触事件绑定。

三、源码GIT地址

此包通过karma框架 + jasmine进行单元测试。源码通过babel

git@code.csdn.net:cqhaibin/visibilityproject.git

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、页面可见性(visibility)
  • 二、代码示例:
    • 2.1. Utils类,提供page visibility的检测能力,主要实现兼容各种浏览器的能力:
      • 2.2. core类,提供外部可访问的静态方法和属性:
      • 三、源码GIT地址
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档