皮皮网

【点微同城30.0 源码】【sift匹配源码】【问天源码】animate源码

来源:遇见定位源码 时间:2024-11-15 06:01:11

1.JQuery 的 deferred . promise对象
2.animation和animator的区别
3.博客园个人主题动画是用css写的吗
4.flash as2.0编程参考书

animate源码

JQuery 的 deferred . promise对象

       你说的这段描述是对 jQuery(selector).promise()的描述,并不是 jQuery.Deferred() 的描述。

       原文是:

Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.

       而这段话是说:

jQuery(selector).promise() 函数是返回一个 Promise 对象,这个对象的作用是当绑定到集合也就是$('div')这样取到的集合的指定类型的所有动作(promise方法的第一个参数 type ,默认是fx,也就是点微同城30.0 源码动画)是否已经完成了。

       英文水平有限,有些地方看不怎么懂,这话说得有点乱,不过意思应该是这样的,举个例子:

$('#message')

       .animate({ width:, height:}, )

       .promise()

       .done(function(){

           console.log('animate end');

       });

       也可以写成:

$('#message').animate({ width:, height:}, );

       var promise = $('#message').promise();

       promise.done(function(){

           console.log('animate end');

       });

       这里的 $('#message') 就是所说的collection,

       而动画 animate (即 fx)就是 certain type,

       里面的所有动作就是 action queue,当然,这里只有1个,就是默认的fx (但是文档中没有找到介绍其它的类型)。

       后面的 var promise = xxx 就是指返回的 Promise对象,这个对象在收到animate 方法里面的信号(这个信号包括 resolve, reject, notify, resolveWith, rejectWith, and notifyWith等)可以调用方法done(当然还有不少其它的方法,这里没用到就不说了,自己看文档吧),然后执行done的回调函数了。

       animate方法会自己发送promise的信号,不用手动去处理。具体细节可以参考 jQuery.Deferred() 方法,sift匹配源码在API的介绍中有这个方法的使用示例。

       需要注意的是, jQuery(selector).promise()和jQuery.Deferred().promise()是不一样的。

       从目前我知道的来说,jQuery(selector).promise() 是专门用来处理jquery中的动画(animate)使用的,而jQuery.Deferred().promise()使用的范围更广,没看源码,不过猜一下,我觉得 jQuery(selector).promise()是jQuery在动画的时候对jQuery.Deferred().promise()的特殊实现(或者叫做功能封装)。

       然后再说一下jQuery.Deferred().promise()吧。它的一般用法为:

var defer= $.Deferred();

       $.when(defer.promise()).then<done|fail|....>(参数...)

       defer.resolve('传参数或留空');

       defer.reject('传参数或留空');

       defer.notify('传参数或留空');

       // ..... 其它信号

       实例请自己去看API页面。

       上面的defer是一个延迟对象(deferred)引用,表示这个对象的信号会在将来发出。

       接下来的 $.when(defer.promise()) 是指jQuery 要监视 defer的信号,收到信号后执行后面的then(或者done, fail或其它)的函数。而后面的defer.resolve<reject|notify>则是发出信号,通知jQuery延迟调用已经执行了,jQuery收到信号后,就去调用这个延迟的promise()后面的函数。

