如何实现前端全屏

news2025/2/25 2:25:20

前言

最近有个需求是要求免登录自动打开看板,然后全屏并播放视频。当然最后自动全屏并播放视频没有实现,写这篇文章是为了记录一下踩的坑。

全屏

网上有挺多现成的组件的,这里就不介绍了,可以自行百度。这里只说通过原生的方法来实现,其实也挺简单的,浏览器已经提供了相应的api

代码
提供了全屏、退出全屏、当前是否是全屏、全屏与推出全屏来回切换的四个方法

// 进入全屏方法
const enterFullscreen = (docElm) => {
    // W3C
    if (docElm.requestFullscreen) {
        docElm.requestFullscreen();
    }
    // 火狐
    else if (docElm.mozRequestFullScreen) {
        docElm.mozRequestFullScreen();
    }
    // 谷歌
    else if (docElm.webkitRequestFullScreen) {
        docElm.webkitRequestFullScreen();
    }
    // IE
    else if (docElm.msRequestFullscreen) {
        docElm.msRequestFullscreen();
    }
};
// 退出全屏方法
const exitFullscreen = () => {
    if (document.exitFullscreen) {
        document.exitFullscreen();
    } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
    } else if (document.webkitCancelFullScreen) {
        document.webkitCancelFullScreen();
    } else if (document.msExitFullscreen) {
        document.msExitFullscreen();
    }
};
    // 判断当前页面是否全屏

const getFullScreenStatus = () => {
    return document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen;
};

// 全屏切换
const toggle = (docElm) => {
    if (!getFullScreenStatus()) {
        // 全屏
        enterFullscreen(docElm);
    } else {
        // 取消全屏
        exitFullscreen();
    }
};

export {
    enterFullscreen,
    exitFullscreen,
    getFullScreenStatus,
    toggle
};

通过给相应的元素添加一个点击事件,就可以实现全屏

<template>
    <div>
       <div class="main" id="mainId" @click="change">
        点击进行切换
       </div>
    </div>
</template>

<script>

import { toggle } from './tool.js';
export default {
    methods: {
        change() {
            let dom = document.getElementById('mainId');
            toggle(dom);
            console.log(dom);
        }
    }
};
</script>

<style lang="scss" scoped>
 .main{
    width: 300px;
    height: 300px;
    background-color: red;
    border: 10px solid blue;
    color: #fff;
 }
</style>

效果图
在这里插入图片描述

免登录功能

做法可能有很多种,说一下项目中用到的方式。创建一个js文件,存放哪些页面可以免登录,相当于一个白名单

const data = {
    // 客户服务
    'client': {
        account: 'admin', // 登陆名
        password: '123abc', // 密码
        url: '/crm/data-center' // 登陆成功后进入的页面
    }
}

在登录页面注册回车事件,当回车时拿到url地址,比如 http://localhost:3000/test/button?sign=client
根据标识来获取到对应的路由地址,以及登录账号和密码。然后调用登录接口,本周上也是登录了,只是提前保存了一些账号和密码。

问题

免登录和全屏功能都有了,但是最终效果还是没有实现。

问题1:
Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture

大体意思是 浏览器全屏API只能由用户手势触发,当时想既然点击事件(双击事件)可以实现全屏,那么通过代码模拟点击事件是不是也可以。但是实际上仍然不行,还是上面那个错误。如果不了解如何模拟点击事件可以看:如何实现JS主动触发事件

问题2:
DOMException: play() failed because the user didn‘t interact with the document first
大体意思是:chrome新特性,内容大致意思是开发者不能利用手中权限去给用户造成噪音干扰,首次加载页面需要用户和audio/video进行交互

其实上面两个也好理解,为了安全性,浏览器不可能什么都让你操作。你也不想,打开一个页面直接全屏,并播放某些视频,然后你还无法关掉。

补充

