一、页面可见性(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. KlayGE 4.4中渲染的改进(二):DR的其他改进

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2749   上一篇讲了TBDR的实现,本篇继续讲解deferred rendering层的一些 ...

  2. Create New Commands in Tcl

    Create New Commands in Tcl eryar@163.com 摘要Abstract:Tcl/Tk脚本可以很容易实现用户自定义的命令,方便的创建图形化的用户界面GUI,所以Tcl和T ...

  3. android 手机开启debug日志

    来自 http://blog.csdn.net/aikongmeng/article/details/9764297 真机默认是不开启Log 开关的,这么来说我们如果使用真机来搞程序测试的话,需要做以 ...

  4. CircularSeekBar

    /** * @author Raghav Sood * @version 1 * @date 26 January, 2013 */ package com.appaholics.circularse ...

  5. (转)清理AIX的/var文件系统大小

    在ROOTVG空间有限,且/var文件系统的空间已经足够大的情况下,/var文件系统空间快满了,这种情况怎么处理?IBM给了一个很好的处理流程: 使用find 命令检查在/var目录中所有大于1MB的 ...

  6. PHP API接口测试小工具

    前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性. 后面利用PHP的curl实现Post请求,检验API接口的正确性:配合前面做的一个 ...

  7. 敏捷个人-认识自我,管理自我 v0.8.pdf 下载

    2009年我在blog上写了个人管理系列的一些blog,其中一些文章深受大家的喜欢.想到写这个系列是源于在实施敏捷Scrum方法时,对方法实施是否对人的水平需要高要求的一些思考.自组织团队是建立在敏捷 ...

  8. JS魔法堂:IMG元素加载行为详解

    一.前言 在<JS魔法堂:jsDeferred源码剖析>中我们了解到img元素加载失败可以作为函数异步执行的优化方案,本文打算对img元素的加载行为进行更深入的探讨. 二.资源加载的相关属 ...

  9. 【iOS】关联属性存取数据

    有时候我们需要在现有的类存放一些额外的信息,通常的做法是继承一个子类,然后定义新增加的属性,然而如果我们为每个需要的类都添加一个类显得太麻烦了,objc提供了一个关联属性的特性,可以给一个对象关联一个 ...

  10. 【C#】分享一个可灵活设置边框的Panel

    ---------------------------更新:2014-05-19--------------------------- 优化了一下逻辑,就是既然可以通过设置BorderSide=Non ...