最近后台项目需要一个"全屏"的按钮, github了下, 发现都仅仅支持"开启全屏", 而没有"切换"/"监听全屏状态"等功能, 所以打算自己写一个(主要代码量不大, 嘿嘿).
所有现代浏览器(>IE11)都提供了"全屏"的api,只是不同浏览器有不同的api(基本就是前缀不同), 所以我们要做的就是判断浏览器, 然后执行正确的api.
首先我发现ts自带的声明中, 对webkit或moz开头的这种api并没有声明类型, 所以我们需要自己补充一下.
不然ts会提示找不到对应的方法.
知识点: 在自己的.d.ts文件中可以对ts系统自带的interface进行声明合并(扩展).
// global.d.ts
interface htmlElement {
// 进入全屏
webkitRequestFullscreen(options?: FullscreenOptions): Promise<void>;
webkitRequestFullScreen(options?: FullscreenOptions): Promise<void>;
msRequestFullscreen(options?: FullscreenOptions): Promise<void>;
mozRequestFullScreen(options?: FullscreenOptions): Promise<void>;
// 监听全屏
onwebkitfullscreenchange: ((this: Element, ev: Event) => any) | null;
onmozfullscreenchange: ((this: Element, ev: Event) => any) | null;
MSFullscreenChange: ((this: Element, ev: Event) => any) | null;
}
interface Document {
// 当前全屏的元素
readonly webkitFullscreenElement: Element | null;
readonly msFullscreenElement: Element | null;
readonly mozFullScreenElement: Element | null;
// 退出全屏
webkitExitFullscreen(): Promise<void>;
msExitFullscreen(): Promise<void>;
mozCancelFullScreen(): Promise<void>;
}
提示: requestFullscreen(options?: FullscreenOptions): Promise<void>;可以在node_modules/typescript/lib/lib.dom.d.ts中找到.
功能其实很简单, 我都写了注释, 就不过分解读了, 好了看实现代码:
type RFSMethodName = 'webkitRequestFullScreen' | 'requestFullscreen' | 'msRequestFullscreen' | 'mozRequestFullScreen';
type EFSMethodName = 'webkitExitFullscreen' | 'msExitFullscreen' | 'mozCancelFullScreen' | 'exitFullscreen';
type FSEPropName = 'webkitFullscreenElement' | 'msFullscreenElement' | 'mozFullScreenElement' | 'fullscreenElement';
type ONFSCPropName = 'onfullscreenchange' | 'onwebkitfullscreenchange' | 'onmozfullscreenchange' | 'MSFullscreenChange';
/**
* caniuse
* https://caniuse.com/#search=Fullscreen
* 参考 MDN, 并不确定是否有o前缀的, 暂时不加入
* https://developer.mozilla.org/zh-CN/docs/Web/API/Element/requestFullscreen
* 各个浏览器
* https://www.wikimoe.com/?post=82
*/
const DOC_EL = document.documentElement;
let RFC_METHOD_NAME: RFSMethodName = 'requestFullscreen';
let EFS_METHOD_NAME: EFSMethodName = 'exitFullscreen';
let FSE_PROP_NAME: FSEPropName = 'fullscreenElement';
let ON_FSC_PROP_NAME: ONFSCPropName = 'onfullscreenchange';
if (`webkitRequestFullScreen` in DOC_EL) {
RFC_METHOD_NAME = 'webkitRequestFullScreen';
EFS_METHOD_NAME = 'webkitExitFullscreen';
FSE_PROP_NAME = 'webkitFullscreenElement';
ON_FSC_PROP_NAME = 'onwebkitfullscreenchange';
} else if (`msRequestFullscreen` in DOC_EL) {
RFC_METHOD_NAME = 'msRequestFullscreen';
EFS_METHOD_NAME = 'msExitFullscreen';
FSE_PROP_NAME = 'msFullscreenElement';
ON_FSC_PROP_NAME = 'MSFullscreenChange';
} else if (`mozRequestFullScreen` in DOC_EL) {
RFC_METHOD_NAME = 'mozRequestFullScreen';
EFS_METHOD_NAME = 'mozCancelFullScreen';
FSE_PROP_NAME = 'mozFullScreenElement';
ON_FSC_PROP_NAME = 'onmozfullscreenchange';
} else if (!(`requestFullscreen` in DOC_EL)) {
throw `当前浏览器不支持Fullscreen API !`;
}
/**
* 启用全屏
* @param {HTMLElement} 元素
* @param {FullscreenOptions} 选项
* @returns {Promise}
*/
export function beFull(el: HTMLElement = DOC_EL, options?: FullscreenOptions): Promise<void> {
return el[RFC_METHOD_NAME](options);
}
/**
* 退出全屏
*/
export function exitFull(): Promise<void> {
return document[EFS_METHOD_NAME]();
}
/**
* 元素是否全屏
* @param {HTMLElement}
*/
export function isFull(el: HTMLElement | EventTarget): boolean {
return el === document[FSE_PROP_NAME]
}
/**
* 切换全屏/关闭
* @param {HTMLElement} 目标元素
* @returns {Promise}
*/
export function toggleFull(el: HTMLElement = DOC_EL, options?: FullscreenOptions): Promise<void> {
if (isFull(el)) {
return exitFull();
} else {
return beFull(el, options)
}
}
/**
* 当全屏/退出时触发
* @param {HTMLElement} 元素
* @param {(isFull: boolean) => void} 返回"是否全屏"
*/
export function watchFull(el: HTMLElement, callback: (isFull: boolean) => void) {
const cancel = () => {
el.onfullscreenchange = null;
};
const handler = (event: Event) => {
if (null !== event.target) {
callback(isFull(event.target));
}
}
// 这里addEventListener不好使
el[ON_FSC_PROP_NAME] = handler;
return {
cancel
}
}
源码: https://github.com/any86/be-full
这篇文章主要讲述通过js来实现html页面的全屏显示,以及退出全屏展示的方法。分享给大家查考,具体代码实现如下
fullPage.js 是一个基于 jQuery 的插件,它能够很方便、很轻松的制作出全屏网站。 主要功能有:支持鼠标滚动、支持前进后退和键盘控制...
这篇文章将介绍如何使用原生 JS (主要使用 ES6 语法)实现全屏滚动插件,兼容 IE 10+、手机触屏,Mac 触摸板优化,支持自定义页面动画,压缩后 gzip 文件只有 2k。
写前端网页或者做前端小游戏的时候,为了提高用户体验,需要请求网页全屏显示(这点对于手机端的页游很重要),这个需求可以通过JavaScript实现
js让浏览器全屏模式的方法launchFullscreen,HTML 5中的full screen,目前可以在除IE和opera外的浏览器中使用 ,有的时候用来做全屏API,游戏呀,等都很有用。浏览器全屏模式的启动函数requestFullscreen仍然需要附带各浏览器的js方言前缀
这篇文章主要介绍了JavaScript控制全屏,监听退出全屏。以及ie低版本的全屏,退出全屏都这个方法,ie调用ActiveX控件,需要在ie浏览器安全设置里面把 未标记为可安全执行脚本的ActiveX控件初始化并执行脚本设置为启用
我们知道,浏览器全屏通常按快捷键F11。那么如何通过JS前端实现让浏览器全屏、退出全屏? 在进行进入全屏和退出全屏的操作,需要的朋友可以参考下
页面中使用iframe嵌入PDF.js的viewer.html时,部分浏览器全屏功能错误; 问题出现的浏览器主要有:edge(win10自带),火狐(按钮被屏蔽);解决方案:
javascript可以使用Element.requestFullscreen()实现全屏也可以通过模拟F11快捷键实现全屏。Element.requestFullscreen()方法用于 异步请求使得Element(该元素)全屏显示。
一张清晰漂亮的背景图片能给网页加分不少,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块露白,简而言之,就是实现能自适应屏幕大小又不会变形的背景大图,而且背景图片不会随着滚动条滚动而滚动。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!