`
happycute
  • 浏览: 4372 次
  • 性别: Icon_minigender_2
  • 来自: 宁波
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

了解YUI【三】(转)

    博客分类:
  • YUI
阅读更多

1. 要使用Event,首先要引入YUI3的种子文件:

<script src="http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js"></script>  

 然后加载相应模块:

YUI().use('event', function(Y) {   

});  


2. 设置事件响应函数:on()

有两个on方法,一个是YUI的,一个是Node的

Y.on("click", handleClick, "#foo p") 设置元素"#foo p"的click事件处理函数为handleClick。

foo.on("click", handleClick) 的作用与上面的一样


对于YUI的on方法,参数如下:

1) 事件名。

2) 事件处理句柄

3) 元素,可以是多个,多个的写法是这样:["#foo p", "#bar"]

4) 上下文对象,即事件处理函数中的this,如果忽略,就是target元素的Node

5) 参数,可以有多个,按顺序为事件处理函数中event之后的参数


3. 移除事件响应函数

有三种方式:

1) 在事件名前加前缀,然后用YUI的detach移除

2) 保存事件句柄,然后通过该句柄移除

3) 用YUI的detach,指定事件名、处理函数和元素

YUI().use('node-base', function(Y) {   

//an event handler:   

 function handleClick(e) {   

     Y.log(e);   

    }   

 var fooHandle = Y.on("eventcatgory|click", handleClick, "#foo");      

  //第一种   

  Y.detach('eventcategory|click');   

  Y.detach('eventcategory|*');   

  //第二种   

  fooHandle.detach();   

  Y.detach(fooHandle);   

   //第三种   

  Y.detach("click", handleClick, "#foo");   

});  

另外,Event.purgeElement可以清理所有通过on添加的事件处理函数,而且可以设定是否对子元素递归清理。


4.模拟鼠标事件

可以通过Node.simulate()模拟鼠标事件,可以模拟7种鼠标事件:

    * click

    * dblclick

    * mousedown

    * mouseup

    * mouseover

    * mouseout

    * mousemove

同时可以指定一些附加信息,例如:

YUI().use('node-event-simulate', function(Y) {   

   Y.one("body").simulate("click", { shiftKey: true });   

});  


模拟按下Shift键的click事件,这些附加信息包括:

    * detail - click的次数.

    * screenX/screenY

    * clientX/clientY

    * ctrlKey/altKey/shiftKey/metaKey

    * button - 0:左,1:右, 2:中

    * relatedTarget


5. 模拟键盘事件

  可以模拟以下事件:

    * keyup

    * keydown

    * keypress

keyup和keydown必须指定keyCode,keypress必须指定charCode,另外还可以指定ctrlKey, altKey, shiftKey和metaKey,以下是几个例子:

YUI().use('node-event-simulate', function(Y) {   

var node = Y.one("#myDiv");   

node.simulate("keydown", { keyCode: 97 });   

//simulate typing "a"   

 node.simulate("keypress", { charCode: 97, altKey: true });       

});  

 

6. available(onAvailable)和contentready(onContentReady)事件

  available事件在一个元素刚刚出现在DOM树中时触发。

  contentready事件在一个元素和它的下一个元素都可以用getElementById获得

时触发,以保证该元素已加载完毕(除了动态加载的内容以外)


7. domready(onDOMReady)事件

  domready事件在DOM树构建完成时触发,有可能是在图像加载完毕以前。


8. delegate方法

  事件代理(Event delegate)机制可以在父元素处唯一绑定一个listener监听该

父元素的多个子元素处发生的事件,以如下的html为例:

<div id="container">  

<ul>  

 <li id="item-1"><em>Item Type One</em></li>  

 <li id="item-2"><em>Item Type Two</em></li>  

 <li id="item-3"><em>Item Type Three</em></li>  

</ul>  

</div>  


以下这段代码将一listener绑定到"container",却监听着其3个子元素(<li>)处的

click事件:

YUI().use("event-delegate", function(Y) {      

Y.delegate("click", function(e) {   

 Y.log("Default scope: " + this.get("id"));   

 Y.log("Clicked list item: " + e.currentTarget.get("id"));   

 Y.log("Event target: " + e.target);    

 Y.log("Delegation container: " + e.container.get("id"));       

 }, "#container", "li");   

});  


9. focus和blur事件

DOM的focus和blur事件是不做冒泡传递的,但YUI的Event utility的focus和blur事件

却可以,因此可以实现集中的事件处理。

以下是一段示例代码:

YUI().use("event-focus", function(Y) {   

var handle = Y.on("focus", function(e, arg1, arg2, etc) {   

Y.log("target: " + e.target + ", arguments: " + arg1 + ", " + arg2 + ", " + etc);   

 }, "#toolbar", Y, "arg1", "arg2", "etc");   

});  


其中"#toolbar"是一个包含3个按钮的<div>,如下:

<div id="toolbar">  

 <input type="button" id="button-cut" name="button-cut" value="Cut">  

 <input type="button" id="button-copy" name="button-copy" value="Copy">  

 <input type="button" id="button-paste" name="button-paste" value="Paste">  

</div>  

 

10. mouseenter和mouseleave事件

YUI也提供mouseenter和mouseleave事件,代码如下所示:

YUI().use("event-mouseenter", function(Y) {   

  Y.on("mouseenter", function (e) {   

  Y.log("Mouse entered: " + this.get("id"));   

 }, "#container");   

 Y.on("mouseleave", function (e) {   

 Y.log("Mouse left: " + this.get("id"));   

 }, "#container");   

});  


11. 自定义事件

可以使用on实现简单的自定义事件。注册listener是这样的:

Y.on('customapp:started', function(arg1, arg2, arg3) {   

Y.log('Custom App Started, now I can do a a few things);   

});  


激发这个事件是这样的:

YUI().use('event-custom', function(Y) {   

Y.fire('customapp:started', 1, 2, 3);   

});  


另外可以用augment将一对象提升为Event target,用publish定义一个Event,注册listener

还是用on,激发事件还是用fire,下面是示例代码:

YUI().use('event-custom', function(Y) {   

  function Publisher() {   

   this.publish("publisher:testEvent", {});   

  }   

  Y.augment(Publisher, Y.EventTarget, null, null, 'test');       

  publisher = new Publisher();   

  publisher.on("publisher:testEvent", function(e){   

      alert(e);   

   });        

  publisher.fire("publisher:testEvent", 'test arg1');   

});  

 

其中publish只有当需要覆盖默认配置时才需要。

 

转自:http://blog.sina.com.cn/s/blog_632d19d50100rzuq.html

分享到:
评论

相关推荐

    rgb彩色空间到yui彩色空间转换系统

    RGB(Red, Green, Blue)是一种加性色彩模型,它基于三种原色——红、绿、蓝,通过不同比例的混合来创建各种颜色。在计算机图形和显示器中,RGB是最常见的颜色表示方法,因为它们直接对应于显示器的像素颜色。 相反...

    yuicompressor-2.4.8.jar

    对于Idea用户,可以通过安装第三方插件实现yuicompressor的集成,这样在编译项目时,可以直接对JavaScript和CSS文件进行自动压缩,简化了工作流程,提高了开发效率。 在Idea中配置yuicompressor,通常需要以下步骤...

    JSprojManagement:JavaScript 项目管理(例如 gulp、bower、yui、node、npm 等)

    同时,Node.js的包管理系统**npm**(Node Package Manager)是目前最大的开源库生态系统,提供了丰富的第三方模块,帮助开发者快速构建和管理项目依赖。 接下来是**gulp**,它是基于Node.js的自动化任务运行器。...

    参考简历模板三.doc

    - **项目描述**:系统分为权限系统、考勤填写及考勤统计三个部分,实现了员工权限自由分配、考勤记录填写及统计等功能。 综上所述,Tom具备广泛的IT技能和实践经验,特别是在Java开发、Web应用开发、数据库管理和...

    symfony cookbook 2.4

    在深入了解本书的具体内容之前,我们首先需要了解该书的基本许可协议。根据描述,该书遵循的是“署名-相同方式共享 3.0 未本地化”(Attribution-ShareAlike 3.0 Unported)许可证。这意味着您可以自由地分享(复制...

    jquery 技巧总结

    这导致了一系列JavaScript框架的诞生,其中包括Prototype、YUI、jQuery、MooTools、Bindows以及国内的JSVM框架等。这些框架不仅提升了前端开发的效率,还改善了用户体验。 **jQuery**作为一款杰出的JavaScript库,...

    java实现播放各种视频

    在Java编程环境中,实现播放各种视频是一项挑战...为了充分利用这些资源,你需要阅读和理解代码,了解其工作原理,并根据自己的项目需求进行适当的调整。同时,注意处理错误和异常,确保在不同环境下的兼容性和稳定性。

    Computer Science E-75

    UI Library (YUI)**:提供了YUI Reset CSS和YUI Fonts CSS来帮助开发者解决跨浏览器兼容性问题。 通过以上内容可以看出,“Computer Science E-75”课程覆盖了构建动态网站所需的各种关键技术和实践知识,旨在培养...

    PyPI 官网下载 | score.webassets-0.3.6.tar.gz

    PyPI(Python Package Index)是Python世界中的核心组成部分,它是Python软件包的仓库,提供了丰富的第三方模块和库,让开发者能够方便地下载、安装和分享自己的代码。在PyPI官网上,你可以找到各种各样的Python库,...

    高性能web开发(2)

    为了理解为什么减少HTTP请求数能够提升Web性能,首先我们需要了解HTTP请求的基本构成。以下是一个典型的HTTP请求头示例: ``` Host: www.google.com.hk User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-...

    JavaScript基于对象去除数组重复项的方法

    1. **数组转对象**:将数组转换为JavaScript对象,数组的每个元素作为对象的键,值可以随意设置,通常设置为`true`表示该键存在。这样做的目的是利用对象的键唯一性,将重复的元素映射为同一个键。 ```javascript ...

    轻音少女文件夹图标下载

    由于没有提供具体的文件名,我们可以推测这个压缩包内可能包含了一系列的图标文件,例如"light_music_icon_1.ico"、"yui_folder_icon.png"等,每一份都代表了动画中的不同元素。 关于使用这些图标,用户需要了解...

    JAVA上百实例源码以及开源项目源代码

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

Global site tag (gtag.js) - Google Analytics