animation和animator的区别

       ä¸€ã€ 前言

       Animator框架是Android 4.0中新添加的一个动画框架,和之前的Animation框架相比,Animator可以进行更多和更精细化的动画控制,而且比之前更简单和更高效。在4.0源码中随处都可以看到Animator的使用。

       äºŒã€ Animation和Animator比较

       å¦‚下图,是Animation和Animator两个类继承图的对比。

       C:Object C:Object

        C:Animation C:Animator

        C:AlphaAnimation C:AnimatorSet

        C:AnimationSet C:ValueAnimator

        C:DummyAnimation C:ObjectAnimator

        C:Rotate3dAnimation C:TimeAnbimator

        C:RotateAniamtion

        C:ScaleAnimation

        C:TranslateAnimation

       Animation框架定义了透明度,旋转,缩放和位移几种常见的动画,而且控制的是一个整个View动画,实现原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧,如果动画没有完成,继续调用invalidate()函数,启动下次绘制来驱动动画,动画过程中的帧之间间隙时间是绘制函数所消耗的时间,可能会导致动画消耗比较多的CPU资源。

       åœ¨Animator框架中使用最多的是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化控制,只控制一个对象的一个属性值,多个ObjectAnimator组合到AnimatorSet形成一个动画。而且ObjectAnimator能够自动驱动,可以调用setFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁绘制界面,而在不影响动画效果的前提下减少CPU资源消耗。

       ä¸‰ã€ 关键接口介绍

       1. ObjectAnimator介绍

       Animator框架封装得比较完美,对外提供的接口非常简单,创建一个ObjectAnimator只需通过如下图所示的静态工厂类直接返回一个ObjectAnimator对象。传的参数包括一个对象和对象的属性名字,但这个属性必须有get和set函数,内部会通过java反射机制来调用set函数修改对象属性值。还包括属性的初始值,最终值,还可以调用setInterpolator设置曲线函数。

       2. AnimatorSet介绍

       AnimatorSet主要是组合多个AnimatorSet和ObjectAnimator形成一个动画,并可以控制动画的播放顺序,其中还有个辅助类通过调用play函数获得。

       3. AnimatorUpdateListner介绍

       é€šè¿‡å®žçŽ°AnimatorUpdateListner,来获得属性值发生变化时的事件,在这个回调中发起重绘屏幕事件。

       å››ã€ 使用实例

       åœ¨Android4.0中的ApiDemo中有个BouncingBalls实例,描述了Animator框架的使用,当点击屏幕时,绘制一个球从点击位置掉到屏幕底部,碰到底部时球有压扁的效果,然后回弹到点击位置再消失。

       ä»£ç å¦‚下:

       ShapeHolder newBall =addBall(event.getX(), event.getY());

        // Bouncing animation with squash and stretch

        float startY = newBall.getY();

        float endY = getHeight() - f;

        float h = (float)getHeight();

        float eventY = event.getY();

        int duration = (int)( * ((h - eventY)/h));

        ValueAnimator bounceAnim = ObjectAnimator.ofFloat(newBall, "y", startY, endY);

        bounceAnim.setDuration(duration);

        bounceAnim.setInterpolator(new AccelerateInterpolator());

        ValueAnimator squashAnim1 = ObjectAnimator.ofFloat(newBall, "x", newBall.getX(),

        newBall.getX() - f);

        squashAnim1.setDuration(duration/4);

        squashAnim1.setRepeatCount(1);

        squashAnim1.setRepeatMode(ValueAnimator.REVERSE);

        squashAnim1.setInterpolator(new DecelerateInterpolator());

        ValueAnimator squashAnim2 = ObjectAnimator.ofFloat(newBall, "width", newBall.getWidth(),

        newBall.getWidth() + );

        squashAnim2.setDuration(duration/4);

        squashAnim2.setRepeatCount(1);

        squashAnim2.setRepeatMode(ValueAnimator.REVERSE);

        squashAnim2.setInterpolator(new DecelerateInterpolator());

        ValueAnimator stretchAnim1 = ObjectAnimator.ofFloat(newBall, "y", endY,

        endY + f);

        stretchAnim1.setDuration(duration/4);

        stretchAnim1.setRepeatCount(1);

        stretchAnim1.setInterpolator(new DecelerateInterpolator());

        stretchAnim1.setRepeatMode(ValueAnimator.REVERSE);

        ValueAnimator stretchAnim2 = ObjectAnimator.ofFloat(newBall, "height",

        newBall.getHeight(),newBall.getHeight() - );

        stretchAnim2.setDuration(duration/4);

        stretchAnim2.setRepeatCount(1);

        stretchAnim2.setInterpolator(new DecelerateInterpolator());

        stretchAnim2.setRepeatMode(ValueAnimator.REVERSE);

        ValueAnimator bounceBackAnim = ObjectAnimator.ofFloat(newBall, "y", endY,

        startY);

        bounceBackAnim.setDuration(duration);

        bounceBackAnim.setInterpolator(newDecelerateInterpolator());

        // Sequence the down/squash&stretch/upanimations

        AnimatorSet bouncer = new AnimatorSet();

        bouncer.play(bounceAnim).before(squashAnim1);

        bouncer.play(squashAnim1).with(squashAnim2);

        bouncer.play(squashAnim1).with(stretchAnim1);

        bouncer.play(squashAnim1).with(stretchAnim2);

        bouncer.play(bounceBackAnim).after(stretchAnim2);

        // Fading animation - remove the ball when theanimation is done

        ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);

        fadeAnim.setDuration();

        fadeAnim.addListener(new AnimatorListenerAdapter() {

        @Override

        public void onAnimationEnd(Animatoranimation) {

        balls.remove(((ObjectAnimator)animation).getTarget());

        }

        });

        // Sequence the two animations to play oneafter the other

        AnimatorSet animatorSet = new AnimatorSet();

        animatorSet.play(bouncer).before(fadeAnim);

        // Start the animation

        animatorSet.start();

