extjs ajax 遮罩层,[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

前言

Load Mask(遮罩)效果,就是在页面还没有完全显示出来之前, 加上一个转装转的效果。

类似:

rc4ZGXqSGORA1h+YfDNXxviJ6jhrDCxyVSvG+IqFFDWOHjErVOL8kD0x453EINYfWkLyeL9sjhFmoISztNCrRHDrdQQ1jaaVKgPXK4hRrC0k6TAu2Rwy3UEJZ2mhRojxxuoYawtNOkQHvkcAs1hKWdprjV63XtkcMt1BDW3t6edqBitbe3pz1yuIUa4v8ajUa9XtfOVOTq9TopRCtqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAADGoIACLUEAAMaggAItQQAAxqCAAi1BAAjP8BMBT37Uve7wcAAAAASUVORK5CYII=

添加这样的效果有两个好处:

1. 在页面没完全show出来之前, 把后面的页面给遮罩起来, 防止进行一些非法的操作。

2. 如果页面show出来的时间比较长的话, 可以暂时吸引用户的注意力(也就是提高 User Experience).

在Extjs 中, Ext js 的使用方式有多种。

你有可能会发现为什么有的状况下load mask 不出现?  且听下面一一道来。。。

JsonStore 加载时会自动加上Load Mask

注意, 如果读的不是服务端数据,而是本地数据的话, 是不会加mask的(本地数据比较快,的确是没有必要加)。

类似这样来定义store:

Ext.create(‘Ext.data.Store‘, {

storeId:‘simpsonsStore‘,

fields:[‘name‘, ‘email‘, ‘phone‘],

data:{‘items‘:[

{ ‘name‘: ‘Lisa‘, "email":"[email protected]", "phone":"555-111-1224" },

{ ‘name‘: ‘Bart‘, "email":"[email protected]", "phone":"555-222-1234" },

{ ‘name‘: ‘Homer‘, "email":"[email protected]", "phone":"555-222-1244" },

{ ‘name‘: ‘Marge‘, "email":"[email protected]", "phone":"555-222-1254" }

]},

proxy: {

type: ‘memory‘,

reader: {

type: ‘json‘,

root: ‘items‘

}

}

});

接下来,就给出一个服务端读取数据的例子。 这里使用的是jsp.

显示一个Grid , store 从服务器端读取,测试的文件有两个:

grid.html    -- 定义grid 的文件

grid-data.jsp   - 取得数据的文件

grid.html

Insert title here

Ext.onReady(function(){

var store = new Ext.data.JsonStore({

storeId: ‘simpsonsStore‘,

proxy: {

type: ‘ajax‘,

url: ‘grid-data.jsp‘,

reader: {

type: ‘json‘,

root: ‘users‘,

idProperty: ‘name‘

}

},

fields:[‘name‘, ‘email‘, ‘phone‘],

});

Ext.create(‘Ext.grid.Panel‘, {

title: ‘Simpsons‘,

store: Ext.data.StoreManager.lookup(‘simpsonsStore‘),

columns: [

{ text: ‘Name‘, dataIndex: ‘name‘ },

{ text: ‘Email‘, dataIndex: ‘email‘, flex: 1 },

{ text: ‘Phone‘, dataIndex: ‘phone‘ }

],

height: 200,

width: 400,

renderTo: ‘grid-div‘

});

store.load();

});

grid-data.jsp

response.setContentType( "application/x-www-form-urlencoded;charset=UTF-8" );

String data = "";

data = "{‘users‘:[{‘name‘: ‘Lisa‘, ‘email‘:[email protected], ‘phone‘:‘555-111-1224‘}]}";

for(int i=0;i<10;i++)

{

Thread.currentThread().sleep(1000);

}

out.write(data);

out.flush();

%>

这里为了延长服务端时间, 使用Thread 的方式停留了10秒。

呈现的效果就是前言部分的贴图状况

在pop Window 的页面中的Grid 无法显示mask

场景描述如下:

1. 主页面是一个有两个 tab 页的页面

2. 在其中一个tab 页中有一个button, 点击后弹出一个dialog, 在这个弹出的dialog 中显示一个上面类似的grid.

出现的状况是: 弹出页面的grid 不会有mask 的效果。

Main.html  -- 定义两个tab 页的页面

popGrid.html -- 弹出的grid 页面

grid-data.jsp   - 取得数据的文件(和上面完全一样)

Main.html

Insert title here

Ext.onReady(function(){

Ext.create(‘Ext.tab.Panel‘, {

width: 400,

height: 400,

renderTo: document.body,

items: [{

title: ‘Foo‘,

items:[{

xtype:‘button‘,

text: ‘Pop Grid‘,

handler:function(){

showPopGridWindow();

}

}]

}, {

title: ‘Bar‘,

tabConfig: {

title: ‘Custom Title‘,

tooltip: ‘A button tooltip‘

}

}]

});

});

function showPopGridWindow()

{

Ext.create(‘Ext.window.Window‘,{

title:‘Grid Window‘,

height:400,

width:400,

constrain:true,

modal: true,

loader: {

url: ‘grid.html‘,

contentType: ‘html‘,

autoLoad: true

,scripts: true

}

}).show();

}

popGrid.html

Insert title here

Ext.onReady(function(){

var store = new Ext.data.JsonStore({

storeId: ‘simpsonsStore‘,

proxy: {

type: ‘ajax‘,

url: ‘grid-data.jsp‘,

reader: {

type: ‘json‘,

root: ‘users‘,

idProperty: ‘name‘

}

},

fields:[‘name‘, ‘email‘, ‘phone‘],

});

Ext.create(‘Ext.grid.Panel‘, {

title: ‘Simpsons‘,

store: Ext.data.StoreManager.lookup(‘simpsonsStore‘),

columns: [

{ text: ‘Name‘, dataIndex: ‘name‘ },

{ text: ‘Email‘, dataIndex: ‘email‘, flex: 1 },

{ text: ‘Phone‘, dataIndex: ‘phone‘ }

],

height: 200,

width: 400,

renderTo: ‘grid-div‘

});

store.load();

});

说明几点:

1. pop window  设置modal=true, 就会出现遮罩效果。 后面的页面被遮罩了。

ntbG9PMHAAAAABJRU5ErkJggg==

2. 以上的代码会发现pop window 中的grid 没有load mask 的效果。

出现这种状况的原因是什么?

把弹出的窗口拖动一下位置,细心一点就会发现:

loadMask 已经出来了, 只是show 的层次不对。看图

o23mcoyVgwAAAAASUVORK5CYII=

load Mask show在pop window  的下面了。不难想到 zindex 这个东西了。

wMntb7eF0Is6QAAAABJRU5ErkJggg==

r7jowAAAAASUVORK5CYII=

Debug 看一下 mask 的z-index 的值, 小于pop window的z-index 的值, 怪不得显示不出来。

自然有种想法是是否可以设置load mask 的zindex 的值呢? 的确 Ext.LoadMask 有 setZindex 这种方法。

但是 1. setZindex 的方法是private 的 2. z-index 是动态算出来了, 设置多少不好控制。

Ext js 提供了定制load Mask 的方法, 不妨给grid 添加一个自己的load mask,.

修改上面的pop_grid.html 页面如下:

Insert title here

Ext.onReady(function(){

var store = new Ext.data.JsonStore({

storeId: ‘simpsonsStore‘,

proxy: {

type: ‘ajax‘,

url: ‘grid-data.jsp‘,

reader: {

type: ‘json‘,

root: ‘users‘,

idProperty: ‘name‘

}

},

fields:[‘name‘, ‘email‘, ‘phone‘],

});

Ext.create(‘Ext.container.Container‘,{

height: 200,

width: 400,

renderTo: ‘grid-div‘,

items:[

Ext.create(‘Ext.grid.Panel‘, {

title: ‘Simpsons‘,

store: Ext.data.StoreManager.lookup(‘simpsonsStore‘),

columns: [

{ text: ‘Name‘, dataIndex: ‘name‘ },

{ text: ‘Email‘, dataIndex: ‘email‘, flex: 1 },

{ text: ‘Phone‘, dataIndex: ‘phone‘ }

],

height: 200,

width: 400,

listeners:{

afterRender:function(){

//Ext.getCmp("myGridMask").show();

}

}

})

,{

xtype: ‘loadmask‘,

id: ‘myGridMask‘,

indicator: true,

target: this,

autoShow:true

}

]

});

store.load(function(){

Ext.getCmp("myGridMask").hide();

});

});

解法思路就是: 提前建立一个loadMask , 在store load 完成后隐藏起来。

其他

1. Extjs 的 LoadMask 可以定制自己需要的load mask 样式

可以通过配置  cls,  maskCls 的 Class 来设置load 的文字以及图等样式。

var myMask = new Ext.LoadMask(myPanel, {msg:"Please wait..."});

myMask.show();

2. 在 Ext.ComponentLoader 这种组件中(比如tab 页中配置loader的方式), 可以通过配置loadMask 的配置来设置是否显示load mask 以及显示怎么样的loadMask(可以配置成boolean 型和Object 类型的值)

原文:http://blog.csdn.net/oscar999/article/details/27176791

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macOS下卸载文件系统_卸载移动硬盘_卸载U盘_推出移动硬盘_推出U盘

先使用命令 df -lh 在终端查看当前系统的所有挂载的文件系统&#xff08;系统硬盘、移动硬盘、U盘等&#xff09;&#xff0c;命令如下&#xff1a; liaowenxiongliaowenxiongdeMacBook-Air ~ % df -h Filesystem Size Used Avail Capacity iused ifree %iused …

python isalnum函数_Python 字符串 (isdigit, isalnum,isnumeric)转

Python isdigit() 方法检测字符串是否只由数字组成。 语法 isdigit()方法语法&#xff1a; str.isdigit() 参数 无。 返回值 如果字符串只包含数字则返回 True 否则返回 False。 Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。 注意:定…

zing jvm_Zing加快了JVM应用程序的预热

zing jvmJava虚拟机&#xff08;JVM&#xff09;提供了托管运行时环境&#xff0c;用于安全部署应用程序&#xff0c;其性能通常可以超过本机编译语言&#xff08;如C和C &#xff09;。 通过即时&#xff08;JIT&#xff09;编译进行垃圾回收和自适应编译的内存管理是两个最突…

黎明觉醒测试服服务器维护怎么办,黎明觉醒测试资格进不去怎么办

黎明觉醒测试资格进不去怎么办&#xff1f;黎明觉醒游戏在在9月16日迎来曙光测试&#xff0c;相信不少玩家都去玩了发现自己进不去游戏&#xff0c;这是怎么回事呢&#xff1f;和小编一起来看看吧。黎明觉醒测试资格进不去怎么办一、测试资格进不去获得测试资格的玩家官方已提前…

查看Linux命令_搜索Linux命令_查找Linux命令

站点1&#xff1a;https://tool.lu/command/ 站点2&#xff1a;https://www.linuxcool.com/

蜂鸣器音乐代码 天空之城_潮玩 | 艺术展览,乐队live现场,网红小黑泥,贩卖“美好”的市集……一场未来公共生活,天空之城和你一起探索!...

第一次打卡这样的新媒体艺术作品&#xff0c;不是画作&#xff0c;也不是艺术品陈列&#xff0c;而是一场看的见的引力交响曲~错落的磁场具象成看得见的流动痕迹&#xff0c;不动声响却震撼的感官体验。很容易让人沉浸其中&#xff0c;去捕捉流动的方向和瞬间。虽然UFO是没看到…

自动部署 管道 ci cd_自动化测试在CI CD管道中的作用

自动部署 管道 ci cd业界广泛采用的软件开发实践&#xff1a;持续集成和持续部署可确保良好地交付产品并经常交付。 常规代码提交需要常规/连续测试&#xff0c;而如果忽略它&#xff0c;则可能导致非弹性基础结构。 如何交付坚固的CI CD管道&#xff1f; 对于许多公司来说&…

Maven的maven-install-plugin插件详解

文章目录将下载到本地的jar文件安装到Maven本地仓库中将当前项目安装到Maven本地仓库中参考maven-install-plugin 插件的作用&#xff1a;1.可以将当前项目安装到 Maven 本地仓库&#xff0c;供本地其它 Maven 项目使用 执行 mvn install 命令将当前项目安装到 Maven 本地仓库…

python字典_Python 字典

1、什么是 dict(字典)上一章节&#xff0c;我们学习了列表(List) 和 元组(tuple) 来表示有序集合。而我们在讲列表(list)的时候&#xff0c;我们用了列表(list) 来存储用户的姓名。name [一点水, 两点水, 三点水, 四点水, 五点水]那么如果我们为了方便联系这些童鞋&#xff0c…

hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力

hazelcast如果要使用Hazelcast内存数据网格&#xff08;IMDG&#xff09;来加快数据库应用程序的速度&#xff0c;但是要处理数百个表怎么办&#xff1f; 手动编码所有Java POJO和序列化支持将需要数周的工作&#xff0c;完成后&#xff0c;手动维护该域模型将很快成为一场噩梦…

Maven的maven-help-plugin插件详解

执行下面的命令查看指定插件的详细信息&#xff1a; [~/Documents/IdeaProjects/demo02]$ mvn help:describe -Dpluginorg.apache.maven.plugins:maven-site-plugin:3.9.0 -Ddetail上述命令执行的是 maven-help-plugin 的 describe 目标&#xff0c;在参数 plugin 中输入需要描…

android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...

点击 机器学习算法与Python学习 &#xff0c;选择加星标精彩内容不迷路本文转自机器之心在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy&#xff0c;已经有了非常之系统的中文文档&#xff0c;回想起当初细啃 NumPy 之时&#xff0c;不少人不得不徘徊于各大搜索引擎及…

tls jdk_使用JDK 13查看TLS配置

tls jdkJDK 13 Early Access Build 16现在可用&#xff0c;它带来的有趣的功能之一是能够使keytool命令行工具显示当前系统的TLS配置信息 。 这比尝试在单独的文档中查找受支持的TLS信息并将该信息与自己的JDK供应商和版本进行匹配要容易得多。 要查看JDK 13 Early Access Bui…

执行Plugins下的install:install报错:The packaging for this project did not assign a file to the build artif

文章目录导致错误的原因分析解决方法直接执行生命周期的某个阶段命令阶段和插件目标一起执行参考导致错误的原因分析 在 IDEA 中使用 Plugins 下的 install:install &#xff08;或者在命令行下执行命令 mvn install:install&#xff09;&#xff0c;代表执行的是 install 插件…

javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...

javascript是按照语句出现的顺序执行的。js是一行一行执行的&#xff1a;let a 1;console.log(a);let b 2;console.log(b);然而实际上js是这样的&#xff1a;setTimeout(function(){ console.log(定时器开始啦)});new Promise(function(resolve){ console.log(马上执行for循环…

react回调_回调地狱和React模式

react回调我可以更好地了解a的用途的一种方式 基于React流的方法是它简化了无阻塞IO调用的方式。 这篇文章将快速讲解进行同步远程调用所涉及的那种代码&#xff0c;然后说明如何在非阻塞IO中分层&#xff0c;尽管在资源&#xff08;尤其是线程&#xff09;的使用方面非常高效…

Maven插件列表_Maven插件查询_Maven插件查看

Maven 官方插件列表&#xff1a;https://maven.apache.org/plugins/index.html。 Maven 官方插件下载地址&#xff1a;https://repo1.maven.org/maven2/org/apache/maven/plugins/

jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2

喜欢排队吧&#xff0c;它能保护你的时间和精力 - 排队纪律维护员Event LoopPromise和事件循环概览图请注意上面这张图&#xff0c;Promise和事件循环的那些事&#xff0c;将在这个图上缓缓展开。微任务和(宏)任务好了&#xff0c;(经过上一节对Promise的理解)现在我们对如何创…

azure api 管理_具有Azure功能的无服务器API

azure api 管理在这篇文章中&#xff0c;我将研究一个非常简单的用例。 在执行部署管道时&#xff0c; FlexDeploy可能会产生一些应被批准或拒绝的人工任务。 例如&#xff0c;某人必须批准对生产环境的部署。 可以在FlexDeploy UI中或通过某些外部通信渠道来完成。 今天&#…

Maven插件目标

插件就是打成 jar 包的 Java 类&#xff0c;目标其实就是指方法&#xff0c;代表一种功能&#xff0c;也就是代表执行一种任务&#xff0c;你可以指定具体的任务&#xff0c;不过目标也有自己默认的任务。