3.6 Browser -- useFullscreen

news/2024/9/19 1:04:56/ 标签: javascript, 前端, vue.js

3.6 Browser – useFullscreen

https://vueuse.org/useFullscreen

作用

响应式的Fullscreen API。可以让特定的元素占满屏幕,就是全屏的效果。

官方示例

const el = ref<HTMLElement | null>(null)const { isFullscreen, enter, exit, toggle } = useFullscreen(el)
<video ref='el'>

通过函数调用的方式,让video可以实现全屏效果。

源码分析

https://github.com/vueuse/vueuse/blob/main/packages/core/useFullscreen/index.ts

源码中对多种浏览器进行了适配,这种适配的思路需要学习一下。

功能实现简单来说就两条:target.requestFullscreen打开全屏,document.exitFullscreen退出全屏。

const functionsMap: FunctionMap[] = [['requestFullscreen','exitFullscreen','fullscreenElement','fullscreenEnabled','fullscreenchange','fullscreenerror',],// New WebKit['webkitRequestFullscreen','webkitExitFullscreen','webkitFullscreenElement','webkitFullscreenEnabled','webkitfullscreenchange','webkitfullscreenerror',],// ......
]export function useFullscreen(target?: MaybeElementRef,options: UseFullscreenOptions = {},
) {const { document = defaultDocument, autoExit = false } = optionsconst targetRef = target || document?.querySelector('html')const isFullscreen = ref(false)// 取数组第一项定义的方法名let map: FunctionMap = functionsMap[0]const isSupported = useSupported(() => {if (!document) {return false}else {for (const m of functionsMap) {if (m[1] in document) {map = mreturn true}}}return false})// ['requestFullscreen','exitFullscreen','fullscreenElement','fullscreenEnabled', // 这条被跳过了,通过留空的方式'fullscreenchange','fullscreenerror',  // 最后一条没有解构// ],const [REQUEST, EXIT, ELEMENT,, EVENT] = mapasync function exit() {if (!isSupported.value)return// 如果当前有全屏的元素 document.fullscreenElement,退出全屏模式,修改isFullscreenif (document?.[ELEMENT])await document[EXIT]()isFullscreen.value = false}async function enter() {if (!isSupported.value)return// 先尝试退出全屏await exit()const target = unrefElement(targetRef)if (target) {// target.requestFullscreen 请求全屏await target[REQUEST]()isFullscreen.value = true}}// 切换async function toggle() {if (isFullscreen.value)await exit()elseawait enter()}if (document) {useEventListener(document, EVENT, () => {isFullscreen.value = !!document?.[ELEMENT]}, false)}if (autoExit)tryOnScopeDispose(exit)return {isSupported,isFullscreen,enter,exit,toggle,}
}

http://www.ppmy.cn/news/1519332.html

相关文章

【SpringMVC】

深入探索SpringMVC&#xff1a;构建高效、可维护的Web应用1. SpringMVC 核心概念1.1 模型&#xff08;Model&#xff09;1.2 视图&#xff08;View&#xff09;1.3 控制器&#xff08;Controller&#xff09; 2. SpringMVC 入门2.1 环境搭建2.2 配置前端控制器2.3 开发第一个Co…

25版王道数据结构课后习题详细分析 第五章 树与二叉树 5.3 二叉树的遍历和线索二叉树 选择题部分

一、单项选择题 ———————————————————— ———————————————————— 解析&#xff1a;二叉树中序遍历的最后一个结点一定是从根开始沿右子女指针链走到底的结点,设用p指示。若结点p不是叶结点(其左子树非空)&#xff0c;则前序遍历的最后一…

Windows10上Nginx如何通过自签名证书方式发布Https服务(下)

4.客户端证书生成 4.1 生成私钥 命令: openssl genrsa -des3 -out client.key 1024 4.2 创建 CSR(证书签名请求) 配置文件:client_openssl.cnf [req] distinguished_name = req_distinguished_name req_extensions = v3_req[req_distinguished_name] countryName …

nrm|npm快速切源

