说起前端,要说动画是最有乐子的东西了。玩好动画一定会很轻易的享受到前端的乐趣。

这里我不会讲述什么css3 的 transform animation keyframes,也不会讲述jquery的animate 。 不是因为这些没必要会,而是简单到一学就会了

这系列博客,我会详细的讲述用原生js去写

1.动画形成理论

2.动画时间帧控制方法

3.结合css3的一个简单动画框架

4.动画的一些小技巧

3.动画ease,ease-in,ease-out以及其他的算法

4.基础物理动画

5.动画中常见的边缘检测

少吹牛,多装逼,我直接讲述一个动画形成理论 。

视频动画 : 

动画技术较规范的定义是采用逐帧拍摄对象并连续播放而形成运动的影像技术。不论拍摄对象是什么,只要它的拍摄方式是采用的逐格方式,观看时连续播放形成了活动影像,它就是动画。(来自于 百度百科)

这个是一个动画的规范定义。他意思就是动画就是快速播放的图片而已。

网页动画:

有别于视频动画,网页的动画是浏览器渲染出来的网页,而不是图片,但是当网页不动,那网页和图片视觉上其实并无差异,所以网页动画就是浏览器快速渲染出一堆字网页格式的 “图片”,说白了,就是写代码定时改变数据,然后渲染 。

代码基础:

那么就可以写一段代码

setInterval(function(){
render()
},time)

但是这个可不是会动的,我们需要让他一直在变化

setInterval(function(){
render(cfg)
update(cfg)
},time)

这个意思是有一条数据cfg,可以在update当中被改变,在render中用这个cfg去渲染一个动画。

注意:time应该是多少,平滑起见呢,动画30帧/秒就不大看得出卡了,所以呢一般至少需要 1000/30 = 33。就是说time需要小于33

还有一种是setTimeout版的

function render(){
  //some code by animate
setTimeout(function(){
update()
render()
},)
}
animate()

这个意味着每隔33秒去回调一次animate(),然后animate回去更新update()

两者的差异是什么呢

setInterval会每隔time然后执行一次,不管time这段时间够不够用来渲染和更新数据。

setTimeout会再render执行后过time毫秒然后再去render

function animate(){
  //some code
setTimeout(function(){
update()
animate()
},)
} //这个方法中没有定义update()
animate()

这个代码只有一次报错

function animate(){

}
setInterval(function(){
animate()
update()
},)
//这个方法中没有定义update()

这种写法会报错无数次

纠结用哪一个的时候。

setInterval是更加稳定的控制时间差距,稳稳的每隔time执行一次,但是他出错会一直报错,比较难受,挡不住的报错

setTimeout是出错就不懂了,停下来了,其实修复的时候会舒服一点(作为一个密集恐惧症这么觉得),容易调试。

而且性能好呀,setInterval强制渲染,渲染量大,cpu的小风扇马上就呼噜噜开了,但是他不是绝对的time执行,意味会setTimeout会和//some code产生同步,必须等some code办事完了,setTimeout才办事,就是说这玩意只有一个主线任务是而且是同步的。

第一课就将这么多吧!然后希望大家熟练去运用setTimeout和setInterval这两个牛逼哄哄的api

学习写Js的动画的更多相关文章

  1. amazeui学习笔记--js插件(UI增强2)--按钮交互Button

    amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...

  2. 用js实现动画效果核心方式

    为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...

  3. 不管你以后写不写JS,都应该学会这种思考方式

    昨天在网上看到了一篇文章说程序员写不过35这种说法,但事实上,确实并不能每个人都像我一样,在写JS中找到乐趣,就乐意写这东西直到50岁眼瞎为止. 那肯定有人要问,也许我不仅写JS写不到35,可能我连3 ...

  4. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  5. 学习zepto.js(原型方法)

    学习zepto.js(原型方法)[1] 转载 新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): ...

  6. js运动动画

    原文:js运动动画 今天简单的学了一下js运动动画,再此感谢慕课网的这位老师http://www.imooc.com/view/167,讲的很不错. 下面是我整理出来的结果. 知识点一:速度动画. 1 ...

  7. 从零开始学习Vue.js,学习笔记

    一.为什么学习vue.js methods 只有纯粹的数据逻辑,而不是去处理 DOM 事件细节. vue.js兼具angular.js和react的优点,并且剔除了他们的缺点 官网:http://cn ...

  8. [学习笔记]JS 数组Array push相关问题

    前言: 今天用写了一个二维数组,都赋值为零,然后更新其中一个值,结果和预期是不一样,会整列的相同位置都是同一个值. 1.用Chrome的控制台样例如下: arrs[2][2] =1的赋值,竟然是三个数 ...

  9. JS封装动画框架,网易轮播图,旋转轮播图

    JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...

随机推荐

  1. Android开发 MediaPlayer将视频播放时尺寸适配完美

    前言 视频播放有一个较为蛋疼的问题,那就是尺寸适配.如果不做尺寸适配视频将会变形拉伸或者压缩.下面我就介绍个人实现的算法. 满足一边的算法 满足一边?你可能是疑问是什么意思.意思是就是始终将视频的高度 ...

  2. P3718 [AHOI2017初中组]alter

    贪心+二分答案 二分最终答案长度 主要问题在check上 ~~我代码写得巨丑,大家还是不要看我的代码了~~ ------------ 1:当mid大于1的时候,贪心策略是这样的: 当前连续的长度大于m ...

  3. JavaWeb实现文件下载

    1. 编写文件上传Servlet public class FileUpload1 extends HttpServlet { @Override protected void doGet(HttpS ...

  4. php中$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的关系和区别

    看到REQUEST可以通吃GET .POST .COOKIE 后 感觉这个$_REQUEST太强大了是不是其他的几个超级变量就没有用了,下面对他们整体做个比较: 1.安全性 post>get 2 ...

  5. Office宏的基本利用

    前言 Office宏,译自英文单词Macro.宏是Office自带的一种高级脚本特性,通过VBA代码,可以在Office中去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动 ...

  6. 基于OneMap的水利行业共享服务平台搭建步骤

    今天上午再次学习Esri技术培训中心的“GIS服务共享与运维管理——之OneMap解决方案”课程,从中学习了OneMap的产品架构以及基于OneMap共享服务平台的搭建步骤.下面把其中水利行业的共享服 ...

  7. php中的线程、进程和并发区别

    https://mp.weixin.qq.com/s/Ps5w13TTmpnZx-RPWbsl1A 进程 进程是什么?进程是正在执行的程序:进程是正在计算机上执行的程序实例:进程是能分配给处理器并由处 ...

  8. CMS 源码解读

    CMS 是”Content Management System” 的缩写,意为” 内容管理系统”. 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场.对于内容管理,业界还没有一个统 ...

  9. CentOS 8上安装Docker

    前言 这几天,想玩玩docker,方便漏洞复现,我去学docker搭建了,感觉不错,挺方便的 安装步骤: 1.下载docker-ce的repo curl https://download.docker ...

  10. 03_Hibernate关系映射

    关系映射? Hibernate的主要目的就是JAVA程序员可以随心所欲的使用对象编程思维来操作数据库.一些数据库表的关系我们应该可以通过hibernate实现,比如数据库中用到的主外键关系,还有一些与 ...