将某一个 DIV 块全屏展示

news2024/11/18 23:00:10

文章目录

    • 需求
    • 分析

需求

上节我们研究了如何将页面中的指定 div 下载为图片:跳转查看
本节演技一下如何将 DIV 全屏展示

全屏展示某一个 DIV
在这里插入图片描述

在这里插入图片描述

分析

  • 其实就是模拟键盘动作 F11
var element = document.getElementById('pic')
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen
if (requestMethod) {
  requestMethod.call(element)
} else if (typeof window.ActiveXObject !== 'undefined') {
  var wscript = new ActiveXObject('WScript.Shell')
  if (wscript !== null) {
    wscript.SendKeys('{F11}')
  }
}
  • demo1.html
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>全屏展示</title>
    <style>
        .top {
  margin: 15px;
}
.main {
  width: 100%;
  height: 1000px;
  display: flex;
}
.left {
  width: 50%;
  height: 60%;
  background: gray;
  padding: 20px;
}
.left-son {
  width: 80%;
  height: 50%;
  margin: 15px;
  background: red;
}
.right {
  width: 50%;
  height: 60%;
  background: #dddddd;
}
/* 针对dom的全屏设置 */
.left:-webkit-full-screen {
  background: #fff;
}
/* 全屏属性 */
:-webkit-full-screen {
}
:-moz-full-screen {
}
:-ms-fullscreen {
}
/* 全屏伪类 当前chrome:70 不支持 */
:full-screen {
}
:fullscreen {
  /* IE11支持 */
}
    </style>
</head>

<body>
    <!--
     * @Author: OBKoro1
     * @Github: https://github.com/OBKoro1
     * @Date: 2018-11-15 18:49:33
     * @LastEditors: OBKoro1
     * @LastEditTime: 2018-11-23 18:20:36
     * @Description: 浏览器全屏class类演示demo
     -->
    <div class="top">
        <button onclick="leftScreen()">左边全屏</button>
        <button onclick="rightScreen()">右边全屏</button>
    </div>
    <div class="main">
        <div class="left">
            <button onclick="redScreen()">红色全屏</button>
            <button onclick="exitScreen()">退出全屏</button>
            <div class="left-son">
                <button onclick="exitScreen()">红色退出全屏</button>
                <span>左边的内容</span>
            </div>
        </div>
        <div class="right">右边的内容</div>
    </div>
</body>

</html>

<script>
   class fullScreen {
        /**
         * @description: 全屏初始化
         * @param {Function} fn 用户浏览器不支持全屏的回调
         */
        constructor(fn) {
            this.prefixName = ""; // 浏览器前缀
            this.isFullscreenData = true; // 浏览器是否支持全屏
            this.isFullscreen(fn);
        }
        /**
         * @description: 将传进来的元素全屏
         * @param {String} domName 要全屏的dom名称
         */
        Fullscreen (domName) {
            const element = document.querySelector(domName);
            const methodName =
                this.prefixName === ""
                    ? "requestFullscreen"
                    : `${this.prefixName}RequestFullScreen`;
            element[methodName]();
        }
        // 退出全屏
        exitFullscreen () {
            const methodName =
                this.prefixName === ""
                    ? "exitFullscreen"
                    : `${this.prefixName}ExitFullscreen`;
            document[methodName]();
        }
        /**
         * @description: 监听进入/离开全屏
         * @param {Function} enter 进入全屏的回调
         *  @param {Function} quit 离开全屏的回调
         */
        screenChange (enter, quit) {
            if (!this.isFullscreenData) return;
            const methodName = `on${this.prefixName}fullscreenchange`;
            document[methodName] = e => {
                if (this.isElementFullScreen()) {
                    enter && enter(e); // 进入全屏回调
                } else {
                    quit && quit(e); // 离开全屏的回调
                }
            };
        }
        /**
         * @description: 浏览器无法进入全屏时触发,可能是技术原因,也可能是用户拒绝:比如全屏请求不是在事件处理函数中调用,会在这里拦截到错误
         * @param {Function} enterErrorFn 回调
         */
        screenError (enterErrorFn) {
            const methodName = `on${this.prefixName}fullscreenerror`;
            document[methodName] = e => {
                enterErrorFn && enterErrorFn(e);
            };
        }
        /**
         * @description: 是否支持全屏+判断浏览器前缀
         * @param {Function} fn 不支持全屏的回调函数 这里设了一个默认值
         */
        isFullscreen (fn) {
            let fullscreenEnabled;
            // 判断浏览器前缀
            if (document.fullscreenEnabled) {
                fullscreenEnabled = document.fullscreenEnabled;
            } else if (document.webkitFullscreenEnabled) {
                fullscreenEnabled = document.webkitFullscreenEnabled;
                this.prefixName = "webkit";
            } else if (document.mozFullScreenEnabled) {
                fullscreenEnabled = document.mozFullScreenEnabled;
                this.prefixName = "moz";
            } else if (document.msFullscreenEnabled) {
                fullscreenEnabled = document.msFullscreenEnabled;
                this.prefixName = "ms";
            }
            if (!fullscreenEnabled) {
                this.isFullscreenData = false;
                fn && fn(); // 执行不支持全屏的回调
            }
        }
        /**
         * @description: 检测有没有元素处于全屏状态
         * @return 布尔值
         */
        isElementFullScreen () {
            const fullscreenElement =
                document.fullscreenElement ||
                document.msFullscreenElement ||
                document.mozFullScreenElement ||
                document.webkitFullscreenElement;
            if (fullscreenElement === null) {
                return false; // 当前没有元素在全屏状态
            } else {
                return true; // 有元素在全屏状态
            }
        }
    }
    let full = new fullScreen(() => {
        console.log("不支持");
    });
    full.screenError(e => {
        console.log("进去全屏失败:", e);
    });
    // 全屏请求必须在事件处理函数中调用,否则将会被拒绝。
    full.Fullscreen(".left"); // 触发进去全屏失败回调
    const obj = {
        enter: e => {
            // 如果退出全屏 退出的还是全屏状态,将会触发进入全屏的回调,这种情况比较少 注意一下
            console.log("进入全屏", e);
        },
        quit: e => {
            console.log("退出全屏", e);
            // 通常不会出现嵌套的情况
        }
    };
    full.screenChange(obj.enter, obj.quit);
    function leftScreen () {
        full.Fullscreen(".left");
    }
    function rightScreen () {
        full.Fullscreen(".right");
    }
    function redScreen () {
        full.Fullscreen(".left-son");
    }
    // 退出全屏 退出到上次的状态
    function exitScreen () {
        full.exitFullscreen();
    }
