- 浏览: 688235 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/animation/
难度:初级
版本:1.7
开始
像所有的图形用户界面一样,Web用户界面,也是利用像素来描绘真实世界的影像,我们可以操纵像素让其快速变化而让人认为其正在运动中。通过变化的时间控制,可以使动画显示的更直观的,运动表现的更平滑。
在本教程中,我们将学习Dojo提供的动画工具,允许你调整和建立自定义动画,以满足您的特定的用户界面要求
回顾效果功能
在以前的教程中,我们已经讨论过一些常用的内置效果功能。 我们可以使用的方法有dojo/_base/fx模块中的baseFx.fadeIn和baseFx.fadeOut方法,dojo/fx模块中的fx.slideTo和fx.wipeIn方法。我们已经了解了如何可以传递一个参数对象来控制我们想要的动画:
require(["dojo/fx", "dojo/dom", "domReady!"], function(fx, dom) { fx.wipeIn({ node: dom.byId("wipeTarget") }).play(); });
但这些元素只有部分的参数可以设置。我们可能会想要更多更复杂的动画,假设我们想要闪烁的背景,或在屏幕上移动节点。为此,我们需要Dojo的通用的动画工具, baseFx.animateProperty
动画属性
如果你看了fx.wipeIn的源代码,你会发现节点style.height的属性被改为从0到其自动或自然高度。同理,看看我们如何创建任意属性的动画,我们将创建一个边界变化的动画。我们开始:
<button id="startButton">Grow Borders</button> <button id="reverseButton">Shrink Borders</button> <div id="anim8target" class="box" style="border-style:outset"> <div class="innerBox">A box</div> </div>
animateProperty方法遵循我们已经使用过的相同的模式。它有着我们想要的动画的border-width属性,所以我们到的animateProperty调用看起来像这样
require(["dojo/_base/fx", "dojo/dom", "domReady!"], function(baseFx, dom) { baseFx.animateProperty({ node: dom.byId("anim8target"), properties: { borderWidth: 100 } }).play(); });
请注意,我们使用的JavaScript低驼峰属性名borderWidth ,而不是CSS的border-width属性的名称。 我们是通过一个节点的属性,使用一个新的' properties '键来指定我们要进行动画。
同样的,还有很多可以设置的属性,我们可以指定任何我们喜欢的属性。在这个例子中,我们再加上一些效果。将在同一时间运动到顶部,到左侧并且改变透明度,还有消失的效果。通过提供具体的start和end 属性,我们可以做出非常具体的,可重复的动画。
baseFx.animateProperty({ node: anim8target, properties: { top: : { start: 25, end: 150 }, left: 0, opacity: { start: 1, end: 0 } }, duration: 800 }).play();
请注意,我们还提供了一个duration属性。这是整个动画所花费的毫秒数。
灵活地移动
如果使用自动生成的动画,我们将看到一个从一开始就随着时间的固定变画的运动。 这条曲线的形状被称为“宽松”。最简单的“曲线”,是一条直线,例如,从X移动,匀速运动。但如果让动作看起来更自然的话,应该是让当他们开始慢,然后加速,然后再次放慢。 有多种方法来实现这一效果,但Dojo提供了广泛的灵活的移动功能,以得到正确的效果和感觉。dojo/fx/easing模块有几个方法:
require(["dojo/_base/fx", "dojo/dom", "dojo/fx/easing", "dojo/window", "dojo/on", "dojo/domReady!"], function(baseFx, dom, easing, win, on) { var dropButton = dom.byId("dropButton"), ariseSirButton = dom.byId("ariseSirButton"), anim8target = dom.byId("anim8target"); // Set up a couple of click handlers to run our animations on(dropButton, "click", function(evt){ // get the dimensions of our viewport var viewport = win.getBox(win.doc); baseFx.animateProperty({ // use the bounceOut easing routine to have the box accelerate // and then bounce back a little before stopping easing: easing.bounceOut, duration: 500, node: anim8target, properties: { // calculate the 'floor' // and subtract the height of the node to get the distance from top we need top: { start: 0, end:viewport.h - anim8target.offsetHeight } } }).play(); }); on(ariseSirButton, "click", function(evt){ baseFx.animateProperty({ node: anim8target, properties: { top: 0 } }).play(); }); });
在这个例子中,我们计算视窗的高度,这样我们就可以定位框底部出现坐标。使用的bounceOut缓和方法,先快后慢,最后才停止。还要注意的是top属性是一个对象,这让我们可以特定一个范围值,我们可以为每个样式属性动画都给出start和end属性。
几乎所有的easings都有“in”或“out”或“INOUT”的名子。这些方法都是在动画中一定的时间触发的beginning(In),ending(Out),ends(InOut)。
将其组合在一起
传统的动画制作软件通常使用模型的时间线来确定动画的效果,动作为一前一后。 正如我们已经看到在本教程前面的效果,Dojo提供了一个重合机制: fx.combine和fx.chain 。让我们来看看如何把拼在一起。
对于这个演示,开始时我们有两个框的内容,我们要交换,要突出变化,我们也将淡出背后的背景颜色。
<button id="swapButton">Swap</button> <div class="container" id="container"> <div id="content1" class="contentBox" style="top: 0; left: 0"> <div class="innerBox">1: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident.</div> </div> <div id="content2" class="contentBox" style="top: 0; left: 250px"> <div class="innerBox">2: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div> </div> </div>
像以前一样,我们加载dojo,要求加载所需的模块,我们传递给一个函数给require,并在里面做初始化 。
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js" data-dojo-config="isDebug: true, async: true"> <script> require(["dojo/_base/fx", "dojo/fx", "dojo/fx/easing", "dojo/dom-style", "dojo/dom", "dojo/on", "dojo/aspect", "dojo/domReady!"], function(baseFx, fx, easing, domStyle, dom, on, aspect) { function swapAnim(node1, node2) { // create & return animation which swaps the positions of 2 nodes } var originalOrder = true; // track which order our content nodes are in var swapButton = dom.byId("swapButton"), c1 = originalOrder ? dom.byId("content1") : dom.byId("content2"), c2 = originalOrder ? dom.byId("content2") : dom.byId("content1"), container = dom.byId("container"); // Set up a click handler to run our animations on(swapButton, "click", function(evt){ // pass the content nodes into swapAnim to create the node-swapping effect // and chain it with a background-color fade on the container // ensure the originalOrder bool gets togged properly for next time }); }); </script>
能够把不同的动画部分组合成一个复杂的动画是非常有用的。 在这里我们已经打破了动画的单独运动,我们可以使代码可重复使用。swapAnim函数看起来像这样:
function swapAnim(node1, node2) { var posn1 = parseInt(domStyle.get(node1, "left")), posn2 = parseInt(domStyle.get(node2, "left")); return moveNodes = fx.combine([ fx.slideTo({ duration: 1200, node: node2, left: posn1 }), fx.slideTo({ duration: 1200, node: node1, left: posn2 }) ]); }
slideTo作用于每个节点使用left样式属性。我们也可以使用animateProperty类似的效果。两个独立的动画同时运行,fx.combine方法完成两个节点移动一次的两个动画。 请注意,我们返回动画对象animateProperty和其他Dojo方法一样。 它是需要的时候调用代码play()
// Set up a click handlers to run our animations on(swapButton, "click", function(evt){ // chain the swap nodes animation // with another to fade out a background color in our container var anim = fx.chain([ swapAnim(c1, c2), baseFx.animateProperty({ node: container, properties: { backgroundColor: "#fff" } }), ]); // before the animation begins, set initial container background aspect.before(anim, "beforeBegin", function(){ domStyle.set(container, "backgroundColor", "#eee"); }); // when the animation ends, toggle the originalOrder on(anim, "End", function(n1, n2){ originalOrder = !originalOrder; }); anim.play(); });
上面是调用代码。 数组传递给fx.combine之前,fx.chain有两个单独的动画。我们要运行这些系列:交换节点,然后背景色动画。 容器的初始背景颜色设置连接的beforeBegin事件,并在onEnd我们有一个处理,以确保当我们点击下一步,节点被扭转。
生成的代码是灵活的,其逻辑很容易地扩展。
结论
Dojo的动画方便简单,但所有的控制,你需要具体的定制过渡和其它效果。动画可以从简单的一小片开始建立,并提供有用的生命周期事件,以帮助更改同步功能。 在现实世界中,没有直接从一个状态马上变成另一个状态,控制运动和视觉的变化,可以创造非常好的用户体验。
发表评论
-
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 4265对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。 ... -
不翻译DOJO了
2012-05-16 17:57 1103翻译DOJO的时间并不长。总是感觉把老外的话翻译过来很是生硬, ... -
dojo1.7翻译 数组工具(Arrays Made Easy)
2012-05-14 10:55 1972英文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 Dijit的主题,按钮和文本框(Dijit Themes, Buttons, and Textboxes)
2012-05-03 15:52 2214原文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 动态效果(Dojo Effects)
2012-04-27 10:15 1322原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 处理DOM(Dojo DOM Functions)
2012-04-26 15:51 2535原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 ajax跨域请求(Getting Jiggy with JSONP)
2012-04-25 12:02 3161原文地址:http://dojotoolk ... -
dojo1.7翻译 ajax功能(Ajax with Dojo)
2012-04-24 15:04 1565原文地址:http://dojotoolk ... -
dojo1.7翻译 搜索节点功能(Using dojo/query)
2012-04-23 15:32 1910原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 hello,dojo
2012-04-22 15:21 2164原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义类(Classy JavaScript with dojo/_base/declare)
2012-04-20 15:34 2561原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义模块(Defining Modules)
2012-04-18 17:21 6858原文地址:http://dojotoolkit ... -
dojo1.7翻译 通过dojoConfig来配置dojo
2012-04-18 09:20 5230原文地址:http://dojotoolk ... -
dojo1.7翻译 Hello,World
2012-04-17 10:17 1602原文地址:http://dojotoolkit.org/ref ...
相关推荐
【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...
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 1.7 API CHM:深入理解与应用》 Dojo 是一个功能强大的JavaScript工具库,尤其在Web开发领域,它提供了一系列高级功能,包括模块化、数据管理、用户界面构建以及Ajax交互等。Dojo 1.7 API CHM文件是针对这个...
Dojo 框架的核心提供了诸如DOM操作、事件处理、AJAX请求、动画效果等功能。在Dojo 1.7 中,这些功能被重新组织并模块化,使得开发者可以根据需要按需加载,显著提高了页面加载速度。AMD模块化系统的引入是这一版本的...
此外,Dojo的动画库如`dojo.fx`提供了丰富的动画效果,使得用户界面更加生动。 2. **Dojo模块系统(AMD)** Dojo 1.7 引入了异步模块定义(AMD)模式,通过`dojo.require`和`dojo.provide`实现了模块化的代码组织...
dojo.date帮助解析和操作日期,dojo.event处理事件驱动和AOP开发,dojo.back管理撤销操作的栈,dojo.rpc用于与后端服务通信,dojo.data是统一的数据访问接口,dojo.fx实现了基本的动画效果,等等。 此外,Dojo还...
"dojo-release-1.7.3"包含了基础模块`dojo/_base`,其中封装了许多核心功能,如事件处理、DOM操作、动画效果等。这些基本功能是Dojo框架的核心部分,为其他高级模块提供支持。 3. **dijit** 和 **dojox** 模块 - ...
Dojo是一个功能强大的JavaScript库,尤其在处理前端交互和动画效果方面表现卓越。"Dojo动画实例"这个主题,显然关注的是如何利用Dojo库来创建各种动态效果,提升用户体验。Dojo的动画模块提供了丰富的API,使得...
`_base`是Dojo的基础模块,包含了一些核心功能,如事件处理、DOM操作、动画效果等。1.7.2版本的_base更加优化,提供了更好的性能和兼容性。 6. **dojo/has:** `has`功能用于条件化代码,基于浏览器特性动态加载和...
7. **动画效果**:dojo的`dojo.fx`模块提供了创建复杂动画的能力,包括淡入淡出、滑动、缩放等效果。同时,`dojox.fx`提供了更多的特效和动画组合。 8. **主题和样式**:dojo支持多主题,如 claro、tundra、soria ...
Dojo是一个开源的JavaScript框架,旨在提供一站式的解决方案,包括UI组件、数据管理、动画效果、Ajax交互等功能。它使得Web开发更加高效,代码更加模块化。 在学习Dojo时,首先要理解其核心概念,如dojo.js主文件,...
Dojo是一个强大的JavaScript工具包,它提供了丰富的功能,包括DOM操作、AJAX交互、动画效果、事件处理以及模块化开发等,帮助开发者构建高性能、可维护的Web应用。 Dojo的核心概念之一是模块系统(dojo/_base)。这...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信、动画效果等各个方面。在深入理解Dojo之前,我们需要了解JavaScript在网页开发中的核心地位以及它...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、事件处理、动画效果、模块化编程等。这个"dojo 官方教程 中文翻译"是针对Dojo框架的全面指南,帮助中文用户更好地理解...
2. **dojo/_base**:这是Dojo的基础模块,包含了核心功能,如事件处理、DOM操作、动画效果等。学习这个模块能帮助理解Dojo的基本用法。 3. **dojo/_base/xhr**:Dojo提供了强大的异步数据请求功能,`xhr`模块是实现...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括AJAX、DOM操作、动画效果、国际化、模块化等。这个“dojo 离线API”是官方文档的英文原版,旨在帮助开发者在没有网络连接的情况下也能...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,尤其在AJAX、DOM操作、动画效果以及模块化开发等方面表现卓越。"dojo-release-1.2.1-demos" 是一个针对Dojo 1.2.1版本的示例集合,非常适合...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信等多个方面。Dojo的核心在于它的模块化系统,这使得开发者可以按需加载代码,提高应用的性能和可维护...
10. **dojo.on**: Dojo 1.7引入了`dojo/on`模块,它提供了更现代、更符合DOM Level 2事件接口的事件处理方式,同时兼容老版本的`dojo.connect`。 以上所述是Dojo 1.6在DOM操作方面的核心功能。通过这些API,开发者...