动画效果之运动

今天开始学习《JS动画效果》,上午把整个课程了解了一遍,决定动手做做实践。一上手就发现看似简单的问题却总是报错,几经推敲才发现问题所在。

关于匀速运动:

首先,做一个简单的“分享到”匀速运动,即当鼠标移到“块”上时,隐藏的块匀速被拉出,移走鼠标,块匀速隐藏。

1.这里涉及到定时器的问题。在开启一个定时器之前一定要关掉定时器,以免出现鼠标不停划上去的时候不停的开启定时器;

2.鼠标进入与离开事件可用一个函数表示,传入不同参数即可通用一个函数(注意尽量少的参数,所以可以精简);

3.offset对于元素的宽高等属性而言是包含border宽度的,因此不能把运动函数简单写成:

function(){
  obj.style.width=obj.offsetWidth+speed+"px";
  ...
}

而应该利用函数(考虑浏览器兼容性)获得此类样式(行间样式可以直接用parseInt(obj.style.width)取得,但是不利于HTML/CSS/JavaScript分离,因此可忽略):

 function getStyle(obj,attr){
   if(obj.currentStyle){
     // 针对ie浏览器
     return obj.currentStyle[attr];
 }else{
    //针对firefox浏览器
     return obj.getComputedStyle(obj,false)[attr];
   }
}

该函数可以取得各种样式,包括字体等。

其次,做了一个透明度的匀速变化运动。 它与其他属性不同有以下几点要注意:

1.浏览器兼容问题:ie下表示方式为“filter:alpha(opacity:30)”,firefox与chrome等高级浏览器表示方式为“opacity:0.3”。因此在做该属性相关事件时应该解决浏览器兼容问题。并且,表示范围也不一样,前者为1~100,后者为0~1。

2.透明度不存在offset属性,因此可以给它一个初始值,作为运动参考点。

关于缓冲运动:

无论是宽高变化,还是透明度变化,在物体做缓冲运动的时候一定要记得给速度取整。因为当speed=(iTarget-alpha)/20右边取值为浮点值时,永远到不了iTarget值,因此speed为负值时用Math.ceil向上取整,正值用Math.floor向下取整。

关于多物体运动:

由于此时不再是单一物体的运动,因此在定时器开启前的关闭定时器要针对每个物体而关闭,透明度的多物体运动要注意给每个物体定义初始值。

关于任意属性值运动:

由于有了getStyle()这个函数,因此可以直接使很多样式得到改变,但是透明度仍然有问题。

1.初始值"iCur=parseInt(getStyle(obj.attr))"————在firefox与chrome中opacity为小数,取整后直接为0。因此可以针对透明度将初始值取值为“iCur=parseFloat(getStyle())*100”,注意前面提到的浏览器兼容性。

2.对于计算机而言,parseFloat不能很严格精确的去到整数,因此需要用Math.round对其取整。

关于链式动画:

即一个运动接着一个运动,例如变宽后变高再变透明度。可以给运动框架上加一个函数fn(调用之前要清楚定时器):

function startMove(obj,attr,iTarget,fn){
   ...
}

鼠标移出时,按倒序还原。

关于同时运动:

即物体同时做几种运动。此时,可能我们想当然的以为两个运动写一起就好了,可是不然,由于运动之前有抢出定时器的存在,因此永远只有最后一个运动可行。因此,我们需要想办法可以同时取多个属性,此时可以用到JSON。此时遍历JSON要用到for(var i in JSON),i代表里面的name,json.[i]表示key即属性值。此时我们可以把之前的运动框架改为:

function startMove(obj,json,fn){
    clearInterval(obj.timer);
   obj.timer=setInterval(function(){
   for(var attr in json){
  //运动框架
  ...
   }
   },30)
}

但此时要注意此框架下的运动不完全,因为它只要有一个属性值到达终点,它就会停止运动,因此还需要判定是否所有的目标值都达到了。在执行下一个运动之前先判定flag值是否为真(之前假设flag为真代表所有目标值都达到了),若不为真,则继续执行下一个属性值,如果为真,则执行下一个运动。

到目前为止,我们应该算做好了一个完美的运动框架,动手试试吧!

时间: 2024-10-13 19:47:44

动画效果之运动的相关文章

运动曲线提升CSS动画效果

原文链接 译文\译者鞠大宝 先有UI动画,然后才会有好的UI动画.好的动画会让人惊叹“哇哦!”——因为页面看上去很流畅.很漂亮,最重要的是,自然,一点都不会让人觉得不和谐或者僵硬死板.如果你经常逛Dribbble或者 UpLabs这类网站的话,你就会明白我在说什么了. 一些极好的拓展阅读资源: ·SVG和CSS的路径剪辑动画 ·若干实用的动画技术 ·使用SVG手绘动画 ·新的网页动画API 既然有这么多天才设计师创造了如此漂亮的动画,自然是任何开发者都会想要在自己的项目中引进这些效果.如今,CS