</script>
  • demo2.html
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
    #container {
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        background-color: red;
    }
</style>


<body>
      <div id="container">
            <div id="content" style="margin:0 auto;height:45%;width:80%px; background:orange;">
                <button id="btn">全屏</button>
                <button id="close">退出</button>
                <h1>js控制页面部分区域的全屏展示和退出全屏显示</h1>
                </div>
          </div>
</body>
<script language="JavaScript">
    var btn = document.getElementById("btn");
    btn.onclick = function () {
        var elem = document.getElementById("content");
        requestFullScreen(elem);
    };


    var close = document.getElementById("close");
    close.onclick = function () {
        exitFullscreen();
    };


    function requestFullScreen (element) {
        var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
        if (requestMethod) {
            requestMethod.call(element);
        } else if (typeof window.ActiveXObject !== "undefined") {
            var wscript = new ActiveXObject("WScript.Shell");
            if (wscript !== null) {
                wscript.SendKeys("{F11}");
            }
        }
    }


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


</script>


</html>

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

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

相关文章

Alinx xc7z020 原理图

时钟引脚 CLK&#xff1a;U18 复位 RST&#xff1a;N15 扩展接口 J10 J11 PL LED

实战:生成个性化词云的Python实践【7个案例】

文本挖掘与可视化&#xff1a;生成个性化词云的Python实践【7个案例】 词云&#xff08;Word Cloud&#xff09;&#xff0c;又称为文字云或标签云&#xff0c;是一种用于文本数据可视化的技术&#xff0c;通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中…

CVPR2022医疗图像-GBCNet网络:胆囊癌(GBC)超声(USG)图像检测模型

Surpassing the Human Accuracy:Detecting Gallbladder Cancer from USG Images with Curriculum Learning&#xff1a;超越人类的准确性:基于课程学习的USG图像检测胆囊癌 目录 一、背景与意义 二、介绍 三、网络框架 3.1 区域选择网络 3.2 MS-SoP分类器 3.3 多尺度块 …

前端加载excel文件数据 XLSX插件的使用

npm i xlsx import axios from axios; axios //这里用自己封装的http是不行的&#xff0c;踩过坑.get(url,{ responseType: "arraybuffer" }).then((re) > {console.log(re)let res re.datavar XLSX require("xlsx");let wb XLSX.read(r…

20240523每日运维--------聊聊docker简介(一)

dotCloud 说Docker&#xff0c;必不可免不得不说dotCloud&#xff0c;Docker本来只是dotCloud公司的内部项目&#xff0c;其公司创始人 Solomon Hykes 发了一个内部项目&#xff0c;而这个项目就是Docker&#xff0c;自从2013年docker开源以后&#xff0c;在世界范围引起相当轰…

【设计模式】JAVA Design Patterns——Bridge(桥接模式)

&#x1f50d;目的 将抽象与其实现分离&#xff0c;以便二者可以独立变化。 &#x1f50d;解释 真实世界例子 考虑一下你拥有一种具有不同附魔的武器&#xff0c;并且应该允许将具有不同附魔的不同武器混合使用。 你会怎么做&#xff1f; 为每个附魔创建每种武器的多个副本&…

Android 性能为王时代SparseArray和HashMap一争高下

