网页Loading效果

问题描述:由于项目要求在页面提交以及加载的时候,有短暂的卡顿,需要用loading过渡。

1.下一个页面加载的时候实现:

base-loading.js

//获取浏览器页面可见高度和宽度
var _PageHeight = document.documentElement.clientHeight,
    _PageWidth = document.documentElement.clientWidth;
//计算loading框距离顶部和左部的距离(loading框的宽度为215px,高度为61px)
var _LoadingTop = _PageHeight > 61 ? (_PageHeight - 61) / 2 : 0,
    _LoadingLeft = _PageWidth > 215 ? (_PageWidth - 215) / 2 : 0;
//在页面未加载完毕之前显示的loading Html自定义内容
var _LoadingHtml = ‘<div id="loadingDiv" style="position:absolute;left:0;width:100%;height:‘ +
    _PageHeight + ‘px;top:0;background:#f3f8ff;opacity:1;filter:alpha(opacity=80);z-index:10000;"><div style="position: absolute; cursor1: wait; left: ‘ +
    _LoadingLeft + ‘px; top:‘ + _LoadingTop + ‘px; width: auto; height: 57px; line-height: 57px; padding-left: 50px; padding-right: 5px; background: #fff url(/Content/img/loading.gif) no-repeat scroll 5px 10px; border: 2px solid #95B8E7; color: #696969; font-family:\‘Microsoft YaHei\‘;">页面加载中,请等待...</div></div>‘;
//呈现loading效果
document.write(_LoadingHtml);
//window.onload = function () {
//    var loadingMask = document.getElementById(‘loadingDiv‘);
//    loadingMask.parentNode.removeChild(loadingMask);
//};
//监听加载状态改变
document.onreadystatechange = completeLoading;
//加载状态为complete时移除loading效果
function completeLoading() {
    if (document.readyState == "complete") {
        var loadingMask = document.getElementById(‘loadingDiv‘);
        loadingMask.parentNode.removeChild(loadingMask);
    }
}

页面调用代码:在head前面引入上面的JS,实现过渡效果。

    <script src="/Content/js/base-loading.js"></script>
</head>

2.页面提交时的过渡效果实现

A.首先在当前页面新建一个隐藏的加载页面的层

 <!-- loading 层 -->
    <div id="loadingDiv2" style="display: none;position:absolute; top: 0;left:0;width:100%;op:0;background:#f3f8ff;opacity:1;filter:alpha(opacity=80);z-index:10000;">
        <div id="loadingDiv3" style="position: absolute; cursor1: wait; width: auto; height: 57px; line-height: 57px; padding-left: 50px; padding-right: 5px; background: #fff url(/Content/img/loading.gif) no-repeat scroll 5px 10px; border: 2px solid #95B8E7; color: #696969; font-family:\‘Microsoft YaHei\‘;">页面加载中,请等待...</div>
    </div>
</body>

B.当提交按钮点击或者from的ajax提交时调用js,设置隐藏层的高度和位置并显示

function showLoading() {
    var _PageHeight = $(document).height();//document.documentElement.clientHeight,
    _PageWidth = document.documentElement.clientWidth;
    //计算loading框距离顶部和左部的距离(loading框的宽度为215px,高度为61px)
    var _LoadingTop = $(document).scrollTop() + document.documentElement.clientHeight / 2;//折叠高度+1/2浏览器高度得到当前视图中间
        _LoadingLeft = _PageWidth > 215 ? (_PageWidth - 215) / 2 : 0;
    //隐藏层在_Layout_Survey_Edit.cshtml
    $("#loadingDiv2").height(_PageHeight);
    $("#loadingDiv3").css("left", _LoadingLeft + "px");
    $("#loadingDiv3").css("top", _LoadingTop + "px");
    $("#loadingDiv2").show();
}

C.调用showLoading函数

由于项目用的是Jeuery的数据验证引擎,因此在回调函数onAjaxFormComplete: ajaxValidationCallback中去调用loading函数

