dojo 九 effects dojo/_base/fx 和 dojo/fx
官方教程:Dojo Effects
这里讲学习一下dojo如何实现淡入、淡出、滑动等效果。
实现这些特殊的效果有两个包 dojo/_base/fx 和
dojo/fx。
dojo/_base/fx 中提供了一些基础的animation方法,如: animateProperty
,
anim
, fadeIn
, and fadeOut
.
dojo/fx
中提供了一些高级的animation方法,如:chain
, combine
,
wipeIn
, wipeOut
and
slideTo。
淡入淡出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();//淡入
});
});
在所有的方法中包含后面介绍的,都只有一个对象参数,这个对象中可包含多个属性,必不可少的一个属性就是node,为要实现效果的节点对象或id字符串。
在fadeOut/fadeIn方法中还有一个属性duration,持续的时间,默认为350ms。这些animation方法将返回一animation对象,该对象包含一些方法:
play,
pause, stop, status, and
gotoPercent,用来执行,暂停,停止,查看状态及执行到某种程度。
擦除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();
});
});
同淡入淡出一样
滑动
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();
});
});
在slideTo方法的参数中,除了节点对象属性外,还有left和top两个属性,用来设置滑动到目的位置的坐标。
事件
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();
});
});
在实现动态效果的过程中会产生两个事件,一个是beforeBegin,在执行之前调用;一个是onEnd,在执行完后调用。
在上面的例子中可以看到,beforeBegin是作为参数对象中的一个方法来定义的;onEnd是作为animation对象的一个事件在on中定义的。
连锁反应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();
});
});
chain用来将多个animation动作连接起来按顺序执行,它的参数即是由不同animation方法返回的animation对象组成的数组,执行的顺序就是数组的
先后
顺序。
联合
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();
});
});
combine方法是将多个animation动作联合起来同时执行实现一个完成的动态效果。其参数也是
由不同animation方法返回的animation对象组成的数组。
dojo 九 effects dojo/_base/fx 和 dojo/fx的更多相关文章
- 实践torch.fx第二篇-fx量化实操
好久不见各位,哈哈,又鸽了好久. 本文紧接上一篇<实践torch.fx第一篇--基于Pytorch的模型优化量化神器>继续说,主要讲如何利用FX进行模型量化. 为什么这篇文章拖了这么久,有 ...
- dojo对数组的处理函数,dojo.forEach、dojo.every、 dojo.some、 dojo.map等
转自:http://jiataodong.blog.163.com/blog/static/3490549220111024111943439/ 数组处理是 Ajax 应用开发中的常见操作.Dojo ...
- 为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?
首先介绍一下dojo的特性: 1.Dojo是一个符合AMD规范的企业级框架(dojo是一个重量级框架) 2.Dojo全面支持异步加载JS机制(即:支持通过require异步加载JS模块,通过defin ...
- C#读写三菱Fx PLC 使用Fx 串口协议 读写Fx3U设备
本文将使用一个Github开源的组件库技术来读写三菱 FX PLC,使用的是基于串口的实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 github地 ...
- Dojo特效(翻译)
http://dojotoolkit.org/documentation/tutorials/1.10/effects/index.html In this tutorial, we will exp ...
- dojo框架笔记
一.模块定义 1.定义只含值对,没有任何依赖的模块(moudle1.js) define({ color: "black", size: "unisize" } ...
- Dojo动画原理解析
dojo中动画部分分为两部分:dojo/_base/fx, dojo/fx.dojo/_base/fx部分是dojo动画的基石,里面有两个底层API:animateProperty.anim和两个常用 ...
- Hello Dojo!(翻译)
http://dojotoolkit.org/documentation/tutorials/1.10/hello_dojo/index.html 欢迎学习DOJO!在本教程中,你将学些到如何加载DO ...
- Dojo API中文 Dojo内容模块概览,初学者
官网:http://dojotoolkit.org/reference-guide/1.10/dojo/index.html#dojo-dojo的翻译 dojo 内容: dojo dojo/dojo ...
随机推荐
- SQL Server性能优化(4)命名和书写规范
命名规范是一个老生常谈的问题,好的命名规范对于团队程序开发,对bug定位.处理,项目延续有很重要的作用. 一. 列举现在的问题: 1.名称首字母不大写 2. 用中文名字 ...
- 《Soft Skill》一书中的好句子
The biggest mistake that you can make is to believe that you are working for somebody else. Job secu ...
- Combox 实现百度收索框效果
标题中所谓百度收缩框效果,就是在输入数据的时候,自动提示,来张图就明白了: 用Combox来实现这个功能只是需要设置三个A开头的属性就OK了:AutoCompleteSource.AutoComple ...
- 【BZOJ】【1211】【HNOI2004】树的计数
Prufer序列+组合数学 嗯哼~给定每个点的度数!求树的种数!那么很自然的就想到是用prufer序列啦~(不知道prufer序列的……自己再找找资料吧,这里就不放了,可以去做一下BZOJ1005明明 ...
- 使用Provider时提示:Unable to get provider...
具体原因还不清楚,只是找到了原因: 这是因为自定义的Provider放的包路径不对,自定义的Provider应该放到和MainActivity同一个包中.
- .NET设计模式(10):装饰模式(Decorator Pattern)(转)
概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性:并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多 ...
- My97日历控件常用功能记录
My97相信大家都不陌生,应该是我所见过的最强大的一个日历控件了,最近的项目中也比较多地用到了此控件,而且项目中经常会有不同时间范围的需求,在此列出一些比较常用的日期范围格式的设置,尽管在My97的官 ...
- topcoder 643 DIV2
太弱了,太弱了! A:基本的判断吧,然后就是边界问题,写了好久,结果发现时房间第二个交的.. B:真心跪了,还好想出来了,思路想的太慢太慢,结果交上去,落后太多,不过HACK时很多人挂了, 这也是DI ...
- 使用ajax技术无刷新动态调用股票信息
新浪的财金频道一直感觉做得很好.但由于最近网速慢的缘故,查看股票信息时网页老是打不开.这几天一直在研究ajax,于是用jquery自己做了一个自动读取新浪股票实时数据的页面. <html> ...
- Goolg Chrome 插件开发--Hello world
开发Chrome插件很简单,只要会web开发(html+javascript+css)那么这个就是能驾轻就熟,只需要了解一下插件具体的运行环境及要求就OK了. 1.先创建一个html文件,名字随便取, ...