博客园个人主题动画是用css写的吗

       在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工。美你妹啊,问天源码请叫我前端工程师好不好。呃。。好吧,攻城尸。。。呵呵,作为一个攻城尸,没有点高端大气上档次的东西怎么能行呢,那么css3的动画就绝对是值得你拥有了,虽说IE9以及更早版本的IE浏览器都不支持css3动画,但是IE6-8浏览器已是江河日下,使用谷歌浏览器、火狐浏览器、IE+浏览器以及移动端浏览器等这些支持css3动画的浏览器的人数越来越多,所以如果很简单的就能让一部分人获得更好的用户体验,那何乐而不为呢。

       从广义上来讲,css3动画可以分为两种。

       过渡动画

       第一种叫过渡(transition)动画,就是从初始状态过渡到结束状态这个过程中所产生的动画。所谓的nexusphp源码分析状态就是指大小、位置、颜色、变形(transform)等等这些属性。css过渡只能定义首和尾两个状态,所以是最简单的一种动画。

       要想使一个元素产生过渡动画,首先要在这个元素上用transition属性定义动画的各种参数。可定义的参数有

       transition-property:规定对哪个属性进行过渡

       transition-duration:定义过渡的时间,默认是0

       transition-timing-function:定义过渡动画的缓动效果,如淡入、淡出等,默认是 ease

       transition-delay:规定过渡效果的延迟时间,即在过了这个时间后才开始动画,默认是0

        

       为了书写方便,也可以把这四个属性按照以上顺序简写在一个 transition 属性上:

       如果是使属性的默认值,则可以省略:

        相当于:

       如果想要同时过渡多个属性,可以用逗号隔开,如:

       使用transtion属性只是规定了要如何去过渡,要想让动画发生,还得要有元素状态的改变。如何改变元素状态呢,当然就是在css中给这个元素定义一个类(:hover等伪类也可以),这个类描述的图集模板源码是过渡动画结束时元素的状态。

       这样,当我们把鼠标移动到div上的时候,div的状态发生了变化,就能看到宽度从到,高度从到,背景颜色从黑到红的,过渡时间为3秒的过渡效果了。

       除了使用hover等系统提供的伪类外,我们也可以随意的定义自己的类,然后想要过渡时就通过js把类加到元素上面:

       关键帧动画

       第二种叫做关键帧(keyframes)动画。不同于第一种的过渡动画只能定义首尾两个状态,关键帧动画可以定义多个状态,或者用关键帧来说的话,过渡动画只能定义第一帧和最后一帧这两个关键帧,而关键帧动画则可以定义任意多的关键帧,因而能实现更复杂的动画效果。

       关键帧动画的定义方式也比较特殊,它使用了一个关键字 @keyframes 来定义动画。具体格式为:

       @keyframes 动画名称{

       时间点 { 元素状态}

       时间点 { 元素状态}

       …

       }

       例如:

       这段代码定义了一个名为demo,且有5个关键帧的动画。0% ,% 等这些表示的是时间点,是相对于整个动画的持续时间来说的,时间点之后的花括号里则是元素的状态属性集合,描述了这个元素在这个时间点的状态,动画发生时,就是从第一个状态到第二个状态进行过渡,然后从第二个状态到第三个状态进行过渡,直到最后一个状态。一般来说,0%和%这两个关键帧是必须要定义的。

       关键帧的书写方式很灵活,一行可以写多个关键帧。

       甚至它们之间的空格也是可以不要的。

       现在我们知道了怎么去定义一个关键帧动画了,那怎么去实现这个动画呢?其实很简单,只要把这个动画绑定到某个要进行动画的元素上就行了。

       把动画绑定到元素上,我们可以使用animation属性。animation属性有以下这些:

       像前面讲的transition属性一样,也可以把这些animation属性简写到一个animation中,使用默认值的也可以省略掉。但 animation-play-state 属性不能简写到animation中。

       只要像这样把定义好的动画绑定到元素上,就能实现关键帧动画了,而不是像第一种过渡动画那样,需要一个状态的改变才能触发动画。

       --------------------------------------------------------------------------------------------------------------------

       注意,为了达到最佳的浏览器兼容效果,在实际书写代码的时候,还必须加上各大浏览器的私有前缀

       animate.css的使用

       animate.css是一个css3动画库,可以到github上去下载,里面预设了很多种常用的动画,可以先在本页看下演示效果,使用也很简单,因为它是把不同的动画绑定到了不同的类里,所以我们想要使用哪种动画的时候,只需要简单的把那个相应的类添加到元素上就行了:

       首先在head中引入下载的animate.css文件

       然后你想要哪个元素进行动画,就给那个元素添加上animated类 以及特定的动画类名,animated是每个要进行动画的元素都必须要添加的类。

       假设使用jquery,要给一个id为demo的元素添加一个摇动的动画,因为摇动的动画类名为shake,所以代码是这样的:

       这样载入页面,元素就能动起来了。你也可以在动画完成后,把动画类移除,以便可以再次进行同一个动画。

       至于动画的配置参数,比如动画持续时间,动画的执行次数等等,你可以在你的的元素上自行定义,覆盖掉animate.css里面所定义的就行了。

       注意这些属性还要记得加上各浏览器的前缀。

       总之是很灵活的,说到底不就是一个css文件吗,一看就懂的,你在里面想怎么整就怎么整,不想用它提供的类名,就在里面改掉就行了。如果你只想用里面的部分动画,也可以把那些要使用的动画分离出来,它的官网也提供了这样的功能。

