加载中...遮罩层

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="D:\Project\HtmlDemo\script\jquery-1.11.0.min.js"></script>
    <link href="D:\Project\HtmlDemo\script\MaskUtils.css" rel="stylesheet" />
</head>
<body>
    <input type="button" onclick="opens()" name="name" value="打开遮罩层" />
</body>
</html>
<script>
    function opens() {
        var searchLoading = MaskUtils();

        //打开自定义遮罩层
        searchLoading.mask();

        //关闭自定义遮罩层
        //setTimeout(function () { searchLoading.unmask() }, 10000)

    }
    function MaskUtils() {
        var $mask, $maskMsg;
        var defMsg = '请稍等...';
        function init() {
            if (!$mask) {
                $mask = $("<div style=\"width:100%;display:none;text-align:center;position:absolute;top:0px;height:100%;font-size: 12px;z-index:1000000000;background: #ffffff7a;\"><div style=\"position:relative;top:45%;width:100%;\"> <div class=\"loadingSearch\" ><div></div><div></div><div></div><div></div></div></div></div>").appendTo("body");
            }
            if (!$maskMsg) {
                $maskMsg = $("<div class=\"datagrid-mask-msg\" style=\"z-index:100001;position: absolute;text-align:center\">" + defMsg + "</div>")
                    .appendTo("body").css({ 'font-size': '12px' });
            }
            $mask.css({ width: "100%", height: "100%" });
            $maskMsg.css({
                width: "100%",
                top: "50%"
            });
        }
        return {
            mask: function (msg) {
                init();
                $mask.show();
                $maskMsg.html(msg || defMsg).show();
            },
            unmask: function () {
                if ($mask) {
                    $mask.hide();
                    $maskMsg.hide();
                }
            }
        }
    }
</script>

css内容

.loadingSearch {
    position: absolute;
    z-index: 9997;
    width: 60px;
    height: 54px;
    left: calc(50% - 30px);
    top: calc(50% - 27px);
    text-align: center;
    overflow: hidden;
}

/*当有loading文字时在图标外再包裹一层*/
.sx-loading__wrapper-large {
    position: absolute;
    width: 200px;
    height: 86px;
    left: calc(50% - 100px);
    top: calc(50% - 43px);
}

.loadingSearch div {
    position: absolute;
    bottom: 0;
    width: 10px;
    height: 54px;
    border-radius: 3px;
}

    .loadingSearch div:nth-child(1) {
        left: 0;
        background-color: #ED4D4D;
        animation: line-grow 0.5s 0s ease alternate infinite;
    }

    .loadingSearch div:nth-child(2) {
        left: 15px;
        background-color: #FFD75B;
        animation: line-grow 0.5s 0.15s ease alternate infinite;
    }

    .loadingSearch div:nth-child(3) {
        left: 30px;
        background-color: #2CBEF1;
        animation: line-grow 0.5s 0.3s ease alternate infinite;
    }

    .loadingSearch div:nth-child(4) {
        left: 45px;
        background-color: #2DF07B;
        animation: line-grow 0.5s 0.4s ease alternate infinite;
    }

@-webkit-keyframes line-grow {
    0% {
        transform: translateY(54px);
    }

    100% {
        transform: translateY(0px);
    }
}

@keyframes line-grow {
    0% {
        transform: translateY(54px);
    }

    100% {
        transform: translateY(0px);
    }
}

### jQuery AJAX 请求中添加 Loading 遮罩层 为了实现在 jQuery 的 AJAX 请求期间展示加载中的遮罩层效果,可以采用如下策略: #### 使用 `beforeSend` 和 `complete` 回调函数控制遮罩层的显示与隐藏 通过设置 `$.ajax()` 方法里的 `beforeSend` 属性来启动遮罩层,并利用 `complete` 属性关闭它。这能确保无论请求成功与否,遮罩层都能正确地呈现并最终移除。 ```javascript $(document).ready(function(){ $(&#39;#submit&#39;).click(function(event){ event.preventDefault(); $.ajax({ url: &#39;your_url_here&#39;, type: &#39;POST&#39;, data: { /* your_data */ }, beforeSend: function(){ // 显示遮罩层 $(&#39;.loading-mask&#39;).show(); }, complete: function(){ // 完成后隐藏遮罩层 setTimeout(function(){ $(&#39;.loading-mask&#39;).hide(); }, 1000); // 延迟一秒再隐藏以模拟处理时间 } }); }); }); ``` #### HTML 结构定义遮罩层样式 在页面上预先准备好一个用于表示加载状态的 div 元素作为遮罩层,默认情况下它是不可见的 (`display:none`)。 ```html <div class="loading-mask" style="position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff;opacity:.8;z-index:99;text-align:center;padding-top:25%;"> <img src="spinner.gif"/> </div> <button id="submit">Submit</button> ``` 上述代码片段展示了如何创建一个简单的遮罩层以及按钮触发器[^1]。 #### 处理同步请求带来的问题 需要注意的是,如果使用了同步式的 AJAX 调用,则可能会遇到遮罩层无法正常工作的情况。这是因为同步请求会阻止 JavaScript 执行直到服务器响应返回为止,从而影响 UI 更新。因此建议总是优先考虑异步请求的方式来进行网络通信[^3]。 对于确实需要保持同步行为的应用场景下,可以通过调整逻辑结构或将原本打算放在同一进程中完成的任务拆分成多个独立的操作序列来规避此限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值