文章目录 一、SparseArray 源码分析1. **类定义和构造函数**2. **基本方法**2.1 put(int key, E value)2.2 get(int key)2.3 delete(int key)2.4 removeAt(int index)2.5 gc()2.6 size()2.7 keyAt(int index) 和 valueAt(int index) 3. **辅助方法**3.1 binarySearch() 二、使用…

Axure软件安装教程

链接&#xff1a;https://pan.baidu.com/s/1fHrSrZ7PIeDZZpn6QyJ6jQ?pwdb4mv 提取码&#xff1a;b4mv 安装完后点击Finish 名字随便起 关闭Axure 复制到安装目录下 最后成果

SQL学习小记(一)

SQL学习小记&#xff08;一&#xff09; 1. 存储过程&存储函数1.1. 存储过程1.2. 存储函数 2. DEFINER3. INSERT INTO&#xff08;插入新记录&#xff09;4. REPLACE()…AS…5. SUM()函数6. CASE WHEN7. STR_TO_DATE日期时间处理函数8. SUBSTRING函数9. dateFormat函数10. …

Python数据可视化(六)

实现事件处理效果 我们借助 matplotlib 可以实现事件处理效果&#xff0c;例如&#xff0c;单击关闭画布会出现画布被关闭的文本提 示&#xff0c;在画布上的图形界面任意位置单击可以获得放大后的此处图形界面等。下面&#xff0c;我们就挑选一些 典型的事件处理案例来讲解实现…

7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)

1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关&#xff0c;允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable&#xff08;错误可纠正&#xff09…

探数API统计分享-1949年-2021年中国历年夏粮产量统计报告

​​​​​​​​中国历年夏粮产量​&#xff0c;为1949年到2021年我国每年的夏粮产量数据。2021年&#xff0c;我国夏粮产量为14596万吨&#xff0c;比上年增长2.2%。 数据统计单位为&#xff1a;万吨 。 我国夏粮产量有多少&#xff1f; 2021年&#xff0c;我国夏粮产量为1…

【小白向】MAC端VSCode C++环境配置(超干货、超详细)

提示&#xff1a;使用环境为 MAC&#xff08;M2&#xff09; 其实 VSCode 很早就下载好了&#xff0c;但是因为在配置过程中总是遇到很多坑&#xff0c;搁置了很久&#xff0c;回头捡起遇到报 Error 还是两眼抓瞎&#xff0c;到处翻 blog。为了减少以后的遇坑可能性&#xff0c…

uniapp开发安卓app高德地图

uniapp开发安卓app高德地图 一、高德创建key二、uniapp配置三、uniapp打包证书获取 一、高德创建key 优先去高德地图开发者平台去创建关联项目 高德开发者平台 打开我的应用&#xff0c;添加key 进行高德key的配置 其中key建议设置成app的名称&#xff0c;便于区分SHA1获取可以…

【ChatGPT】 Microsoft Edge 浏览器扩展使用 GPT

【ChatGPT】添加 Microsoft Edge 浏览器插件免费使用 GPT 文章目录 准备工作添加扩展注意事项 使用 ChatGPT 可以更高效的搜索到想要的内容&#xff0c;有效节约在搜索引擎中排查正确信息的时间。 准备工作 准备一台可上网的电脑电脑上安装有 Windows 自带的 Microsoft Edge …

剪画小程序:3个方法:告诉你如何将普通的照片转换成动漫二次元风格!

Hello&#xff01;亲爱的小伙伴们&#xff01; 你是否还在纠结于自己的自拍太普通&#xff0c;每次分享到社交账号上都觉得平平无奇&#xff0c;引不起波澜&#xff1f; 假如&#xff0c;你和朋友们一起出去玩&#xff0c;大家都开心地拍着自拍。你看着自己的照片&#xff0c…

【ONE·MySQL || 视图和用户管理】

总言 主要内容&#xff1a;介绍MySQL中视图和用户管理。             文章目录 总言1、视图1.1、基本介绍1.2、相关操作1.2.1、创建及查看视图1.2.2、修改视图1.2.3、更新视图1.2.4、删除视图 2、用户管理2.1、用户管理2.1.1、基本介绍2.1.2、使用用户登录MySQL服务器2…

MyBatis中Where标签:揭秘高效SQL构建的秘密

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 理解Where标签的基础概念 在MyBatis中&#xff0c;<where>标签是用于构建SQL查询语句中的一个非常重要的元素。它允许你在一个动态的SQL语句中添加WHERE子句&#xff0c;而不需要担心SQL语法错误或额外的逗号…

【Linux】之【Get√】查看linux CPU 架构 ---- amd64、x86、x86_64、arm64

关于Linux软件下载时&#xff1a;amd64、x86、x86_64、arm64 的说明 archuanme -alscpu

MySQL中视图是什么,有什么作用

目录 一、视图的简介 1.1 什么是视图&#xff1f; 1.2 为什么使用视图&#xff1f; 1.3 视图有哪些规则与限制&#xff1f; 1.4 视图能否更新&#xff1f; 二、视图的创建 三、视图的作用 3.1 用视图简化复杂的联结 3.2 用视图格式化检索出的数据 3.3 用视图过滤数据…