//表单验证 事件绑定
    if (!runFormBindingFlag) {
        jQuery(‘.js_form‘).submit(packUncheckItem);
        jQuery(‘.js_form‘).validationEngine({
            showOneMessage: true,
            ajaxFormValidation: true,
            ajaxFormValidationMethod: ‘post‘,
            //onBeforeAjaxFormValidation: showLoading,
            onAjaxFormComplete: ajaxValidationCallback
        });
// 异步提交表格后 回调事件
function ajaxValidationCallback(status, form, json, options) {
    //由于loading效果出现后就无法取得当前页面的token  sUrl信息,因此先取出来
    var sUrl = $("#js_page_hide").attr("page");
    var token = $("#hidden_token").val();
    var currentUrl = "";
    showLoading();
    if (status === true) {
        // uncomment these lines to submit the form to form.action
        // form.validationEngine(‘detach‘);
        // form.submit();
        // or you may use AJAX again to submit the data
        //var currentUrl=location.href.substr(0,location.href.indexOf(‘/Page/‘)+6);
        if (location.href.indexOf(‘/Page/‘) > 0) {
            currentUrl = location.href.substr(0, location.href.indexOf(‘/Page/‘) + 6);
        }
        if (location.href.indexOf(‘/PageView/‘) > 0) {
            currentUrl = location.href.substr(0, location.href.indexOf(‘/PageView/‘) + 10);
        }
        //var sUrl = $("#js_page_hide").attr("page");
        //var token = $("#hidden_token").val();
        if(sUrl) {
            if(sUrl==‘Executive_other_benefits‘) {
                sUrl="/Survey/submit/?token="+token;
                document.location=sUrl;
            }
            else {
                sUrl = currentUrl + sUrl + "?token=" + token + "&isNext=1";//&isNext=1"标记是点击下一页的情况
                document.location=sUrl;
            }
        }
    } else {
        window.location.reload();
        //document.location = currentUrl;//提交失败,则直接刷新
    }
}

由于ajax的异步提交,回调函数会先执行,然后等待服务器的返回status === true,因此将loading函数放在回调处理之前,回调过程中进行了页面跳转并且loading层初始设置为隐藏,因此不需要对loading层进行隐藏。

时间: 2024-08-09 20:38:26

网页Loading效果的相关文章

Ajax风格的一款网页Loading效果

现在比较流行的一款Ajax风格的网页Loading,多见于一些大量使用Ajax技术的网站中,页面加载时会自动显示提示信息,带载入动画效果,网页加载完自动消失,是一款正在具有Loading功能的网页进度条. <html></P> <P><head> <title>Loading</title> <style type="text/css"> body{background-color:#000;} #co

Jquery Easy UI 实现页面的Loading效果(类似于Android的ProgressDialog)

前言 很常用的一种前端效果,比如当用户点击网页的某个按钮发送了一条异步请求,如果响应时间过长容易导致用户重复点击,一方面影响用户体验一方面容易造成不必要的服务端压力,Easy UI有现成的mask样式,简单封装一下就可以使用,之前查阅搜集了相关资料和文章,发现都介绍的都不是很完整,所以本篇blog就完整的记录一下通过Easy UI快速实现这种效果以及如何集成到项目中. 引入.封装和调用 首先当然是在我们的项目中集成jquery以及easyui的相关资源包,除了jquery的核心js文件,easy

javscript 实现iframe加载内容页出现LOADING效果

<div id="load" align="center"> <img src="http://sc.cnwebshow.com/upimg/allimg/070707/01294420.gif" /> loading </div> <!-- 首先放一个div,用做loading效果 --> <iframe id="demo" src="http://www.**

HTML5 Canvas 实现的9个 Loading 效果

Sonic.js 是一个很小的 JavaScript 类,用于创建基于 HTML5 画布的加载图像.更强大的是 Sonic.js 还提供了基于现成的例子的创建工具,可以帮助你实现更多自定义的(Loading)加载动画效果. 在线演示      源码下载 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型

CSS3实现8种Loading效果【第二波】

今晚吃完饭回宿舍又捣鼓了另外几种Loading效果,老规矩,直接“上菜“…… 注:gif图片动画有些卡顿,非实际效果! PS:若要转载请注明出处,尊重一下作者! 第一种效果: 代码如下: <div class="loading"> <span></span> <span></span> <span></span> <span></span> <span></sp

自动播放——幻灯片缓冲效果&amp;&amp;带Loading效果的图片切换&amp;&amp;移动效果(按轨迹移动)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

CSS3实现8种Loading效果【二】

CSS3实现8种Loading效果[二] 今晚吃完饭回宿舍又捣鼓了另外几种Loading效果,老规矩,直接“上菜“…… 注:gif图片动画有些卡顿,非实际效果! 第一种效果: 代码如下: <div class="loading"> <span></span> <span></span> <span></span> <span></span> <span></sp

Loading效果 UIActivityIndicatorView

//初始化: UIActivityIndicatorView* indicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; //设置显示样式,见UIActivityIndicatorViewStyle的定义 indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; //设置显示位置 [i

网页3D效果库Three.js初窥

网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 Three.js官网的文档,部分文字和代码为我个人添加. 第一部分:three.js介绍 创建场景 这部分的目标是为Three.js做一个简单的介绍,我们会以创建一个场景,一个旋转的立方里开始,文章的结尾会有一个可运行的完整示例为你解惑. 开始之前 在你使用Three.js之前,你需要在你的电脑上建