extjs 学习笔记(二) Ext.Element类


Posted in Javascript onOctober 13, 2009

区别在于fly返回的是Element轻量级的,占用较少的内存,但是不保存对象的引用,每次使用都会改变先前的对象,而get则会缓存每次返回的Element对象,但是占用较多的内存。我们通过一个例子来说明二者的区别,同时看看Element给我们提供的强大功能。在我们项目中添加一个html页面,内容如下:

<!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> 
<title>Element Demo</title> 
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" /> 
<script type="text/javascript" src="extjs/ext-base-debug.js"></script> 
<script type="text/javascript" src="extjs/ext-all-debug.js"></script> 
<script type="text/javascript" src="extjs/ext-lang-zh_CN.js"></script> 
<script type="text/javascript" src="js/element.js"></script> 
</head> 
<body> 
<input type="button" value="请点击我" id="btn" /> 
<div id="div1"></div> 
<div id="div2"></div> 
</body> 
</html>

当然还要添加element.js文件,我们先用Ext.get方法来获取element对象并进行一些操作,代码如下:
///<reference path="vswd-ext_2.0.2.js" /> 
/**//* 
*作者:大笨 
*日期:2009-10-12 
*版本:1.0 
*/ Ext.onReady(function() { 
Ext.get("btn").on("click", function() { 
var el1 = Ext.get("div1"); 
var el2 = Ext.get("div2"); 
el1.addClass("red"); //增加CSS类 
el2.addClass("green"); 
el1.setWidth(); //设置宽度 
el1.highlight(); //高亮显示 
el1.center(); //居中 
el1.setOpacity(0.5); //设置透明度 
el2.fadeIn({ endOpacity: 1, //可以是0和1之间的任意值 
easing: 'easeOut', 
duration: 1 
}); 
//el1.addClass("red").setWidth(100).setOpacity(0.5).center(); 
}); 
});

运行之后我们点击button按钮可以看到效果。代码都很直观,不需要过多的解释。现在我们把Element的get方法换成fly,运行之后我们会发现,所有的操作都在div2上进行,因为div1的Element引用并未被保存下来,第二次使用fly方法的时候改写了第一次获得的Element对象,所以我们看到操作都在div2上进行了。很多用过jquery的人喜欢用方法链(method chain)的方式写代码,由于Element对象的大多数方法返回的还是Element对象,所以这里也可以采用方法链,就像 我在23行中写的那样。但是要注意highlight,fadeIn,fadeOut这些方法事实上并不是Element对象的方法,它们其实是 Ext.Fx类中的方法,只是用了js的apply方法给加到Element对象上去了(apply方法的使用可以参考这里),Fx 泪中的方法使用了内部的效果队列,效果是按照特定的顺序的,而Element对象的方法则是立即执行的。所以在方法链中同时使用Element和Fx的方 法时需要注意,有可能会产生不希望看的结果。
我们的代码中用到了setWith方法,在Element类还有一些以set开头的方法,用来进行一些设置,这些方大多 数有一个可选的参数用来呈现动画的效果,这个参数可以是布尔值,可以用来开启默认的设置,也可以是一个json对象,用来对动画进行详细的定制,我们把上 边的代码改一下,来看看带动画的效果:
///<reference path="vswd-ext_2.0.2.js" /> 
/**//* 
*作者:大笨 
*日期:2009-10-12 
*版本:1.0 
*/ 
Ext.onReady(function() { 
Ext.get("btn").on("click", function() { 
Ext.fly("div1").addClass("red").setWidth(100, { 
duration: 3, 
easing: 'elasticIn', 
callback: function() {Ext.Msg.alert("信息","div1的宽度被设置为100") }, 
scope: this 
}); 
}); 
});

简单解释下上边的代码:duration指明动画的时间,这里是3秒;easing用来设定动画的方式,必须是有效的 Ext.lib.Easing的值,可以从帮助文档中获得全部的有效值;callback,当动画执行完毕的时候调用的函数,scope指明callback函数的作用域。
除了使用get和fly方法,Element还有一个select方法,这可是一个很强大的方法,可以根据选择器来获取一个Element的数组(其实返回的是一个CompositeElementLite或者CompositeElement对象,这两个类是js中的继承关系,在内部维护了一个Element对象的数组。当我们在返回的对象上使用Element的方法,实际上是对数组中的每一个Element对象调用方法)。这个方法可以简写为Ext.select,有一个选择器作为参数,使用方法和jquery类似,比如说Ext.select("p")会选择所有的p标签,Ext.select(".red")会选择css类为red的所有标签,选择器可以组合来使用,比如"div.foo:nth-child(odd)[@foo=bar].bar:first"。善于使用选择器可以给我们控制元素带来非常大的方便,可以参阅Ext.DomQuery类的文档来获得更多选择器的相关知识。
Element的query方法使用和select相似的方法来返回Dom节点的集合,不过需要注意的是Ext.query并不是Ext.Element.query的简写,而是Ext.DomQuery.select方法的简写。Dom接点可以通过get方法获得Element对象,而Element对象可以通过dom属性来获得Dom节点,根据不同的需要,我们可以很方便的进行转换。
最后说一下Element的addListener方法,该方法可以简写为on,用来给Element对象注册事件,我们已经看到过on("click",function(){})这样的用法了。通过这个方法还可以一次注册多个事件,例如:
el.on({ 
'click' : { 
fn: this.onClick, 
scope: this, 
delay: 100 
}, 
'mouseover' : { 
fn: this.onMouseOver, 
scope: this 
}, 
'mouseout' : { 
fn: this.onMouseOut, 
scope: this 
} 
});

delay指出在事件触发多长时间以后执行事件处理函数,单位是毫秒。还有一种简洁的写法:
el.on({ 
'click' : this.onClick, 
'mouseover' : this.onMouseOver, 
'mouseout' : this.onMouseOut, 
scope: this 
});
Javascript 相关文章推荐
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
javascript原生ajax写法分享
Apr 10 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
js制作简单的音乐播放器的示例代码
Aug 28 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
layui使用数据表格实现购物车功能
Jul 26 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
Sep 04 Javascript
vue配置nprogress实现页面顶部进度条
Sep 21 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 Javascript
extjs 学习笔记(一) 一些基础知识
Oct 13 #Javascript
JQuery 绑定事件时传递参数的实现方法
Oct 13 #Javascript
通用javascript脚本函数库 方便开发
Oct 13 #Javascript
jquery pagination插件实现无刷新分页代码
Oct 13 #Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
Oct 13 #Javascript
百度留言本js 大家可以参考下
Oct 13 #Javascript
javascript hashtable实现代码
Oct 13 #Javascript
You might like
PHP Token(令牌)设计
2008/03/15 PHP
可以在线执行PHP代码包装修正版
2008/03/15 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
Python实现Linux中的du命令
2017/06/12 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
钳工实习自我鉴定
2013/09/19 职场文书
临床医师个人自我评价
2014/04/06 职场文书
法制演讲稿
2014/09/10 职场文书
2014年技术员工作总结
2014/11/18 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