今天简单的学了一下js运动动画,记录一下自己的心得体会,分享给大家。

      下面是我整理出来的结果。

知识点一:速度动画。

      1.首先第一步实现速度运动动画,封装一个函数,用到的知识是setInterval(function(){

复制代码 代码如下:
    oDiv.style.left=oDiv.offsetLeft+10+"px";
  },30).

  对于这里为什么要用到offsetLeft,我特意百度了一下,我得到的有用信息是:

  a.offsetLeft和left的相同之处都是表示子节点相对于父节点的左位置。
  b.但是left是既可以读又可以写的,而offsetLeft是只读的;
  c.并且offsetLeft是没有单位的,获取子节点位置的时候后面不带px。

  这里在引申一下其他的知识,感谢这位博主,http://blog.163.com/hongshaoguoguo@126/blog/static/18046981201372885729561/。

  2.让运动的节点停止下来,这里我们用if语句做一个验证,如果offsetLeft==0,clearInterval(timer),这里的timer应该事先初始化=null,然后将之前的那个运动动画赋值给它。

  3.这里有一个问题,如果在运动结束之前再次触发的运动,那么运动的速度会累加,这里,只要在整个运动开始之前,clearInterval(timer)就可以了。

  4.设置移入移除效果,给运动设置参数,一个是速度speed,一个是目标位置iTarget,我们发现速度也是可以通过ITarget的位置来判断的,所以只需要一个参数即可。

知识点二:透明度渐变

  1.其实,跟刚刚是差不多的,只不过ITarget的值为透明度而已,流程还是清除定时器再开一个定时器判断等等。

  2.定义一个参数alpha=透明度,注意定时器里面应该这样写:

复制代码 代码如下:
  alpha+=speed;
  oDiv.style.filter='alpha(opacity:'+alpha+')';         //这是非常重要的一种方法,注意是这样写的
  oDiv.style.opacity=alpha/100;            //注意不要忘记除以100

  3.以上都是行内样式。

知识点三:缓冲运动

  1.缓冲运动就是距离越大,速度就愈大,距离越小,速度就越小,即速度与距离有关。

  2.根据上面的说法,对速度进行重新的定义,一开始速度为0,而现在:

复制代码 代码如下:
  var speed=iTarget-oDiv.offsetLeft;

  重新定义定时器:

复制代码 代码如下:
  oDiv.style.left=oDiv.offsetLeft+speed+'px';

  此时我们发现速度太大了,可以这样:

复制代码 代码如下:
  var speed=(iTarget-oDiv.offsetLeft)/10;

  3.此时会有一个严重的问题,因为屏幕的最小单位为px,所以会出现最终的left值为小数,而不为目标的iTarget,可以通过判断来解决,这里要引入Math.floor(),这是向下取整,同样还有Math.ceil(),这是向上取整。在定义speed后我们这样写:

复制代码 代码如下:
  speed=speed>0"codetitle">复制代码 代码如下:
  function getStyle(obj,attr){
    if(obj.currentStyle){
      return obj.currentStyle[attr];                       //ie浏览器 
    }
    else{
      return getComputerStyle(obj,false)[attr];          //其他浏览器
    }
  }

  3.对于font-size这种,在js里只有fontSize这一种写法。

知识点六:任意属性值

  1.所有的offset-的都会有小bug,要用getStyle函数,这个函数经常和parseInt()一起用,并通常用变量保存。

  2.在写style.width的时候,也可以写成style['width']。  

  3.对于多物体的属性值调整,可以将样式作为参数封装一下,这样多物体属性的函数就包括了(obj,attr,iTarget)这三个属性值。

  4.以上的这个运动框架是不适合于透明度变化的,因为透明度都是小数的,因为两个原因,第一是parseInt,第二是attr=...+px,这里我们可以用一个if判读来对透明度进行单独处理,将parseInt换成parseFloat,去掉px。

  5.计算机本身是有一个bug的,0.07*100并不等于7,所以我们引入一个函数是Math.round(),这是一个四舍五入的值。

知识点七:链式运动

  1.引入move.js框架。

  2.传入一个回调函数fn(),用if判断,如果有fn(),那么执行fn()。

知识点八:同时运动

  1.如果写两个运动函数来控制同时运动,会发生函数覆盖。

  2.使用json这个知识点,json的循环是使用for(i in json),运动函数的参数为obj,json,fn。

  3.没有iTarget这个值了,取而代之的是json[attr].

  写到这里,就已经完全结束了,希望大家能够喜欢。也希望对大家学习js运动动画能够有所帮助。

标签:
js,运动,动画

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“js运动动画的八个知识点”
暂无“js运动动画的八个知识点”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。