flash as2.0编程参考书

       已经不建议你搞FLASH代码了.

       而且讲实话,FLASH是盗版带起的,当初该公司根本就国内,也没提供正经的教程,都是爱好者瞎写的.到adobe时代被收购了才进入国内搞了个AS3才有正式教程,但是AS2,AS3在ADOBE自己看来都看不下去,所以才后边直接弱化掉.到年把FLASH改名成ANIMATE后主要用H5输出,而不是AS,而年也废除了flash player,到最后连打包工具AIR都直接卖了.你何必学这个呢,要编程就好好的去学JS或C语言,FLASH在业内只看作个软件内置脚本而且还是闭源无法转移到其他编程工具里的代码,象JS和C还有P你在任何软件里写复制到其他开发软件里都可以直接用.这个就是基础语言,通用语言.所以你要搞建议看这些真正的编程语言的书.

       ActionScript是原Macromedia公司(后并入Adobe)为其Flash产品开发的一种基于ECMAScript的面向对象编程语言。你可以看成AS算是JS的部分功能打包,然后跑在一个名叫FLASH PLAYER虚拟机里的脚本。实际公认编程语言是,Java,C,Python,JavaScript等。

       其他依存编辑器内的语言,都只叫脚本。

       实际FLASH整个软件都是,Java和JavaScript做出来的。而年改叫ANIMATE后,采用的语言是C和JavaScript做出的软件。年ADOBE放弃了原FLASH所有As和代码相关的模块。

       AS已经被取消再开发,开发小组已经解散,AIR已经卖出,新导入的HTML5格式的编写也是CreateJS的一个动画引擎。等于adobe除了动画制作的相关,其他代码全已抛弃。

       评价

       编程人员们说Macromedia ActionScript 2.0编译器有点慢,常常花好几分钟才编译个类别,然而开放源码编译器MTASC可以利用;它快多了。

       ActionScript2.0 非常宽大的语法常常让编程人员们皱眉,因为它常常让不干净代码难以阅读。ActionScript 3.0的类型绑定改善了此缺点

       在Flash里使用许多矢量图形可能拖慢运行许多应用程序的机器的性能,因为Flash每帧每帧重画每个向量图。Flash 8引进了cacheAsBitmap变量,它暂时把向量图转换到位图,这种做法帮助降低了延滞。

       Flash的ActionScript VM倾向在触发内部的暂停处理前就非常快达到它的运算极限,特别在麦金塔版的Flash播放器上更严重。例如,简单从1算到会威胁某些用户Flash播放器的能力。

       在Flash 8里许多人不喜欢引入(import)某些类直到要用到那些类别前最后一刻。不幸的是,ActionScript 3.0相当倚赖引入类别,没有导入撰写脚本(scripting)实际上不太可能。

       .swf文件格式容易被反编译,使它非常难以保持原码的隐密性。在日后的发展由于发布后为原生语言结构此问题已不复存在,加上app的平台有自己的加密方式更加的解决所有语言都有的这难题。

       在播放方面,在年起,FLASH player每年以几十个安全漏洞增长,到年已达百个漏洞并且无法修复,常见为挖矿软件,病毒,木马,攻击,最终所有系统均不再支持FLASH PLAYER,主流浏览器则禁止其运行。