首页 > 其他分享 >jQuery在请求返回前增加遮罩问题

jQuery在请求返回前增加遮罩问题

时间:2024-03-27 15:22:53浏览次数:24  
标签:jQuery 遮罩 请求 渲染 50% JS 引擎 线程

好久没有使用jquery了;做了个小工具没有前端东西突然要用到了;就想到了jquery;为了增加用户体验体验,增加了一个页面,增加了用户点击按钮后的响应遮罩的显示和隐藏;

 增加div

    <div id="loading-mask">
      <div id="loading-spinner"></div>
    </div>

增加css

#loading-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 9999;
  display:none
}

#loading-spinner {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 50px;
  height: 50px;
  border: 5px solid #fff;
  /* border-top-color: #888; */
  border-radius: 50%;
  animation: spin 1s infinite linear;
  
  border-top-color: #333;
 /*  background: conic-gradient(#89e31feb 0%, #89e31feb 33%, #e838daeb 66%, #89e31feb 100%); */

}

@keyframes spin {
  0% {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

js代码实现显示和关闭

//提交
    $(".btn").click(function(){
      $.ajax({
    	    url: 地址,
    	    data: $("form").serialize(),
    	    type: "post",
    	    /* async:false, */
    	    dataType: "json",
    	    beforeSend:function(){
    	    	$('#loading-mask').show();//显示遮罩
    	    },
    	    success: function(data) {
    	    	console.log(data);
	    		 $('#loading-mask').hide();//隐藏遮罩
    	    }
    	});
    });

  

遇到的坑————————遮罩不显示

因ajax设置了同步,而GUI渲染线程与JS引擎线程是互斥的,所以此时渲染线程被阻塞导致遮罩的样式没有被加载出来。

而直接设置ajax请求为异步的时候,浏览器会新开一个线程来执行,当然回调的时候还是js的单线程性。只是此时GUI渲染线程不会被阻塞。

1.GUI渲染线程

负责渲染浏览器界面,解析HTML,CSS,构建DOM树,布局和绘制等等。

当界面需要重绘时,该线程就会执行

2.JS引擎线程

JS引擎线程负责解析Javascript脚本,运行代码。

JS引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个JS线程在运行JS程序

注意,GUI渲染线程与JS引擎线程是互斥的,所以如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞。(这就是出现以上ajax请求阻塞了渲染线程的原因所在)

3.事件触发线程

归属于浏览器而不是JS引擎,用来控制事件循环,当JS引擎执行代码块如setTimeOut时(也可来自浏览器内核的其他线程,如鼠标点击、AJAX异步请求等),会将对应任务添加到事件线程中

当对应的事件符合触发条件被触发时,该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理

注意,由于JS的单线程关系,所以这些待处理队列中的事件都得排队等待JS引擎处理(当JS引擎空闲时才会去执行)

4.定时触发器线程

setInternal与setTimeout所在线程,浏览器定时计数器并不是由JavaScript引擎计数的,(因为JS引擎是单线程的, 如果处于阻塞线程状态就会影响记计时的准确),因此通过单独线程来计时并触发定时(计时完毕后,添加到事件队列中,等待JS引擎空闲后执行)

5.异步http请求线程

在XMLHttpRequest在连接后是通过浏览器新开一个线程请求,将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件队列中。再由JavaScript引擎执行。

 

标签:jQuery,遮罩,请求,渲染,50%,JS,引擎,线程
From: https://www.cnblogs.com/wwwcf1982603555/p/18099373

相关文章

  • SpringBootWeb最新相关技术(上接maven):IDEA2023-Spring环境,http协议复习概览,web服务器To
    Spring官网HTTPs://spring.iospring生态(全家桶)基于SpringFramework基础框架。但如果我们基于该基础框架开发,会面临配置繁琐,入门难度大的问题,SpringBoot则可以快速开发(简化配置,快速开发)。1.SpringBootWeb入门使用SpringBoot开发一个Web应用,浏览器发起请求/hello之后,给浏......
  • jQuery的使用
    jQuery的使用一、jQuery1.什么是二、jQuery的安装1.去官网直接下载2.通过cdn的格式引入三、jQuery语法1.基础语法2.实例3.jQuery页面加载事件和js页面加载事件的区别4.jQuery中的选择器一、jQuery1.什么是1、jQuery是一个JavaScript函数库。2、jQuery是一个轻......
  • js/jquery:5行代码实现点击按钮复制文字到剪贴板
     方法1:<pid="p1">Hello,I'mTEXT1</p><buttononclick="copyToClipboard_js('p1')">复制文字1(js)</button><script>functioncopyToClipboard_js(element){vartemp=document.createElement(&quo......
  • 隐藏的图片在浏览器中的请求
    隐藏的图片在浏览器中的请求图片在页面中一般会以两种形式出现:img元素或者背景图片。那么在img或者使用背景图片的元素被隐藏之后,页面加载的时候浏览器会不会发送http请求加载图片呢?注:隐藏分为两种情况(display:none)和(visibility:hidden)接下来就对两种情况下不同浏览器的请求情......
  • 写请求异步化方案
    参考:https://news.sohu.com/a/566698836_121124376https://www.cnblogs.com/maohuidong/p/17147870.html方向:减少写动作的耗时,提升写动作的并发度1、优化sql,分库分表,提高数据库配置2、线程池 3、本地内存+定时任务 4、MQ 5、代理服务 ......
  • 【HTTP完全注解】条件请求
    条件请求还记得范围请求以及缓存中所介绍的基于时间/版本的验证请求吗?这些能够携带某些条件发起的请求,被称为条件请求。条件请求是HTTP的一种内容协商机制,该机制通过在请求中包含特定的标头来告知服务器仅在某些条件得到满足时才响应。这类请求可以用来验证缓存的有效性,省......
  • 【HTTP完全注解】范围请求
    范围请求范围请求是HTTP的一种内容协商机制,该机制允许客户端只请求资源的部分内容。范围请求在传送大的媒体文件,或者与文件下载的断点续传功能搭配使用时非常有用。范围请求的工作流程范围请求通过在HTTP请求标头Range中表明需要请求的部分资源的字节范围,服务器收到请求......
  • SpringBoot3项目使用Knife4j时访问doc.html出现Knife4j文档请求异常且开发者工具网络
    1.在各个pom.xml中替换Knife4j的依赖版本,升级为4.0以上,如果找不到依赖可以在Maven配置中多添加几个镜像,或者使用汉化插件重启IDEA;<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId......
  • Django框架之csrf跨站请求
    【一】跨站请求伪造介绍【1】引入CSRF(Cross-SiteRequestForgery)跨站请求伪造是一种常见的网络攻击方式。攻击者通过诱导受害者访问恶意网站或点击恶意链接将恶意请求发送到目标网站上利用受害者在目标网站中已登录的身份来执行某些操作从而达到攻击的目的。【2】举......
  • 【JS】并发请求
    需求封装一个函数,做到可以进行并发请求,并将结果返回。该函数接收两个参数,分别为urls和maxNum。urls是数组,其中元素均为请求地址;maxNum表示最大并发数。如果有完成的请求,会从urls中,按序取出下一个请求,请求的结果会计入返回的数组中,返回的数组中元素的索引与参数urls中保......