34avalon - 指令ms-effect(动画绑定)

简介: 34avalon - 指令ms-effect(动画绑定)

ms-effect拥有这三种绑定形式:

<p ms-effect="[@configObj,{is:'fade'}">属性值为字面量,其中一个对象必须包括is属性,这用于指定特效名</p>
<p ms-effect="{is:fade, stagger:300}">属性值为对象字面量, 里面拥有is属性</p>
<p ms-effect="@fadeConfig">属性值为vm的对象,里面拥有is属性</p>

avalon2实际上没有实现完整的动画模块,它只是对现有的CSS3动画或jquery animate再包装一层。

我们先说如何用CSS3为avalon实现动画效果。首先要使用avalon.effect注册一个特效。

avalon.effect(name, definition)

css3动画要求我们至少添加4个类名。这个是从angular那里学过来的。因此如何你以前的项目是基于angular,它那些CSS动画类可以原封不动地搬过来用。

avalon.effect('animate', {
    enterClass: 'animate-enter',
    enterActiveClass: 'animate-enter-active',
    leaveClass: 'animate-leave',
    leaveActiveClass: 'animate-leave-active', 
})

当然,这些类名会默认帮你添加,因为它内部是这样实现的。

avalon.effect = function (name, opts) {
    var definition = avalon.effects[name] = (opts || {})
    if (support.css && definition.css !== false) {`在这里插入代码片`
        patchObject(definition, 'enterClass', name + '-enter')
        patchObject(definition, 'enterActiveClass', definition.enterClass + '-active')
        patchObject(definition, 'leaveClass', name + '-leave')
        patchObject(definition, 'leaveActiveClass', definition.leaveClass + '-active')
    }
    patchObject(definition, 'action', 'enter')
}
function patchObject(obj, name, value) {
    if (!obj[name]) {
        obj[name] = value
    }
}

因此你可以简化成这样:

avalon.effect('animate', {})
avalon.effect('animate')

definition配置对象css如果等于false,那么它会强制使用JS方式

注册完,我们就需要在样式表中添加真正的CSS类。

.animate-enter, .animate-leave{
    width:100px;
    height:100px;
    background: #29b6f6;
    transition: width 2s;
    -moz-transition: width 2s; /* Firefox 4 */
    -webkit-transition: width 2s; /* Safari 和 Chrome */
    -o-transition: width 2s; /* Opera */
}  
.animate-enter-active, .animate-leave{
    width:300px;
}
.animate-leave-active{
    width:100px;
}

我们还得定义一个vm,里面指明动画的动作(默认有三种方式, enter, leave, move) 及动画结束时的回调(这是可选的)

var vm = avalon.define({
    $id: 'effect',
    aaa: "test",
    action: 'enter',
    enterCb: function(){
        avalon.log('动画完成')
    },
    leaveCb: function(){
        avalon.log('动画回到原点')
    }
})

然后页面上这样使用:

<div ms-controller='effect' >
    <div ms-effect="{is:'animate', action:@action,onEnterDone: @enterCb,onLeaveDone: @leaveCb}">
        {{@aaa}}
    </div>
    <button ms-click='@action = @action !== "leave" ? "leave": "enter"'
            type="button">click</button>
</div>

ms-effect的值为一个对象,其中is是必选。除了action, 还支持这么多种回调:

onEnterDone, onLeaveDone, onEnterAbort, onLeaveAbort, onBeforeEnter, onBeforeLeave


目录
相关文章
|
测试技术 计算机视觉
斯坦福新研究提升大模型长视频理解能力
【2月更文挑战第29天】斯坦福大学研究团队开发的VideoAgent系统在长视频理解上取得突破,提升了大型语言模型处理视频内容的能力。该系统通过模拟人类认知过程,以高效(平均8.4帧)实现高准确率(54.1%和71.3%的零样本准确率),在EgoSchema和NExT-QA基准测试中超越现有最佳方法。VideoAgent借鉴人类观看视频的方式,迭代选择关键帧进行信息提取和推理,为长视频理解设定新标准。论文链接:[arxiv.org/pdf/2403.10517.pdf](https://arxiv.org/pdf/2403.10517.pdf)
403 1
斯坦福新研究提升大模型长视频理解能力
|
网络协议 Linux API
c++网络库Libevent万字详解
libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
452 0
|
数据采集 搜索推荐
三大能力,破解车企运营提效谜题(2)
三大能力,破解车企运营提效谜题
200 1
|
前端开发 调度
300 行代码实现 React 的调度器 Scheduler
说是实现,但其实我们只是在 React Scheduler 源码的基础上进行了简化,省略掉一些繁琐的细节,添加了丰富的注释,保证代码可直接执行。 大家可以复制代码到编辑器中,直接运行,非常适合学习 React 源码用。
146 0
|
编解码 算法 新能源
基于混沌集成决策树的电能质量复合扰动识别(Matlab代码实现)
基于混沌集成决策树的电能质量复合扰动识别(Matlab代码实现)
133 0
|
数据采集 JavaScript 机器人
伙伴客户案例|阿里云RPA携手苏州好的全面提升大型汽车制造企业工作效率(二)
RPA全称机器人流程自动化(Robotic Process Automation),是一种新兴的“数字劳动力”,可以替代或辅助人完成规则明确的重复性劳动,大幅提升业务流程效率,实现企业业务流程的自动化和智能化,从而降本增效。目前,RPA解决方案的应用场景几乎涵盖了所有行业,包括银行、保险、制造、零售、医疗、物流、电子商务甚至政府和公共机构。
伙伴客户案例|阿里云RPA携手苏州好的全面提升大型汽车制造企业工作效率(二)
|
弹性计算 关系型数据库 MySQL
Linux - 阿里云:记录一次低配 ecs 服务器在 cpu、内存打满情况下无法远程连接的解决过程
Linux - 阿里云:记录一次低配 ecs 服务器在 cpu、内存打满情况下无法远程连接的解决过程
813 0
Linux - 阿里云:记录一次低配 ecs 服务器在 cpu、内存打满情况下无法远程连接的解决过程
|
数据安全/隐私保护
UGUI系列-InputField限制输入个数以及限制输入格式
UGUI InputField 组件是一个用来管理输入的组件 我们通常用来输入用户的账号,密码,或者聊天时输入文字,等等输入逻辑… 在使用中,我们常常要对输入的字符串进行限制,最常见的限制有个数和格式
|
人工智能 Java 编译器
【七天入门Go语言】函数 & 方法 & 接口 | 第三天
目录 1. 函数 2. 方法 3. 接口 最后
216 0
【七天入门Go语言】函数 & 方法 & 接口 | 第三天
|
Java
Java之类与对象基本使用
Java之类与对象基本使用
173 0
Java之类与对象基本使用