虽然无法实现自动全屏,但是可以通过css实现伪全屏。缺点是不是真正的全屏,浏览器会保留地址栏,比如:
在这里插入图片描述

 background-color: red;
 border: 10px solid blue;
 color: #fff;

 width: 100%;
 height: 100%;
 position: fixed !important;
 top: 0 !important;
 left: 0 !important;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机更换电池-小米8se操作步骤

目录 准备工具&#xff1a; 步骤&#xff1a; 注意事项&#xff1a; 准备工具&#xff1a; 需要更换电池的手机电池背胶&#xff08;左上蓝色&#xff09;缠胶棍&#xff08;手机左边&#xff09;小螺丝刀新电池卡针后盖拆卸片&#xff08;右上三角&#xff09;吸盘后盖背胶 …

Cesium 点位聚合

实现效果 实现方式 通过 new Cesium.EntityCluster(options) 接口对象实现而 new Cesium.DataSource() 有成员变量 clusteringclustering 类型是 EntityCluster代码实现,基于 vue 前端框架 这里使用的是 cesium 沙盒演示中自带的数据进行实现 加载数据 getKMLDTSource() {let o…

cnetsdk:.NET OCR SDK-支持中文-Crack

产品概览 .NET OCR SDK 许可证和价格 OCR SDK 兼容性 CnetSDK .NET OCR Scanner SDK兼容.NET Framework 4.0及以上版本。此 OCR 库软件可用于在任何 CPU 上进行 .NET OCR Windows 和基于服务器的应用程序开发。我们为 x86 和 x64 系统提供 OCR 库解决方案。 OCR 图像格式 这个 …

[学习笔记]黑马程序员-Hadoop入门视频教程

文章目录参考资料大数据导论企业数据分析方向数据分析基本流程步骤明确分析的目的和思路数据收集数据处理数据分析数据展现报告攥写大数据时代大数据定义大数据的5V特征参考资料 黑马程序员大数据Hadoop入门视频教程&#xff0c;适合零基础自学的大数据Hadoop教程 目录 大数据…

C++ 面试题-设计模式类问题(万余字总结)

C 面试题-设计模式类问题1 、说说什么是单例设计模式&#xff0c;如何实现2、 简述一下单例设计模式的懒汉式和饿汉式&#xff0c;如何保证线程安全3、 请说说工厂设计模式&#xff0c;如何实现&#xff0c;以及它的优点4 、请说说装饰器计模式&#xff0c;以及它的优缺点5 、请…

数据挖掘,计算机网络、操作系统刷题笔记40

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记40 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

TCP协议面试灵魂12 问(三)

等待2MSL的意义 如果不等待会怎样&#xff1f; 如果不等待&#xff0c;客户端直接跑路&#xff0c;当服务端还有很多数据包要给客户端发&#xff0c;且还在路上的时候&#xff0c;若客户端的端口此时刚好被新的应用占用&#xff0c;那么就接收到了无用数据包&#xff0c;造成…

C++高级教程——C++ 异常处理

C 异常处理C 异常处理抛出异常捕获异常C 标准的异常定义新的异常C 异常处理 异常是程序在执行期间产生的问题。C 异常是指在程序运行时发生的特殊情况&#xff0c;比如尝试除以零的操作。 异常提供了一种转移程序控制权的方式。C 异常处理涉及到三个关键字&#xff1a;try、c…

【Linux】gdb的使用

文章目录&#x1f3aa; Linux下gdb的使用&#x1f680;1.gdb调试准备&#x1f680;2.gdb指令集&#x1f680;3.gdb指令演示⭐3.1 展示源文件代码⭐3.2 断点与多步调试操作⭐3.3 常用操作指令&#x1f3aa; Linux下gdb的使用 GDB 全称“GNU symbolic debugger”&#xff0c;是一…

dp(十)* 0-1背包与完全背包的组合数问题 搞清组合数与排列数

目录 兑换零钱(二)_牛客题霸_牛客网&#xff08;完全背包&#xff09; 494. 目标和&#xff08;0-1背包&#xff09; 分割等和子集_牛客题霸_牛客网 兑换零钱(二)_牛客题霸_牛客网&#xff08;完全背包&#xff09; 描述 给定一个整数数组 nums 表示不同数额的硬币和一个正…

拉伯证券|社会消费复苏将是2023年主旋律

安排指出&#xff0c;兔年新年黄金周社会消费平稳复苏。全国范围看&#xff0c;依据国家税务总局增值税发票数据&#xff0c;2023年新年黄金周&#xff08;1月21日-27日&#xff0c;阴历岁除至正月初六&#xff09;&#xff0c;全国消费相关工作销售收入同比2022年新年假日添加…

Qt 进程(基本用法)

进程的使用情况&#xff1a; 运行的当前的应用中调用外部程序来实现功时调使用到进程。 比如&#xff1a;在你的运行程序中&#xff0c;开启迅雷或开启其他程序QProcess类用来 启动一个外部程序并与之通信QProcess类 常用一些函数&#xff1a; start&#xff08;&#xff09;…

Pycharm 中Torch安装方法

1.使用自带工具安装依次打开菜单&#xff1a;File->Setting点击号&#xff0c;搜索torch选择1.13.0版本安装安装错误&#xff1a;具体包含很长一段错误记录&#xff0c;如下&#xff1a;Collecting torch1.13.0Downloading https://files.pythonhosted.org/packages/ec/5e/8…

网络协议栈简单设计(tcp)

网络协议栈简单设计(tcp) 接着这篇文章写的 TCP相对于Udp&#xff0c;分为两个部分&#xff1a;连接&#xff08;三次握手、四次挥手&#xff09;、交互&#xff08;数据传输&#xff09; 三次握手 tcp包结构体定义 依照tcp包头字段定义就行&#xff1a; 注意&#xff0c;…

jenkins配置

ssh配置 选择Manager Jenkins 选择Configure System&#xff0c;进入页面一直拉到底 Remote Directory&#xff1a;是你需要从jenkins服务拷贝到远程应用服务指定的目录 高级&#xff1a;可以配置ssh密码 配置maven&#xff0c;git&#xff0c;jdk 选择 Global Tool Configur…

dpdk无锁队列rte_ring实现分析

1. 概述 rte_ring(以下简称ring)是一个高效率的无锁环形队列&#xff0c;它具有以下特点&#xff1a; FIFO队列长度是固定的&#xff0c;所有指针存放在数组中无锁实现(lockless)多消费者或单消费者出队多生产者或单消费者入队批量(bulk)出队 - 出队N个对象&#xff0c;否则失…

05.抽象工厂模式

05.抽象工厂模式 概念 抽象工厂模式&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类。抽象工厂又称为Kit模式&#xff0c;属于对象创建型模式。 抽象工厂可以将统一产品族的单独工厂封装起来&#xff0c;在正常使用中&#xff0…

08.适配器模式

08.适配器模式 概念&#xff1a; 将一个类的接口转化成用户需要的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式可以分为类适配器和对象适配器两种&#xff0c;区别在于适配器角色对应被适配角色的适配是通过继承还是组合…

单月涨粉30w+,他们掌握引流法宝,小红书1月创作趋势是什么?

新年来到&#xff0c;在刚过去的1月&#xff0c;小红书平台涌现出哪些黑马博主&#xff1f;品牌在投放种草方面有何亮眼表现&#xff1f;为洞察小红书平台的内容创作趋势及品牌营销策略&#xff0c;新红推出1月月度榜单&#xff0c;从创作者及品牌两方面入手&#xff0c;解析月…

计算机网络-I/O多路复用机制

I/O多路复用机制 I/O多路复用&#xff08;multiplexing&#xff09;的本质是通过一种机制&#xff08;系统内核缓冲I/O数据&#xff09;&#xff0c;让单个进程可以监视多个文件描述符&#xff08;File descriptor是计算机科学中的一个术语&#xff0c;是一个用于表述指向文件的…