基于canvas实现物理运动效果与动画效果(一)

一.为什么要写这篇文章 某年某月某时某种原因,我在慕课网上看到了一个大神实现了关于小球的抛物线运动的代码,心中很是欣喜,故而写这篇文章来向这位大神致敬,同时也为了弥补自己在运动效果和动画效果制作方面的不足 二.几种简单的直线运动 这一部分主要讲解的是简单的运动效果的实现原理,其实所有的canvas动画效果的实现在核心思想是一致的:都是先定义个初始的状态,然后定义一个定时器,定时器内执行一个方法,记得在这个方法中要对当前的画面清除,然后在这个方法中重新绘制需要变化的效果,由于人眼存在残影,所以短时

javascript动画效果之缓冲动画(修改版)

在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one,two), 30);时,发现show里面的参数one和two无法被导入,所以需要做以下代码改进和优化 原版的html和css代码在这里javascript动画效果之缓冲动画 js代码如下 1 <script> 2 function $(id) { 3 return typeof id === &

Javascript动画效果(四)

Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下滚入的效果,那么那种效果是如何实现的呢? 首先我们我们完成该效果的html和css代码,代码如下: html部分代码: <div id="move"> <a href="#"><i><img src="images/1

CSS3使用Animation为同一个元素添加多个动画效果

本篇文章由:http://xinpure.com/css3-animation-for-the-same-element-multiple-animation-effects/ CSS3 Animation 并未提供 给一个元素同时添加多个动画效果的方法,就是说一个元素,只能给它定义一个动画效果,不能同时定义. 需求说明 比如说,我想实现一个这样的动画效果: 一颗星星从上往下滑落,当滑落到指定位置时开始闪烁 这里就用到了两个动画效果: 1. 从上往下滑落 (单次动画) 2. 闪烁 (循环动画)

tween.js的动画效果

实现动画可以用好多种的方法,今天来看看用tween.js插件是如何实现动画效果的.  tween.js的使用 1.下载 2.引入 3.使用tween.js语法 需要哪些条件来做运动 1.初始位置 2.目标点 缓动函数 1.linear 匀速 2.Quad 二次方缓动效果 3.Cubic 三次方缓动效果 4.Quart 四次方缓动效果 5.Quint 五次方缓动效果 6.Sine  正弦缓动效果 7.Expo  指数缓动效果 8.Circ  圆形缓动函数 9.Elastic 指数衰减正弦曲线缓动函

使用模块化管理工具seajs实现简单动画效果

今天使用模块化的管理工具seajs实现了一个简单的动画效果. seajs具有简单友好的模块定义规范.seajs遵循CMD规范,可以像nodejs一样编写代码. seajs具有自然直观的代码组织方式.依赖的自动加载,配置简洁清晰. 通过学习,发现seajs的使用是具有一个标准的格式的,如下define(function(require,exports,module){ //定义的代码块 });其中回调的参数名和顺序都是不可改变的. 这次小动画实现的文件结构: word.html代码如下: 1 <!

Android自定义View——仿vivo i管家病毒扫描动画效果

技术是永无止境的,如果真的爱技术,那就勇敢的坚持下去.我很喜欢这句话,当我在遇到问题的时候.当我觉得代码枯燥的时候,我就会问自己,到底是不是真的热爱技术,这个时候,我心里总是起着波澜,我的答案是肯定的,我深深的爱着这门技术. 今天我们继续聊聊Android的自定义View系列.先看看效果吧: 这个是我手机杀毒软件的一个动画效果,类似于雷达搜索,所以用途还是很广泛的,特别是先了解一下这里的具体逻辑和写法,对技术的进步一定很有用. 先简单的分析一下这里的元素,主要有四个圆.一个扇形.还有八条虚线.当

jQuery 动画效果

在以前很长一段时间里,网页上的各种特效还需要采用 flash 在进行.但最近几年里,我们已经很少看到这种情况了,绝大部分已经使用 JavaScript 动画效果来取代 flash.这里说的取代是网页特效部分,而不是动画.网页特效比如:渐变菜单.渐进显示.图片轮播等:而动画比如:故事情节广告.MV 等等. 一.显示.隐藏 jQuery 中显示方法为:.show(),隐藏方法为:.hide().在无参数的时候,只是硬性的显 示内容和隐藏内容. $('.show').click(function(){