- 浏览: 688378 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/effects/
难度:低
版本:1.7
在这个教程中,我们将了解一些dojo所提供了一点动态的效果,让我们的页面能更生动活泼。
开始
到目前为止,我们已经学会了如何管理和操作DOM节点,但做这些操作时,页面的表现会很生硬。如你删除一个节点,这个节点就实然的不见了,这可能会让用户疑惑。使用dojo提供的动态效果后会使一些操作的效果很平滑,能非常好的提高用户的交互性。
dojo有两个模块dojo/_base/fx和dojo/fx
- dojo/_base/fx提供了一些基础的效果,如animateProperty,anim,fadeIn,fadeOut
- dojo/fx提供了更多更高级的效果,包括chain,combine,wipeIn,wipeOut和slideTo
渐变
有一个效果我们以前已经用过了,那就是带有渐变效果的显示和消失,这个效果很常用,所有这个效果被放置于dojo的基础模块中。下面是示例
<button id="fadeOutButton">Fade block out</button> <button id="fadeInButton">Fade block in</button> <div id="fadeTarget" class="red-block"> A red block </div> <script> require(["dojo/_base/fx", "dojo/on", "dojo/dom", "dojo/domReady!"], function(fx, on, dom) { var fadeOutButton = dom.byId("fadeOutButton"), fadeInButton = dom.byId("fadeInButton"), fadeTarget = dom.byId("fadeTarget"); on(fadeOutButton, "click", function(evt){ fx.fadeOut({ node: fadeTarget }).play(); }); on(fadeInButton, "click", function(evt){ fx.fadeIn({ node: fadeTarget }).play(); }); }); </script>
方法有一个对象参数。最重要的属性是node,这可以是DOM节点或ID值,别一个属性是duration,这决定了动画执行的时间,以毫秒记。默认值为350,还有另几个属性,但不是必须的。
动画方法返回的是一个dojo.Animation对象,这个对象有play,pause,stop,status,gotoPercent的这些方法。动画被创建了并不是马上就执行,它要你显示的使用play方法来执行。
擦除效果
另一个常见的效果就是擦除效果了。这种效果有点像车窗上的擦除效果,通常,这种效果表现出下拉,收起的动画。
<button id="wipeOutButton">Wipe block out</button> <button id="wipeInButton">Wipe block in</button> <div id="wipeTarget" class="red-block wipe"> A red block </div> <script> require(["dojo/fx", "dojo/on", "dojo/dom", "dojo/domReady!"], function(fx, on, dom) { var wipeOutButton = dom.byId("wipeOutButton"), wipeInButton = dom.byId("wipeInButton"), wipeTarget = dom.byId("wipeTarget"); on(wipeOutButton, "click", function(evt){ fx.wipeOut({ node: wipeTarget }).play(); }); on(wipeInButton, "click", function(evt){ fx.wipeIn({ node: wipeTarget }).play(); }); }); </script>
擦除动画方法被放置于 dojo/fx 模块中,在这个示例中,我们加入了一个wipe的class样式,因为,这种效果是通过操作元素的高度来实现的,加入了wipe是为了把元素的高度定义为自动
滑动
现在我们来实现滑动的效果。使用 fx.slideTo 来实现,直接看示例
<button id="slideAwayButton">Slide block away</button> <button id="slideBackButton">Slide block back</button> <div id="slideTarget" class="red-block slide"> A red block </div> <script> require(["dojo/fx", "dojo/on", "dojo/dom", "dojo/domReady!"], function(fx, on, dom) { var slideAwayButton = dom.byId("slideAwayButton"), slideBackButton = dom.byId("slideBackButton"), slideTarget = dom.byId("slideTarget"); on(slideAwayButton, "click", function(evt){ fx.slideTo({ node: slideTarget, left: "200", top: "200" }).play(); }); on(slideBackButton, "click", function(evt){ fx.slideTo({ node: slideTarget, left: "0", top: "100" }).play(); }); }); </script>
动画效果
通过上面的介绍你已经知道,动画方法将返回的是dojo.Animation对象,这个对象不仅仅提供开始,暂停的一些功能,也提供了如监听事件等功能。两个比较重要的事件是beforeBegin和onEnd
<button id="slideAwayButton">Slide block away</button> <button id="slideBackButton">Slide block back</button> <div id="slideTarget" class="red-block slide"> A red block </div> <script> require(["dojo/fx", "dojo/on", "dojo/dom-style", "dojo/dom", "dojo/domReady!"], function(fx, on, style, dom) { var slideAwayButton = dom.byId("slideAwayButton"), slideBackButton = dom.byId("slideBackButton"), slideTarget = dom.byId("slideTarget"); on(slideAwayButton, "click", function(evt){ // Note that we're specifying the beforeBegin as a property of the animation // rather than using connect. This ensures that our beforeBegin handler // executes before any others. var anim = fx.slideTo({ node: slideTarget, left: "200", top: "200", beforeBegin: function(){ console.warn("slide target is: ", slideTarget); style.set(slideTarget, { left: "0px", top: "100px" }); } }); // We could have also specified onEnd above alongside beforeBegin, // but it's just as easy to connect like so on(anim, "End", function(){ style.set(slideTarget, { backgroundColor: "blue" }); }, true); // Don't forget to actually start the animation! anim.play(); }); on(slideBackButton, "click", function(evt){ var anim = fx.slideTo({ node: slideTarget, left: "0", top: "100", beforeBegin: function(){ style.set(slideTarget, { left: "200px", top: "200px" }); } }); on(anim, "End", function(){ style.set(slideTarget, { backgroundColor: "red" }); }, true); anim.play(); }); }); </script>
你可能已经注意到了 beforeBegin 是以属性的方式配置的,原因是,你可以直接把事件写到动画的创建中,如果你在动画创建后再加入 beforeBegin 那就没有意义了。
链表传递
如果我有好几个动画要连续的一个个执行,那要怎么操作?你可以使用上面的 End 监听事件,当一个动画执行完成了再调用另一个动画。这当然可以,但这不是很方便。我们可以使用 dojo/fx 提供的链表传递来解决这个问题。直接看示例
<button id="slideAwayButton">Slide block away</button> <button id="slideBackButton">Slide block back</button> <div id="slideTarget" class="red-block slide chain"> A red block </div> <script> require(["dojo/_base/fx", "dojo/fx", "dojo/on", "dojo/dom", "dojo/domReady!"], function(baseFx, fx, on, dom) { var slideAwayButton = dom.byId("slideAwayButton"), slideBackButton = dom.byId("slideBackButton"), slideTarget = dom.byId("slideTarget"); // Set up a couple of click handlers to run our chained animations on(slideAwayButton, "click", function(evt){ fx.chain([ baseFx.fadeIn({ node: slideTarget }), fx.slideTo({ node: slideTarget, left: "200", top: "200" }), baseFx.fadeOut({ node: slideTarget }) ]).play(); }); on(slideBackButton, "click", function(evt){ fx.chain([ baseFx.fadeIn({ node: slideTarget }), fx.slideTo({ node: slideTarget, left: "0", top: "100" }), baseFx.fadeOut({ node: slideTarget }) ]).play(); }); }); </script>
就如你所看到的,你在 fx.chain 中创建了多个动画,这些个动画将在chain的play触发时会被一个一个的执行
混合动画
还有一种 dojo/fx 提供的一种方法,是 combine 方法。这个方法将会在同一时间同时执行多个动画。在执行时间最长的那个动画完成后将会触发 onEnd 事件,直接看示例
<button id="slideAwayButton">Slide block away</button> <button id="slideBackButton">Slide block back</button> <div id="slideTarget" class="red-block slide chain"> A red block </div> <script> require(["dojo/_base/fx", "dojo/fx", "dojo/on", "dojo/dom", "dojo/domReady!"], function(baseFx, fx, on, dom) { var slideAwayButton = dom.byId("slideAwayButton"), slideBackButton = dom.byId("slideBackButton"), slideTarget = dom.byId("slideTarget"); // Set up a couple of click handlers to run our combined animations on(slideAwayButton, "click", function(evt){ fx.combine([ baseFx.fadeIn({ node: slideTarget }), fx.slideTo({ node: slideTarget, left: "200", top: "200" }) ]).play(); }); on(slideBackButton, "click", function(evt){ fx.combine([ fx.slideTo({ node: slideTarget, left: "0", top: "100" }), baseFx.fadeOut({ node: slideTarget }) ]).play(); }); }); </script>
在这个示例里,几个动画是同时执行的,是同时渐变和移动,不是先再渐变移动。通过混合动画你可以做出非常复杂和完成的效果。
结论
使用dojo的dojo/_base/fx和dojo/fx动画效果可以使你的页面非常的绚,你可以很轻松的创建一些简单的动画,也可以使用多种动画结合做出非常复杂的动画效果。
但是如果你想要做很精细和复杂的效果,你还要去了解dojo.animateProperty
发表评论
-
dojo封装dialog提示框
2012-06-20 10:20 5658/** * 显示dojo的弹出框.前提是已经引用了相 ... -
dojo封装表单ajax提交
2012-06-20 10:16 1715/** * dojo的ajax提交form(post ... -
封装创建dojo的dialog
2012-06-18 13:55 0/** * 显示dojo的弹出框.前提是已经引用了相 ... -
自定义封装dojo通用ajax提交表单
2012-06-18 13:52 2654/** * dojo的ajax提交form(post ... -
使用dojo的dialog自定义confirm效果
2012-06-18 13:43 5125/** * 使用dojo dialog模拟confi ... -
dojo 制做非模态窗口dialog
2012-06-16 13:27 4330dojo的dialog效果基本上都是模态的,也就是说,在弹出窗 ... -
dojo1.7的加载方法
2012-06-01 17:16 4266对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。 ... -
不翻译DOJO了
2012-05-16 17:57 1104翻译DOJO的时间并不长。总是感觉把老外的话翻译过来很是生硬, ... -
dojo1.7翻译 数组工具(Arrays Made Easy)
2012-05-14 10:55 1973英文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 Dijit的主题,按钮和文本框(Dijit Themes, Buttons, and Textboxes)
2012-05-03 15:52 2215原文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 动画效果(Animations)
2012-05-02 12:08 2782原文地址:http://dojotoolk ... -
dojo1.7翻译 处理DOM(Dojo DOM Functions)
2012-04-26 15:51 2538原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 ajax跨域请求(Getting Jiggy with JSONP)
2012-04-25 12:02 3163原文地址:http://dojotoolk ... -
dojo1.7翻译 ajax功能(Ajax with Dojo)
2012-04-24 15:04 1567原文地址:http://dojotoolk ... -
dojo1.7翻译 搜索节点功能(Using dojo/query)
2012-04-23 15:32 1912原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 hello,dojo
2012-04-22 15:21 2165原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义类(Classy JavaScript with dojo/_base/declare)
2012-04-20 15:34 2563原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义模块(Defining Modules)
2012-04-18 17:21 6859原文地址:http://dojotoolkit ... -
dojo1.7翻译 通过dojoConfig来配置dojo
2012-04-18 09:20 5232原文地址:http://dojotoolk ... -
dojo1.7翻译 Hello,World
2012-04-17 10:17 1604原文地址:http://dojotoolkit.org/ref ...
相关推荐
【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...
《Dojo 1.7 API CHM:深入理解与应用》 Dojo 是一个功能强大的JavaScript工具库,尤其在Web开发领域,它提供了一系列高级功能,包括模块化、数据管理、用户界面构建以及Ajax交互等。Dojo 1.7 API CHM文件是针对这个...
2. **dojo/_base**: 这是Dojo的基础模块,包含了Dojo的核心功能,如事件处理、DOM操作、动画效果等。在1.7版本中,这些基础功能被设计得更加高效和易用。 3. **dojo/store**: Dojo 1.7 提供了数据存储抽象层,称为`...
【Dojo 1.7 中文版本注释功能说明】 Dojo 1.7 是一个重大的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的核心亮点是实现了Asynchronous Module Definition (AMD)机制,这是一项...
Dojo 框架的核心提供了诸如DOM操作、事件处理、AJAX请求、动画效果等功能。在Dojo 1.7 中,这些功能被重新组织并模块化,使得开发者可以根据需要按需加载,显著提高了页面加载速度。AMD模块化系统的引入是这一版本的...
dojo.date帮助解析和操作日期,dojo.event处理事件驱动和AOP开发,dojo.back管理撤销操作的栈,dojo.rpc用于与后端服务通信,dojo.data是统一的数据访问接口,dojo.fx实现了基本的动画效果,等等。 此外,Dojo还...
同时,`dojo/has`特性可以根据浏览器的特性动态加载代码,进一步优化了性能。 3. **Dojo UI组件** Dojo提供了丰富的UI组件,如`dijit`和`dojox`,覆盖了按钮、表单、布局、图表等多种元素。例如,`dijit/form`...
"dojo-release-1.7.3"包含了基础模块`dojo/_base`,其中封装了许多核心功能,如事件处理、DOM操作、动画效果等。这些基本功能是Dojo框架的核心部分,为其他高级模块提供支持。 3. **dijit** 和 **dojox** 模块 - ...
Dojo 1.7 引入了AMD,这是一种异步模块定义的加载机制,允许开发者按需加载模块,提高了页面性能。通过`require()`函数,我们可以方便地引入和依赖其他模块。 2. **Dijit UI 库:** Dijit是Dojo的UI组件库,包含...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信等多个方面。Dojo的核心在于它的模块化系统,这使得开发者可以按需加载代码,提高应用的性能和可维护...
Dojo 动态Tree是基于Dojo Toolkit的一个组件,它用于在Web应用中展示层级结构的数据,例如组织架构、文件目录或任何具有层次关系的信息。Dojo Toolkit是一个强大的JavaScript库,提供了丰富的UI组件和功能,使得开发...
7. **动画效果**:dojo的`dojo.fx`模块提供了创建复杂动画的能力,包括淡入淡出、滑动、缩放等效果。同时,`dojox.fx`提供了更多的特效和动画组合。 8. **主题和样式**:dojo支持多主题,如 claro、tundra、soria ...
Dojo是一个开源的JavaScript框架,旨在提供一站式的解决方案,包括UI组件、数据管理、动画效果、Ajax交互等功能。它使得Web开发更加高效,代码更加模块化。 在学习Dojo时,首先要理解其核心概念,如dojo.js主文件,...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、事件处理、动画效果、模块化编程等。这个"dojo 官方教程 中文翻译"是针对Dojo框架的全面指南,帮助中文用户更好地理解...
10. **dojo.on**: Dojo 1.7引入了`dojo/on`模块,它提供了更现代、更符合DOM Level 2事件接口的事件处理方式,同时兼容老版本的`dojo.connect`。 以上所述是Dojo 1.6在DOM操作方面的核心功能。通过这些API,开发者...
2. **dojo/_base**:这是Dojo的基础模块,包含了核心功能,如事件处理、DOM操作、动画效果等。学习这个模块能帮助理解Dojo的基本用法。 3. **dojo/_base/xhr**:Dojo提供了强大的异步数据请求功能,`xhr`模块是实现...
【基于Dojo的动态树】是一种使用JavaScript库Dojo Toolkit创建的交互式树形结构,常用于展现层次化的数据或导航菜单。Dojo Toolkit是一个功能强大的JavaScript库,它提供了多种UI组件,包括Tree组件,可以方便地在...
Dojo是一个强大的JavaScript工具包,它提供了丰富的功能,包括DOM操作、AJAX交互、动画效果、事件处理以及模块化开发等,帮助开发者构建高性能、可维护的Web应用。 Dojo的核心概念之一是模块系统(dojo/_base)。这...
dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、动画效果、国际化、模块化等。这个“dojo 离线API”是官方文档的英文原版,旨在帮助开发者在没有网络连接的情况下也能...