美文网首页辅助资料unity
手撸一个动态居中带渐隐渐显蒙层的 html 模态窗口

手撸一个动态居中带渐隐渐显蒙层的 html 模态窗口

作者: 雨落随风 | 来源:发表于2022-03-02 20:05 被阅读0次

Unity 开发 WebGL 的项目想要播放视频,我觉得使用 H5 的 <video>标签就够了,想做一个通过RTSPtoWebRTC 在浏览器播放 rtsp 的示例,所以先撸个弹窗试下。

前言:

先说什么是模态窗口,模态窗口通俗来讲就是独占 UI 框架最上层的窗口,不关掉这个窗口,其他窗口休想关闭。
那么,咱们用于播放视频的 html 模态窗口需求不就来了:

  1. 有个蒙版遮蔽整个网页;
  2. 蒙版最好能渐隐渐显;
  3. 点击蒙版周边区域,弹窗关闭;
  4. 弹窗位置动态适配浏览器尺寸实现永远居中

实现:

Talk is cheap show me your code.

  1. 先整蒙版、蒙版关闭按钮、弹窗的层叠样式表实现他们的布局。
        .mask {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: #000;
            opacity: 0;
            display: none;
            z-index: 99;
        }

        .closebutton {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: #000;
            opacity: 0;
            display: none;
            z-index: 100;
        }

        .panel {
            position: absolute;
            display: none;
            text-align: center;
            z-index: 101;
        }
  1. 再整 js 逻辑实现蒙版、弹窗的显示隐藏、视频播放以及一个简陋的 html 测试页面,逻辑有注释,看注释交流。
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>测试弹窗播放视频</title>
    <link rel="stylesheet"  type="text/css" href="htmlstyle.css">
    <script type="text/javascript" src="jquery-1.6.1.min.js"></script>
    <script type="text/javascript">
        var opacity = 0.68;
        var internal = 0.01;
        var timeout = 0.5;

        $(document).ready(function () {
            //浏览器窗口大小改变时
            $(window).resize(DoPanelResize);
            //浏览器有滚动条时的操作、
            $(window).scroll(DoPanelResize);
        });

        function ButtonClicked() {
            $(".panel").css({ 'display': 'block' });
            DoPanelResize();
            ShowMask(null, true);
        }

        // 隐藏弹窗
        function ClosePanel() {
            $(".panel").css({ 'display': 'none' });
            ShowMask(() => {
                $(".mask").css({ 'display': 'none' });
            }, false);
        }
        // 居中
        function DoPanelResize() {
            if ($(".panel").css("display") != "block") return;
            var screenWidth = $(window).width();
            var screenHeight = $(window).height();
            var scrolltop = $(window).scrollTop();
            var objLeft = (screenWidth - $(".panel").width()) / 2;//当前浏览器窗口的 宽高
            var objTop = (screenHeight - $(".panel").height()) / 2; + scrolltop;//获取当前窗口距离页面顶部高度
            $(".panel").css({ 'left': objLeft + 'px', "top": objTop + 'px' });
        }
        // 实现 蒙版的渐隐渐显
        function ShowMask(callback, isfadein) {
            var mask = document.getElementById("mask");
            mask.style.display = "block";
            var op = mask.style.opacity = isfadein ? 0.00 : 1;
            var op_temp = isfadein ? opacity : 0;
            var delay = setInterval(() => { //开启定时器
                if (isfadein) {
                    if (mask.style.opacity < op_temp) {
                        op += internal;
                    } else {
                        op = opacity;
                    }
                } else {
                    if (mask.style.opacity > op_temp) {
                        op -= internal;
                    } else {
                        op = opacity;
                    }
                }
                mask.style.opacity = op;
                if (Math.abs(mask.style.opacity - op_temp) < 0.001) {
                    $(".closebutton").css({ 'display': isfadein ? 'block' : 'none' });
                    if (callback) callback();
                    clearInterval(delay); //清除定时器
                }
            }, timeout);
        }
    </script>
</head>

<body>
    <div>点击以弹窗形式居中播放视频</div>
    <input type="button" onclick="ButtonClicked()" id="btn" value="播放" /> 
    <div class="mask" id="mask"></div>
    <button onclick="ClosePanel()" class="closebutton"></button>
    <div class="panel">
        <video controls >
            <source src="movie.ogg" type="video/ogg">
            your browser does not support the video tag
        </video>
    </div>
</body>
</html>

明明写的是 JS 但总感觉 C#里C#气的!

效果:


Tips:从动图演示来看,好像把上面谈到了需求都实现了哈。

写到最后:

  1. 非网页前端,面向百度编程,大佬轻拍。
  2. 使用了第三方插件 jquery
  3. 最原始的参考博客是这个:基于jquery的弹出提示框...
  4. 为方便交流,上传 Github
  5. 【Unity 3D】怎么在 WebGL 中播放 RTSP 监控

相关文章

  • 手撸一个动态居中带渐隐渐显蒙层的 html 模态窗口

    Unity 开发 WebGL 的项目想要播放视频,我觉得使用 H5 的 标签就够了,想做一个通过RTSPtoWe...

  • 渐隐渐显轮播图

    Html代码 CSS代码 图片是定位的,就会叠加在一起,这样就可以渐隐渐显,图片相对于容器wrap定位;ul指示器...

  • UI 背景渐隐渐显

    ImageFadeEffect.cs Fade.shader Shader中最重要的是frag中的这三行float...

  • 模态框插件

    一.基本使用 使用模态框的弹窗组件需要三层 div 容器元素,分别为 modal(模态声明层)、dialog(窗口...

  • BootStrap[第十三章:模态框插件]

    一.基本使用 使用模态框的弹窗组件需要三层 div 容器元素,分别为 modal(模态声明层)、dialog(窗口...

  • 前端面试每日 3+1 —— 第368天

    今天的知识点 (2020.04.18) —— 第368天 (我也要出题) [html] 实现一个居中半透明的模态窗...

  • electron学习---BrowserWindow对象

    创建和控制浏览器窗口。 无边框窗口 优雅地显示窗口 父子窗口 模态窗口 模态窗口是禁用父窗口的子窗口,创建模态窗口...

  • 滚动时的渐显渐隐标题

    前端入坑纪 56 今天来分享个简单的标题效果... 好,详解如下! OK,first things first! ...

  • 无题2

    欲求似薄雾,应渐隐渐显,不再寻究 夙愿似山丘,常渐平渐稳,不再苛求 心境似浊水,已渐明渐晰,不再弥留 感悟似浮萍,...

  • css 透明度引发的思考

    模态框实现 想要实现个模态框的效果,背景有一层蒙版,第一个想法就是设置背景淡灰色并给个透明度,so easy! 下...

网友评论

    本文标题:手撸一个动态居中带渐隐渐显蒙层的 html 模态窗口

    本文链接:https://www.haomeiwen.com/subject/ccjerrtx.html