官方教程: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的更多相关文章

  1. 实践torch.fx第二篇-fx量化实操

    好久不见各位,哈哈,又鸽了好久. 本文紧接上一篇<实践torch.fx第一篇--基于Pytorch的模型优化量化神器>继续说,主要讲如何利用FX进行模型量化. 为什么这篇文章拖了这么久,有 ...

  2. dojo对数组的处理函数,dojo.forEach、dojo.every、 dojo.some、 dojo.map等

    转自:http://jiataodong.blog.163.com/blog/static/3490549220111024111943439/ 数组处理是 Ajax 应用开发中的常见操作.Dojo ...

  3. 为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?

    首先介绍一下dojo的特性: 1.Dojo是一个符合AMD规范的企业级框架(dojo是一个重量级框架) 2.Dojo全面支持异步加载JS机制(即:支持通过require异步加载JS模块,通过defin ...

  4. C#读写三菱Fx PLC 使用Fx 串口协议 读写Fx3U设备

    本文将使用一个Github开源的组件库技术来读写三菱 FX PLC,使用的是基于串口的实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 github地 ...

  5. Dojo特效(翻译)

    http://dojotoolkit.org/documentation/tutorials/1.10/effects/index.html In this tutorial, we will exp ...

  6. dojo框架笔记

    一.模块定义 1.定义只含值对,没有任何依赖的模块(moudle1.js) define({ color: "black", size: "unisize" } ...

  7. Dojo动画原理解析

    dojo中动画部分分为两部分:dojo/_base/fx, dojo/fx.dojo/_base/fx部分是dojo动画的基石,里面有两个底层API:animateProperty.anim和两个常用 ...

  8. Hello Dojo!(翻译)

    http://dojotoolkit.org/documentation/tutorials/1.10/hello_dojo/index.html 欢迎学习DOJO!在本教程中,你将学些到如何加载DO ...

  9. Dojo API中文 Dojo内容模块概览,初学者

    官网:http://dojotoolkit.org/reference-guide/1.10/dojo/index.html#dojo-dojo的翻译 dojo 内容: dojo dojo/dojo ...

随机推荐

  1. input.nextLine() 问题出错!

    今天在学习关于I/O的知识的时候发现了一个小问题! 代码如下 package com.paulo.testio; import java.io.File; import java.io.IOExcep ...

  2. 笔记本显示器坏了,从硬盘安装win7系统

    可以装的,从硬盘安装的话,步骤如下:一.将从网上下载的win7旗舰版ISO系统文件存放到D盘. 二.从网上下载虚拟光驱,打开安装后在任务栏右通知区显示“虚拟DAEMON管理器”图标,在我的电脑窗口显示 ...

  3. 项目部署之VPN+端口映射

    背景:出差开发项目,需要在客户那里部署基本成型的系统.这套系统需要一个公网的ip地址(一个后台管理系统,使用花生壳提供域名服务.一个公网的tcp server,java io实现),但是客户那里无法提 ...

  4. android 自动化压力测试-monkey 1 实践

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...

  5. css中的border还可以这样玩

    在看这篇文章之前你可能会觉得border只是简单的绘制边框,看了这篇文章,我相信你也会跟我一样说一句"我靠,原来css中的border还可以这样玩".这篇文章主要是很早以前看了别人 ...

  6. bzoj 2599 数分治 点剖分

    具体可以见漆子超的论文 /**************************************************************     Problem:     User: B ...

  7. 【BZOJ】【2301】problem b

    莫比乌斯反演/容斥原理 Orz PoPoQQQ PoPoQQQ莫比乌斯函数讲义第一题. for(i=1;i<=n;i=last+1){ last=min(n/(n/i),m/(m/i)); …… ...

  8. 在C语言中嵌入汇编语言

    TMS320C28x编译器允许在C程序中嵌入汇编指令,通过下面声明实现: asm(“assembler text”); 其中assembler text指汇编代码.asm指令一般用来处理C/C++语句 ...

  9. C#中String 与Color之间的相互转换

    C#中String 与Color之间的相互转换 ————————————宋兴柱     其实,我们平常如果要在数据库存放Color类型值的话,肯定会在数据库中建立varchar类型.对吧.但是Colo ...

  10. WPF 验证

    WPF中TextBox的自动验证: 演示 : 用以下两个TextBox分别显示验证IP和非空值验证,先看效果: IP自动验证效果: 非空值自动验证效果: 第一步:定义TextBox验证的样式: < ...