一、页面可见性(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的检测能力,主要实现兼容各种浏览器的能力:

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类,提供外部可访问的静态方法和属性:

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

关于HTML面试题汇总之visibility的更多相关文章

  1. 关于HTML面试题汇总之H5

    一.H5有哪些新特性,移除了哪些元素?如何处理h5新标签的浏览器兼容性问题,如何区分html和html5 1. html5不在是SGL(通用标记语言)的一个子集,而包含了:图像.位置.存储.多任务等功 ...

  2. h5的特点

    关于HTML面试题汇总之H5   一.H5有哪些新特性,移除了哪些元素?如何处理h5新标签的浏览器兼容性问题,如何区分html和html5 1. html5不在是SGL(通用标记语言)的一个子集,而包 ...

  3. java面2

    面试试题汇总集: <[面试题]2018年最全Java面试通关秘籍汇总集!> <[面试题]2018年最全Java面试通关秘籍第二套!> <[面试题]2018年最全Java面 ...

  4. 【面试题】2018年最全Java面试通关秘籍汇总集!

    [面试题]2018年最全Java面试通关秘籍汇总集!(转载于互联网)   前几天在交流群里有些小伙伴问面试相关的试题,当时给出了一些问题,苦于打字太累就没写下去了,但觉得这是一个很不负责任的表现,于是 ...

  5. 2019 汇量科技java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.汇量科技等公司offer,岗位是Java后端开发,因为发展原因最终选择去了汇量科技,入职一年时间了,也成为了面 ...

  6. 最新 汇量科技java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 汇量科技等10家互联网公司的校招Offer,因为某些自身原因最终选择了 汇量科技.6.7月主要是做系统复习.项目复盘.Le ...

  7. 最新 汇通达java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 汇通达等10家互联网公司的校招Offer,因为某些自身原因最终选择了 汇通达.6.7月主要是做系统复习.项目复盘.Leet ...

  8. 前端面试题-display:none和visibility:hidden的区别

    一.display:none和visibility:hidden的区别 1.1 空间占据 1.2 回流和渲染 1.3 株连性 二.空间占据 display:none 隐藏后的元素不占据任何空间,而 v ...

  9. 深圳市利汇电子商务科技有限公司2019年java面试笔试题

    垃圾公司,建议不要去,写的地址去了发现是两个公司公用一个办公场地,还没有公司的招牌,去了交简历给前台然后就是 填一份求职申请,一份笔试题如下,然后就等待,先是人事的一个小妹妹面试,问一些个人问题,为什 ...

随机推荐

  1. 将 PAGE_VERIFY 数据库选项设置为 CHECKSUM

    此规则检查 PAGE_VERIFY 数据库选项是否已设置为 CHECKSUM.为 PAGE_VERIFY 数据库选项启用 CHECKSUM 后,SQL Server 数据库引擎会在向磁盘中写入页面时计 ...

  2. Android开发之注册登录

    昨天给大家介绍了一下关于Android端向服务器端发送数据的方法,不过貌似有一点瑕疵,今天经过调试已经解决,在这里给大家介绍一下 貌似Android4.0以后版本的对于网络权限要求变得严格,导致昨天编 ...

  3. 通过js获得选择文件的绝对路径

    <form name="thisform" method="get" action="test.jsp" id="thisf ...

  4. office 2010 安装教程

    Microsoft Office 2010,是微软推出的新一代办公软件,提供了一些更丰富和强大的新功能,开发代号为Office 14,实际是第12个发行版.该软件共有6个版本,分别是初级版.家庭及学生 ...

  5. PhotoShop常用快捷键

    Photoshop常用快捷键: 图01 图02 图03 图04 图05 快捷键 PS快捷键是Photoshop为了提高绘图速度定义的快捷方式,它用一个或几个简单的字母来代替常用的命令. 多种工具共用一 ...

  6. Spark入门实战系列--9.Spark图计算GraphX介绍及实例

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...

  7. Nodejs学习笔记(一)——初识Nodejs

    前言:目前工作的分内之事相对较为单一,希望可以通过工作之余的时间给自己充充电,只是没有一个学伴或大神带,只能说是摸索着前进.起初准备好好研究下Spring这个框架,下载了源码,结合书籍准备一探究竟,看 ...

  8. Hadoop阅读笔记(四)——一幅图看透MapReduce机制

    时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...

  9. JAVA 设计模式 策略模式

    用途 Title 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种行为型模式. 结构

  10. [UWP]涨姿势UWP源码——极简的RSS阅读器

    涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请 ...