jQuery封装$.ajax实现前端锁屏与解屏功能
本文介绍如何通过封装jQuery的$.ajax方法实现前端页面锁屏功能。通过自定义doPost插件,在发起异步请求时自动显示遮罩层和加载动画,请求结束后自动解屏。包含完整的CSS样式、HTML结构及JavaScript调用示例,适用于需要防止用户重复提交或提升交互体验的场景。
jQuery锁屏插件源码实现
以下是实现该功能的jQuery插件核心源码。该插件旨在对原生$.ajax进行封装,从而在请求过程中加入锁屏逻辑。主要参数包括:isAsync(是否异步,默认true)、isLock(是否启用锁屏,默认true)以及isCache(是否启用浏览器缓存,默认false)。
/**
* 对jquery中$.ajax进行封装,以便加入锁屏功能
* isAsync 是否为异步请求,默认为true
* isLock 是否锁屏,默认是true
* isCache 是否从浏览器缓存中加载信息,默认是fasle
***/
;(function($) {
$.fn.doPost = function(settings) {
settings = jQuery.extend({
isAsync:true,
type : "post",
url : null,
dataType : null,
data : null,
success : null,
error : toError,
isLock : true,
isCache : false
}, settings);
$(this).each(function(){
if(settings.isLock){
lockSrc();
}
$.ajax({
async:settings.isAsync,
type:settings.type,
url:settings.url,
dataType:settings.dataType,
data:settings.data,
cache:settings.isCache,
success:function(msg){
if(settings.isLock){
unlockSrc();
}
settings.success(msg);
},
error:settings.error
});
});
//锁屏方法
function lockSrc(){
$(".lockDiv").css({"opacity":"0.5"}).fadeIn('normal');
var scrollWidth = document.documentElement.clientWidth;//document.body.clientWidth;
var scrollHeight =document.documentElement.clientHeight; // document.body.clientHeight;
var divWidth = $(".lockDivInfo").width();
var divHeight = $(".lockDivInfo").height();
var divLeft = scrollWidth/2-divWidth/2;
var divTop = scrollHeight/2-divHeight/2;
//console.log("bodyWidth="+scrollWidth+",bodyHeight="+scrollHeight+",divHeight="+divHeight+",divWidth="+divWidth+",left="+divLeft+",top="+divTop);
$(".lockDivInfo").css({"position":"absolute","top":divTop,"left":divLeft}).fadeIn('normal');
}
//解屏方法
function unlockSrc(){
$(".lockDivInfo").fadeOut('normal');
$(".lockDiv").fadeOut('normal');
}
function toError(){
alert("操作失败!");
}
};
})(jQuery);
锁屏功能的视觉呈现依赖于特定的CSS样式定义。主要包含两个遮罩层:.lockDiv用于覆盖整个页面,设置宽高为100%,背景色为#DFE8F6,层级z-index为10;.lockDivInfo用于显示加载动画,定位在左上角,层级z-index为11。此外,#CloseDiv定义了加载图标的位置和大小。
锁屏CSS样式定义
/*
锁屏
*/
.lockDiv {
width: 100%;
height: 100%;
display: none;
z-index: 10;
background-color: #DFE8F6;
position: absolute;
top: 0px;
left: 0px;
}
.lockDivInfo {
width: 50px;
height: 2px;
display: none;
position: absolute;
left: 0px;
top: 0px;
z-index: 11
}
#CloseDiv {
float: right;
width: 100px;
height: 100px;
margin-top: 10px;
margin-right: 10px;
}
<div class="lockDiv"></div>
<div class="lockDivInfo" >
<img id="CloseDiv" src="/hnhd/images/circle_animation.gif"></img>
</div>
前端调用示例
在实际业务代码中,可以通过调用封装好的doPost方法来发起请求。例如,在查询按钮点击事件中,构建包含type、url、data等参数的配置对象,并调用$("#queryBtn").doPost(settings)。该方法会自动处理锁屏显示与隐藏,无需手动控制UI状态。
//查询
$("#queryBtn").click(function(){
selecCheckByRegionApp.query();
});
var selecCheckByRegionApp={};
selecCheckByRegionApp.query=function(){
var settion={
type:"post",
url: 'selfCheckStatisticAction!findByRegion' ,
dataType:"text",
data:$("#searchForm").formSerialize(),
success:function(msg){
$("#contentDiv").html(msg);
}
};
$("#queryBtn").doPost(settion);
}
免登录快速分享代码:适合面试协作的轻量级JS在线运行工具推荐
2026-11-05 14:45:59
JS空字符串和纯空格转浮点数的结果是什么
2026-11-05 11:04:42
JS在线格式化缩进混乱怎么办?配置项调整技巧
2026-11-04 23:27:25
JS怎么获取秒级时间戳
2026-11-03 21:45:29
JS时间戳怎么从毫秒转换为秒
2026-11-03 20:04:14
