JS 动态创建 dev 遮罩

创建遮罩

	function __mask(msgText) {

		if (msgText == undefined) {
			msgText = "正在操作,请稍候……";
		}
		
		// 需要给想遮罩的 dev给个id,这里获取那个dev的大小宽度,根据这个大小宽度来创建合适的遮罩
		var maskTagert = document.getElementById("maskTarget");
		

		if(!maskTagert)
			return;

		var width = maskTagert.offsetWidth;
		var height = maskTagert.offsetHeight;
		// 判断有没有遮罩,没有就创建
		var wait = document.getElementById("empMask");
		if (!wait) {
			wait = document.createElement("DIV");

			wait.style.top = height / 2;
			wait.style.left = width / 2;

			wait.style.width = "100%";
			wait.style.height = height;
			wait.style.display = "block";
			wait.id = "empMask";

			var msg = document.createElement("DIV");
			msg.id = "maskMsg";
			msg.style.height  = "100%";
			msg.style.width  = "100%";
			msg.style.background = "#e4e4e4";
			msg.style.position = "absolute";
			msg.style.top = 0;
			msg.style.left = 0;
			msg.style.filter = "alpha(opacity=50)"

			msg.className = "ext-el-mask-msg";
			msg.innerHTML = "<div style='color:blue;position:relative;top:"+height/2+"px;left:"+width/2+"px;'><img src='images/wait.gif' style='vertical-align:middle;filter:alpha(opacity=100);'>"
					+ msgText + "</div>";


			wait.className = "ext-el-mask";

			document.body.appendChild(msg);
			document.body.appendChild(wait);

		} else {
			wait.style.display = "block";
		}

	}

取消遮罩 

   function __unmask() {
	    var list = ["maskMsg","empMask"];
	    list.forEach(function(v) {
			var mask = document.getElementById(v)	;
			if (mask != undefined) {
				mask.style.display = "none";
			}
		});
	}

给需要上遮罩的 标签加一个id

<body class="page_comtent" onload="doOnLoad()" id="maskTaget">
.....
</body>

 

示例 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Mask</title>

    <style>
        .container {
            border: 1px solid #d0d0d0;
            margin: 100px 50px 0 50px;
            padding: 20px 30px 30px 30px;
        }
    </style>

</head>
<body>

<div class="container" id="container" style="position: relative">
    <h1>Simple Mask</h1>
    <button class="show-mask" data-mask-message="Loading...." data-mask-container="container">Show Mask</button>
</div>


<div class="container" id="container-timeout" style="position: relative">
    <h1>Mask with timeout</h1>
    <label for="in_timeout_val">Timeout</label>
    <input id="in_timeout_val" value="10"/>
    <button class="show-mask" data-mask-timeout="$in_timeout_val" data-mask-container="container-timeout">Show Mask
    </button>
</div>


<div class="container" id="container-message" style="position: relative">
    <h1>Mask with custom message</h1>
    <label for="in_message_val">Message</label>
    <input id="in_message_val" name="message_val" value="加载中"/>
    <br/>
    <label for="in_timeout_message_val">Timeout</label>
    <input id="in_timeout_message_val" value="10"/>
    <button class="show-mask" data-mask-message="$in_message_val" data-mask-timeout="$in_timeout_message_val"
            data-mask-container="container-message">Show Mask
    </button>
</div>


<script>

    const buttons = document.getElementsByClassName("show-mask");

    for (let i = 0; i < buttons.length; i++) {
        buttons[i].addEventListener("click", showMask)
    }


    function showMask(event) {
        const btn = event.target;
        const message = btn.getAttribute("data-mask-message");
        const container = btn.getAttribute("data-mask-container");
        const timeout = btn.getAttribute("data-mask-timeout");
        mask(message, container, timeout)
    }

    function mask(message, parent, timeout) {
        if (message === null || message === undefined) {
            message = "loading..."
        }

        if (message.startsWith("$")) {
            const id = message.replace("$", "");
            const el = document.getElementById(id);
            message = el.value;
        }


        if (parent === null || parent === undefined) {
            parent = document.body
        } else {
            parent = document.getElementById(parent)
        }

        const div = document.createElement("div");


        let parentWidth = parent.offsetWidth;
        let parentHeight = parent.offsetHeight;

        div.style.width = parentWidth + "px";
        div.style.height = parentHeight + "px";
        div.style.background = "#e4e4e4";
        div.style.opacity = "0.7";

        div.style.position = "absolute";

        if (parent.style.position === "") {
            parent.style.position = "relative";
        }

        if (parent.style.position === "relative") {
            div.style.top = "0px";
            div.style.left = "0px";
        } else if (parent.style.position === "absolute") {
            div.style.top = "0px";
            div.style.left = "0px";
        }

        const span = document.createElement("div");
        span.innerText = message;
        span.style.height = div.style.height;
        span.style.width = div.style.width;
        span.style.display = "table-cell";
        span.style.textAlign = "center";
        span.style.verticalAlign = "middle";

        if (timeout !== null && timeout !== undefined) {

            var timeoutVal = 0;

            if (!isNaN(timeout)) {
                timeoutVal = parseInt(timeout);
            }

            if (typeof timeout == "string" || timeout instanceof String) {
                if (timeout.startsWith("$")) {
                    const id = timeout.replace("$", "");
                    const el = document.getElementById(id);
                    timeoutVal = parseInt(el.value);
                }
            }

            if (timeoutVal > 0) {

                var timeLeft = timeoutVal;
                span.innerText = message + "[" + timeLeft + "s]";
                const interval = setInterval(function () {
                    span.innerText = message + "[" + --timeLeft + "s]";
                }, 1000);

                setTimeout((function () {
                    parent.removeChild(div);
                    clearInterval(interval);
                }), timeoutVal * 1000)
            }

        }

        div.appendChild(span);
        parent.appendChild(div);

    }


</script>


</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值