前端全屏方法封装

一、引言

全屏功能在很多项目中会使用到,例如弹框全屏预览、附件预览区域全屏等场景。接下来我们对全屏的开启、关闭以及是否在全屏中等方法进行简单封装。

效果图

二、拿取兼容方法

对于全屏在项目中使用来说,需要的需求功能大致就是,可以针对某个DOM元素去全屏,而不是针对整个可视区域去全屏。再则就是全屏和取消全屏即可。 对于现在写文章来说,一大部分信息来源,都是来自AI啦。对于一些基础都熟悉的东西,直接拿过来使用即可。所以向gpt问一下。全屏中我们要的基础信息。我们的目的的整合和封装🍺🍺

1.requestFullscreen兼容写法

scss 复制代码
// 获取元素
var element = document.getElementById('your-element');

// 尝试使用标准的 requestFullscreen 方法
if (element.requestFullscreen) {
  element.requestFullscreen();
} 
// 兼容 Webkit
else if (element.webkitRequestFullscreen) {
  element.webkitRequestFullscreen();
} 
// 兼容 Moz
else if (element.mozRequestFullScreen) {
  element.mozRequestFullScreen();
} 
// 兼容 IE
else if (element.msRequestFullscreen) {
  element.msRequestFullscreen();
}

2.js结束当前浏览器全屏,需要兼容主流浏览器

javascript 复制代码
// 退出全屏的函数
function exitFullScreen() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } 
  // 兼容 Webkit
  else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  } 
  // 兼容 Moz
  else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } 
  // 兼容 IE
  else if (document.msExitFullscreen) {
    document.msExitFullscreen();
  }
}
// 示例用法
exitFullScreen();

3.js 判断当前浏览器是否正在全屏中,需要兼容主流浏览器

javascript 复制代码
// 判断是否处于全屏状态的函数
function isFullScreen() {
  return (
    document.fullscreenElement ||
    document.webkitFullscreenElement ||
    document.mozFullScreenElement ||
    document.msFullscreenElement
  );
}

// 示例用法
if (isFullScreen()) {
  console.log("当前浏览器处于全屏状态");
} else {
  console.log("当前浏览器不处于全屏状态");
}

三、代码封装

这些代码,看着就挺难受了,差不多像屎山啦。我们来简单封装一下。 对于这种if else一般解决的方案都是用Map或者数组来。

我们把三种情况下的方法用数组装起来。

ini 复制代码
//   打开全屏兼容判断
const openNames = [
"requestFullscreen", 
"webkitRequestFullscreen", 
"mozRequestFullScreen", 
"msRequestFullscreen"
];
//   取消全屏兼容判断
const exitNames = [
"exitFullscreen", 
"webkitExitFullscreen", 
"mozCancelFullScreen", 
"msExitFullscreen"
];
//   是否在全屏中兼容判断
const isRunNames = [
"fullscreenElement", 
"webkitFullscreenElement", 
"mozFullScreenElement", 
"msFullscreenElement"
];

从上面可以发现,如果对应的元素上有这个属性,就可以执行就行。所以我们写一个公共的在对应的对象上面找是否有这个属性方法。

javascript 复制代码
//   在对象中是否存在对应属性
const getPropertyName = (names, target) => {
  return names.find((name) => name in target);
};

到了这里,那想要执行全屏和取消全屏,判断全屏的都简单了。

3.1开启全屏

scss 复制代码
//   查看当前可以全屏的函数名
const getFullScreenName = () => {
  return getPropertyName(openNames, document.documentElement)
}

// 开启全屏
const fullStart = (ele) => {
  getFullScreenName() && ele[getFullScreenName()]();
};

3.2判断当前浏览器是否处于全屏中

javascript 复制代码
//   查看当前正在全屏中的函数名
const runFullScreenName = () => {
  return getPropertyName(isRunNames, document)
}

// 判断当前浏览器是否处于全屏中
const isFullScreen = () => {
  const status = document[runFullScreenName()] || null
  return !!status
}

3.3结束全屏

scss 复制代码
//   查看当前可以取消全屏的函数名
const exitFullScreenName = () => {
  return getPropertyName(exitNames, document)
}

// 结束全屏
const exitFullScreen = () => {
  exitFullScreenName() && document[exitFullScreenName()]();
}

四、使用

所以,只需要判断当前全屏状态,来开启和关闭。

ini 复制代码
const btn = document.querySelector(".btn");
const p = document.querySelector(".fullDom");
btn.onclick = function () {
  isFullScreen() ? exitFullScreen() : fullStart(p)
};

这样就完成啦🎉🎉🎉

相关推荐
知了学历孙老师4 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
ShineWinsu6 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
福兮说6 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
程序员老赵8 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
Swot8 小时前
Asciidoctor 公式数字下标错位问题:原因分析与解决方案
前端
Swot8 小时前
leo-editor 中将 Markdown 内容转成 asciidoc 格式
前端
狒狒AI8 小时前
Remotion / GSAP+Three / HyperFrames / Skia 四栈实测:代码渲染知识视频的选栈方法(附开源技能)
前端·人工智能·aigc
修炼的dance8 小时前
浏览器里导出H.265,8.5秒和55.5秒差在硬件
前端
补码缩写8 小时前
WebCodecs选编码器,探测之后还要验解码和播放
前端
大文说跨境8 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化