zoukankan      html  css  js  c++  java
  • html全屏切换

    
    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .top {
                margin: 15px;
            }
    
            .main {
                 100%;
                height: 1000px;
                display: flex;
            }
    
            .left {
                 50%;
                height: 60%;
                background: gray;
                padding: 20px;
            }
    
            .left-son {
                 80%;
                height: 50%;
                margin: 15px;
                background: red;
            }
    
            .right {
                 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>
    
    <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>
    <script type="text/javascript">
        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>
    
    </html>
    
  • 相关阅读:
    cef加载flash的办法
    一个高性能的对象属性复制类,支持不同类型对象间复制,支持Nullable<T>类型属性
    php检测php.ini是否配制正确
    openwrt的路由器重置root密码
    windows 7 + vs2010 sp1编译 x64位版qt4
    解决SourceGrid在某些系统上无法用鼠标滚轮滚动的问题
    判断一个点是否在多边形内部,射线法思路,C#实现
    [转载]使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
    让Dapper+SqlCE支持ntext数据类型和超过4000字符的存储
    通过WMI
  • 原文地址:https://www.cnblogs.com/fly-book/p/14953126.html
Copyright © 2011-2022 走看看