页面加载时让其显示笼罩层与加载等待图片

页面加载时让其显示笼罩层与加载等待图片(结局比较完美,过程很坎坷,所以一定总结整理下,备用):

用了ajax异步,是因为js内容不能即时的显示出来,因为js是单线程,要把队列中的任务执行完后才会执行刚才对js的处理

要用beforeSend,complete的时候必须要用ajax异步

beforeSend: function () {},//程序一开始便会执行该函数,使用该方法必须使用异步ajax

complete: function () {},//complete在success或error执行后执行

$.ajax({

type: "POST",

url: " ",

contentType: "",

data: fields,

beforeSend: function () {

var div1 = document.getElementById(‘form-submit-loading‘);

var div2 = document.getElementById(‘form-submit-overlay‘);

//由于页面的缓存问题,会出现加载等待图片重复的一些问题,所以在这块进行了判断,如果这些元素id存在直接让它显示就好,如果不存在(undefined),再执行创建的代码

if ((div1 == undefined) && (div2 == undefined)) {

                    //等待加载图片以笼罩层的创建代码

var loading = form_submit_overlay_loading();

var overlay = form_submit_overlay_f();

// $(‘body‘).append(loading);可以是整个页面,获取整个页面的宽度:$(window).width()。Div1只是个弹出框的id,这块仅对弹出框做加载效果

$(‘#Div1‘).append(loading);

$(‘#Div1‘).append(overlay);

var width = 130;

var height = 80;

var left = ($(‘#Div1‘).width() / 2) - (width / 2) + $(document).scrollLeft();

var top = ($(‘#Div1‘).height() / 2) - (height / 2) + $(document).scrollTop();

$("#form-submit-loading").css("top", top + "px").css("left", left + "px").css("display", ‘block‘);

$("#form-submit-overlay").css("display", "block");

}

$("#form-submit-loading").css("display", "block");

$("#form-submit-overlay").css("display", "block");

},

//之所以没使用这个,是因为是修改被人做好的项目,在项目执行success的时候页面被指向了其他地方,回调的时候页面已经不存在,所以complete不会执行

//complete:function(){

//$("#form-submit-loading").css("display","none");

//$("#form-submit-overlay").css("display","none");

//},

success: function (msg) {

if (msg != "sucees") {

alert(msg + ",请重新操作");

} else {

alert("操作成功");

$("#form-submit-loading").css("display","none");

$("#form-submit-overlay").css("display","none");

}

}

error: function () {

},

//默认是false,同步;true为异步

async: true

});

JS是单线程的,当一个函数执行的时候,JS引擎会锁住DOM树,其他事件的响应代码只能在队列中等待,并且此时页面卡死。

事实上异步Ajax确实用了多线程,只是Ajax请求的Http连接部分由浏览器另外开了一个线程执行,执行完毕之后给JS引擎发送一个事件,这时候异步请求的回调代码得以执行。

Http请求的执行在另外一个线程中,由于这个线程并不会操作DOM树,所以是可以保证线程安全的。发起Ajax请求和回调函数中间是没有JS执行的,所以页面不会卡死。

时间: 2024-11-03 05:24:14

页面加载时让其显示笼罩层与加载等待图片的相关文章

共享库加载时重定位

原作者:Eli Bendersky http://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries 本文的目的是解释现代操作系统怎样使得共享库加载时重定位成为可能.它关注执行在32位x86的LinuxOS.但通用的原则也适用于其它OS与CPU. 共享库有很多名字--共享库,共享对象,动态共享对象(DSO),动态链接库(DLL--假设你有Windows背景).为了统一起见.我将尽量在本文里使用"共享库

《Entity Framework 6 Recipes》中文翻译系列 (29) ------ 第五章 加载实体和导航属性之过滤预先加载的实体集合和修改外键关联

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13  过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用Code-First来管理数据访问 解决方案 实体框架不支持直接使用Include()时过滤关联实体集合,但我们可以通过创建一个匿名类型来完成同样的事情,匿名类型包含实体和要过滤的关联实体集合. 假设你有如图5-28所示的概念模型 图5-28 一个包含movies(电影)和它的categories(目录)的模

Javascript在页面加载时的执行顺序【转】

一.在HTML中嵌入Javasript的方法 直接在Javascript代码放在标记对<script>和</script>之间 由<script />标记的src属性制定外部的js文件 放在事件处理程序中,比如:<p onclick="alert('我是由onclick事件执行的Javascript')">点击我</p> 作为URL的主体,这个URL使用特殊的Javascript:协议,比如:<a href="

ASP.NET中页面加载时文本框(texbox控件)内有文字获得焦点时文字消失

代码如下: <asp:TextBox ID="TextBox1" runat="server" Height="26px" MaxLength="10" Width="166px" Text="请输入用户名" OnFocus="javascript:if(this.value=='请输入用户名') {this.value='';this.style.color='#000

aspx页面加载时清掉缓存

今天遇到一个问题,账户退出后登陆其他账户仍然显示上个账户用户名, 用了session.clear();session.abandon();context.Session["姓名"] = "";都不管用 最后在aspx页面加载时加上下面代码就可以了 Response.Expires = 0;Response.Cache.SetNoStore(); Response.AppendHeader("Pragma", "no-cache"

页面加载时遮罩效果

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>页面加载时遮罩效果</title>        <script type="text/javascript" src="js/jquery-1.4.1.min.js"></script>      

如何自动在html页面加载时动态改变div等元素的高度和宽度

这里需要用到jquery + css.原理是在页面加载时用javascript去动态改变一个class的高度和宽度.这样结合javascript能动态获取浏览器/页面的高度和宽度,从而使得div能动态的跟随浏览页面的大小变化而变化并且不影响高宽比.下面的代码创建一个手机页面,每一行三个图片分占33%,每个图片div的高和宽会随着浏览器的大小变化而自适应. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"

ARCServer加载专题图不显示——前端加载时强行修改地图服务请求的坐标系

问题描述:这是比较奇葩的一个问题,发布的服务坐标系是2385的,但是通过前端加载代码加载后,得到的请求是4549的,显示不了地图 解决思路:通过调试窗口,查看发送的请求,发现其对应的空间参考是4549.所以应该修改此请求,但是用户放大缩小平移是自动发送的请求,一般来说,地图的空间参考是根据第一次加载的地图来确定的,因而,想到可以修改地图map的空间参考. 解决方法: map.on("load", function () {                map.spatialRefer

页面加载时的 Loading 效果

//页面加载时的 Loading 效果 $(window).load(function () { window.setTimeout(function () { $('body').removeClass('loading'); }, 1000); }); 上面的JS部分: HTML 部分 <body class="loading"> <div class="main"> </div></body> css .load