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

这里我不会讲述什么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. System.UriFormatException: Invalid URI 解决方法

    mobox 企业网页登陆界面,sa 登陆后 提示 System.UriFormatException: Invalid URI: The URI scheme is not valid. at Sys ...

  2. 阿里巴巴大数据产品最新特性介绍--机器学习PAI

    以下内容根据演讲视频以及PPT整理而成. 本次分享主要围绕以下五个方面: PAI产品简介 自定义算法上传 数加智能生态市场 AutoML2.0自动调参 AutoLearning自动学习 一.PAI产品 ...

  3. CF1163E Magical Permutation

    题意:给定集合,求一个最大的x,使得存在一个0 ~ 2x - 1的排列,满足每相邻的两个数的异或值都在S中出现过.Si <= 2e5 解:若有a,b,c,令S1 = a ^ b, S2 = b ...

  4. duilib教程之duilib入门简明教程3.第一个程序 Hello World

    小伙伴们有点迫不及待了么,来看一看Hello World吧:新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #in ...

  5. lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(二) LVS+Keepalived

    一.安装ipvs sudo apt-get install ipvsadm 二.安装keepalived sudo apt-get install keepalived 三.创建keepalived. ...

  6. 服务器迁移部署PosEdi

    绑定 基本配置 高级配置

  7. mysql之sql优化

    sql的执行顺序: 先看下下面两条多表关联sql,第1条查询到1条记录,第2条查无记录: on 筛选条件在笛卡尔积之前,where筛选条件在笛卡尔积之后执行 先执行from, join的话,左连接,左 ...

  8. 01_springmvc基础入门

    一.springmvc概述 Spring MVC是基于Model2实现的技术框架,在Spring MVC中,Action被称为Controller(控制器).Spring的Web框架围绕Dispatc ...

  9. 启动zuul时候报错:The bean 'proxyRequestHelper', defined in class path resource [org/springframework/cloud/netflix/zuul

    启动zuul时候报错:The bean 'proxyRequestHelper', defined in class path resource [org/springframework/cloud/ ...

  10. 前端面试题(js部分)

    一.==和===的区别 1.==   用于比较.判断两者相等,比较时可自动换数据类型 2.===  用于(严格)比较.判断两者(严格)相等,不会进行自动转换,要求进行比较的操作数必须类型一致,不一致时 ...