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对象组成的数组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值