一、简介

  浏览器全屏有两种方式,一种是HTML5新增的requestFullscreen全屏,另一种是摁F11实现的全屏,本文将详解两种全屏的特点以及其实现。

二、requestFullscreen全屏

  1、判断是否支持全屏

  通过判断元素的requestFullscreen函数是否存在与document.fullscreenEnabled是否为True判断浏览器是否支持全屏或启用全屏,兼容写法为

  

    function supportfull(){
var requestFullscreen =
document.body.requestFullscreen ||
document.body.webkitRequestFullscreen ||
document.body.mozRequestFullScreen ||
document.body.msRequestFullscreen;
var fullscreenEnabled =
document.fullscreenEnabled ||
document.mozFullScreenEnabled ||
document.webkitFullscreenEnabled ||
document.msFullscreenEnabled;
return !!(requestFullscreen && fullscreenEnabled);
}

  注意,requestFullscreen方法不存在于document对象上,并且注意字母s的大小写

  2、进入全屏

  通过调用元素的requestFullscreen方法使元素进入全屏,使用时应注意:

  (1)requestFullscreen在document对象上没有定义。

  (2)requestFullscreen方法只能由用户操作触发(如onclick事件),在onload事件中调用此方法将无效。

  (3)当一个元素全屏时,再让其子元素全屏是无效的,必须先退出全屏。

  (4)返回或跳转页面将退出全屏。

  (5)进入全屏的元素其父元素将不再是全屏之前的父元素,此时之前的css可能失效,:full-screen伪类可以为元素添加全屏时的样式(使用时为了兼容请加-webkit、-moz或-ms前缀)。

  下面给出,进入全屏的JS代码的兼容写法:

     function full(el) {
if (el.requestFullscreen) {
el.requestFullscreen();
} else if (el.mozRequestFullScreen) {
el.mozRequestFullScreen();
} else if (el.webkitRequestFullscreen) {
el.webkitRequestFullscreen();
} else if (el.msRequestFullscreen) {
el.msRequestFullscreen();
}
}

  3、获取当前进入全屏的而元素

   通过document.fullscreenElement方法获取当前全屏的元素,假设id为div1的Element当前为全屏状态则 document.querySelector("#div1")===document.fullscreenElement,以下是获取当前全屏元素的兼容写法:

     function fullele() {
return(
document.fullscreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement ||
document.mozFullScreenElement ||
null);
}

  4、判断当前是否全屏

  通过document.fullscreenElement属性是否为空来判断,对于webkit内核的浏览器,还可以通过document.webkitIsFullScreen属性来判断,以下为兼容写法:

     function isfull() {
return !!(document.webkitIsFullScreen || fullele());
}

  5、退出全屏

  通过document.exitFullscreen方法来退出全屏,对于不同内核的浏览器,方法名除了前缀不一样外,其他地方也不一样,以下为兼容写法

     function exitfull() {
if (document.exitFullscreen) {
document.exitFullscreen();
}
else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
}
else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}

6、jQuery拓展,写成jQuery拓展,调用将十分方便,下面将给出一个实现:

 $.extend({
supportfull: function () {
var requestFullscreen =
document.body.requestFullscreen ||
document.body.webkitRequestFullscreen ||
document.body.mozRequestFullScreen ||
document.body.msRequestFullscreen;
var fullscreenEnabled =
document.fullscreenEnabled ||
document.mozFullScreenEnabled ||
document.webkitFullscreenEnabled ||
document.msFullscreenEnabled;
return !!(requestFullscreen && fullscreenEnabled);
},
//获取当前全屏的元素
fullele: function () {
return(
document.fullscreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement ||
document.mozFullScreenElement ||
null);
},
//全屏,如果当前存在已经全屏的元素,则操作无效
full: function (el) {
if ($.isfull()) {
if (el === $.fullele()) {
return;
}
}
if (el.requestFullscreen) {
el.requestFullscreen();
} else if (el.mozRequestFullScreen) {
el.mozRequestFullScreen();
} else if (el.webkitRequestFullscreen) {
el.webkitRequestFullscreen();
} else if (el.msRequestFullscreen) {
el.msRequestFullscreen();
}
return this;
},
//退出全屏
exitfull: function () {
if (document.exitFullscreen) {
document.exitFullscreen();
}
else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
}
else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
return this;
},
//是否全屏
isfull: function () {
return !!(document.webkitIsFullScreen || $.fullele());
},
//进入或取消全屏,如果当前全屏的元素不是指定的元素,则取消全屏无效
togglefull: function (el, callback) {
if ($.isfull()) {
var fullele = $.fullele();
if (el === fullele) {
$.exitfull();
}
return;
}
$.full(el);
if (typeof callback == typeof $.noop) {
callback(!$.isfull());
}
return this;
}
})
$.fn.extend(
{
// 让匹配的第一个元素全屏
// 该方法应有用户操作触发,否则无效
full: function () {
if ($(this).length == 0)
return;
$.full($(this).get(0));
return this;
},
// 如果当前全屏的元素存在于匹配的元素集合中,则该元素会退出全屏
exitfull: function () {
if (isfull()) {
var fullel = $.fullel();
var index = $(this).index(fullel);
if (index != -1) {
$.exitfull();
}
}
return this;
},
// 该方法应由用户操作触发,只对匹配的第一个元素有效
togglefull: function (callback) {
if ($(this).length > 0) {
var el = $(this).first().get(0);
$.togglefull(el, callback);
}
return this;
},
// 为元素绑定点击事件,以使点击的元素进入或退出全屏
fullable: function (callback) {
$(this).on("click", function (e) {
$(this).togglefull(callback);
});
return this;
},
});

