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

这里我不会讲述什么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. http及浏览器相关知识点归纳

    http是应用层协议,采用请求/响应模型 1.浏览器地址栏输入URL地址后发生了什么? 浏览器判断地址是否是合理的URL地址,是否是http协议请求,如果是则进入下一步 浏览器对此URL进行缓存检查: ...

  2. PCA降维2

    前言 本文为模式识别系列第一篇,主要介绍主成分分析算法(Principal Component Analysis,PCA)的理论,并附上相关代码.全文主要分六个部分展开: 1)简单示例.通过简单的例子 ...

  3. jQuery实现contains方法不区分大小写的方法教程

    jQuery.expr[':'].Contains = function(a, i, m){ return jQuery(a).text().toUpperCase() .indexOf(m[3].t ...

  4. 模拟——1031D

    /* dp[i][j]表示到[i,j]的权值 cnt[i,j]表示到[i,j]还可以使用的修改的次数 cnt[i,j]=max(cnt[i-1,j],cnt[i,j-1]) 如果mp[i,j]!='a ...

  5. Struts2接受请求参数三种常用方法

    一 接受请求参数主要有三种:属性驱动 对象驱动 模型驱动<model Driven> 方式1:在Action中接收请求参数不需要使用request对象,在Action中定义与请求参数相同名 ...

  6. Jmeter接口测试(第二篇)

    一.新建项目 1.运行Jmeter.bat打开Jmeter 2.添加线程组(测试计划->添加->Thread(users)->线程组) 3.添加HTTP请求(线程组->添加-& ...

  7. 02-认识js

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. java笔试之计算n x m的棋盘格子

    请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往 ...

  9. 将数组按指定个数分割,并以"|"做分割

    ```js function sliceArray(arr,num){ let newArr=[] for (var i = 0; i < arr.length; i+=num) { if(ar ...

  10. wampserver配置服务

    搭建服务器 windows下: 安装`WampServer`软件 1.什么是WampServer: WampServer,一般称之为 WAMP ,就是Windows Apache Mysql PHP集 ...