npm ERR! audit Your configured registry (https://registry.npmmirror.com/) does not support audit requests. 直接切源就 ok 了 全局安装 $npm i -g nrm查看所有源 $ nrm ls* npm -------- https://registry.npmjs.org/yarn ------- https://registry.yarnpkg.com/cnpm …

图像处理 -- 图像清晰度测量方法

图像清晰度测量方法 拉普拉斯算子&#xff08;Laplacian Operator&#xff09; 拉普拉斯算子是一种二阶导数算子&#xff0c;用于检测图像的边缘。清晰的图像通常具有更多且更明显的边缘。 边缘检测&#xff08;Edge Detection&#xff09; 常用的边缘检测算法包括Sobel、Prew…

深度学习100问39:阿达玛乘积在实际生活中的应用

嘿&#xff0c;你知道吗&#xff1f;阿达玛乘积在我们的生活中可有着不少神奇的应用呢&#xff01; 一、图像处理领域 在图像处理的世界里&#xff0c;阿达玛乘积就像是一个神奇的画笔。比如说图像融合吧&#xff0c;想象一下&#xff0c;你有两张超酷的照片&#xff0c;一…

成功解决:jenkins构建失败,cannot open directory /home/centos/: Permission denied等问题

这是报错: LANG=en_US.UTF-8 JOB_NAME=interface_automation_testing BUILD_DISPLAY_NAME=#25 BUILD_ID=25 NOTIFY_SOCKET=/run/systemd/notify JOB_BASE_NAME=interface_automation_testing GIT_PREVIOUS_SUCCESSFUL_COMMIT

EventBus使用详解

EventBus是一个由GreenRobot开发的开源库&#xff0c;主要用于Android和Java编程中的事件发布/订阅框架。它基于观察者模式&#xff0c;将事件的接收者和发送者分开&#xff0c;简化了组件之间的通信&#xff0c;使用简单、效率高、体积小。以下是对EventBus使用的详细解析&…

13 隔离性

数据库并发的场景 读-读&#xff1a;不存在任何问题&#xff0c;也不需要并发控制 读-写&#xff1a;有线程安全问题&#xff0c;可能会造成事务隔离性问题&#xff0c;可能遇到脏读&#xff0c;幻读&#xff0c;不可重复读 写-写&#xff1a;有线程安全问题&#xff0c;可能存…

VIVO 相机HDR拍照流程拆解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: HDR 场景下发 3 帧拍照请求HDR 3帧拍照请求帧&#xff08;478,479 480&#xff09;HDR 3帧 result callback帧HDR 算法处理5.算法编解码处理HDR 拍照lo…

SpringMVC接收返回值方法汇总

传统方式 RequestMapping("/param01") public String param01(HttpServletRequest request) throws UnsupportedEncodingException {request.setCharacterEncoding("UTF-8");String id request.getParameter("id");request.setAttribute("…

Linux基础入门 --2 DAY

常见命令 查看硬件信息 查看cpu lscpu cat /proc/cpuinfo 范例&#xff1a; [rootlocalhost ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thr…

Scipy||第三章 线性代数 (scipy.linalg)

3.1 矩阵操作的细节 3.1.1 矩阵的创建与基础运算 矩阵在 Scipy 中通常是以 Numpy 的 ndarray 形式表示的&#xff0c;这样便于进行高效的矩阵运算。我们再详细探讨几种常见的矩阵操作。 矩阵相加&#xff1a;矩阵相加要求两个矩阵的形状相同&#xff0c;元素逐个相加。 C A …

离线二维数点

问题&#xff1a;给你一个长度为n的序列&#xff0c;m次询问&#xff0c;每次询问区间[l,r]中小于等于x的元素个数。 对于此种问题&#xff0c;最简单的解法就是扫描线树状数组。这种问题满足离线性质&#xff0c;可以先把询问存下来&#xff0c;我们对原序列扫描&#xff0c;…

安达发|户外设备制造APS排程的多层级BOM订单拉动

户外设备制造行业面临的挑战包括多样化的产品线、复杂的产品开发过程以及市场需求的快速变化。为提高生产效率与市场响应速度&#xff0c;采用高级计划排程的多层级BOM订单拉动策略至关重要。 一、户外设备制造行业概述 - 行业背景&#xff1a;户外设备制造行业主要涉及户外休…

Mac 安装Hadoop教程

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop&#xff0c;便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop&#xff0c;你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 安装JDK8。 2.2 配置ssh环境…

缓存Mybatis一级缓存与二级缓存

缓存 为什么使用缓存 缓存(cache)的作用是为了减去数据库的压力,提高查询性能,缓存实现原理是从数据库中查询出来的对象在使用完后不销毁,而是存储在内存(缓存)中,当再次需要获取对象时,直接从内存(缓存)中提取,不再向数据库执行select语句,从而减少了对数据库的查询次数,因此…

Mac/Linux系统matplotlib中文支持问题

背景 matplotlib是python中最常用的数据可视化分析工具&#xff0c;Mac和Linux系统无中文字体&#xff0c;不支持中文显示&#xff08;希望后续可以改进&#xff09;&#xff0c;需要进行字体的下载和设置才能解决。笔者经过实践&#xff0c;发现Mac系统和Linux系统解决方案略…

Windows系统Nginx下载安装配置 运行错误处理

Nginx是一款轻量级的web 服务器/反向代理 服务器。本篇文章主要是nginx的下载安装&#xff0c;处理运行中遇到的问题&#xff0c;配置反向代理。主要分为两部分&#xff1a;下载安装和配置。 目录 1.下载安装 2.nginx配置反向代理 1.下载安装 nginx官网&#xff1a;nginx: …

PHP软件下载-安装-环境配置

.1.下载 下载地址如下 windows.php.net - /downloads/releases/ 安装包如下. .2.安装 可以在D盘或者E盘的根目录创建一个自定义目录。注意文件夹目录中不能包含中文&#xff0c;不能包含空格等特殊字符。 版本说明&#xff1a; (1)ts表示非线程安全版本。这个安装包还指明了…