二、F11全屏

  1、未完待续。。。

浏览器全屏之requestFullScreen全屏与F11全屏的更多相关文章

  1. 20181019 记录 window.setTimeout('dofunction()',2000); - layui form 表单提交 事件 - F11全屏 事件 window.onresize

    1 延时事件 window.setTimeout('dofunction()',2000); 函数外面要有引号 如果没有引号 就不能延时执行 应该是内容进行eval,所以外层不是传递字符串的话,外层函 ...

  2. OBS录制全屏游戏的方法(超好录屏)

    新版Windows设置 详见 https://github.com/obsproject/obs-studio/wiki/Laptop-Troubleshooting 新版的Windows 10: l ...

  3. iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

    iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...

  4. fullpage 单屏高度超过屏幕高度,实现单屏内可以滚动并解决手机端单屏高度不正确的问题

    最近接触了好几次jquery.fullpage.js这个插件,实现整屏的滑动,效果很炫,用fullpage来实现也很简单,但是也碰到了一些问题和大家分享一下 1.单屏高度超过屏幕高度,实现单屏的滑动 ...

  5. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  6. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...

  7. Chrome浏览器中使用 iframe 嵌入网页导致视频不能全屏的问题解决方法

    今天无意中测试了下在 iframe 中嵌入视频, 发现全屏按钮在 Chrome 浏览器中居然无效, 试了好几个视频网站的视频都不能全屏, 但在其他浏览器中似乎都很正常, 应该是 Chrome 60 新 ...

  8. f11 全屏

    function fullScreen() { var el = document.documentElement; var rfs = el.requestFullScreen || el.webk ...

  9. H5实现全屏与F11全屏

    最近做项目用到全屏,现总结一下全屏: 1.局部全屏:H5全屏和F11有区别,在这种情况下判断全屏只需要通过H5全屏属性,无论全屏后有无滚动条都可判断. /** * [isFullscreen 判断浏览 ...

随机推荐

  1. AWS-SS配置过程

    为满足家长要求,以下只录步骤: 远端: 1. 注册并启动一个AWS实例.这一步网上N多教程,搜 AWS EC2 等均可. 2. 远程安装SS,并写配置文件.依然网搜, AWS S(hadow)S(oc ...

  2. VUE 2.0 引入高德地图,自行封装组件

    1. 高德地图官网 申请帐号, 申请相应(JavaScript API)的 Key 2. 在项目中引入, 这里和其他的引入不同的是 直接在 index.html, 不是在 main.js 引入, 博主 ...

  3. MUI体验框架

    1.      mui简介 1.1  缘起 1.基于jq的jqmobile,性能低的无法忍受,且UI难看 2.bootstrap这种响应式设计,性能在低端机不足,而且UI风格一看就是网页,不是App的 ...

  4. Docker-v17 的层级(layer)概念

    html,body { font-size: 12pt } body { font-family: Helvetica, "Hiragino Sans GB", "微软雅 ...

  5. 关于字符型char变量

    写程序时,意外发现个很不容易察觉问题出在哪的问题的 scanf("%c",&ch); scanf("%c",&c); printf(" ...

  6. wampserve部署

    全名 WampServer 来自法国的软件 http://www.wampserver.com/en/ 一.下载方法: 1.一级导航点击download(发现只不过是本页的跳转,硕大的 wampser ...

  7. 如何在CentOS 7上部署Google BBR【搬运、机翻】

    如何在CentOS 7上部署Google BBR 本文章搬运自 https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7 [注:文 ...

  8. 深入理解Python的字符编码

    原文:http://lukejin.iteye.com/blog/598303 在处理中文的时候,我们有时候会碰到中文乱码的问题. 究其根本原因是正确的字节序列按照错误的编码方式解码成字符 或者正确的 ...

  9. 15-谜问题(深拷贝、LC检索、面向对象编程)

    问题描述: 在一个分成16格的方形棋盘上,放有15块编了号码的牌.对这些牌给定一种初始排列,要求通过一系列的合法移动将这一初始排列转换成目标排列. 这个问题解决时用到了L-C检索.在检索的过程中计算估 ...

  10. # *Qt for Com 交互*

    Qt COM Q_PROPERTY ActiveX properties public slots ActiveX methods signals ActiveX events Qt 属性支持的数据类 ...