学习写Js的动画
说起前端,要说动画是最有乐子的东西了。玩好动画一定会很轻易的享受到前端的乐趣。
这里我不会讲述什么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的动画的更多相关文章
- amazeui学习笔记--js插件(UI增强2)--按钮交互Button
amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...
- 用js实现动画效果核心方式
为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...
- 不管你以后写不写JS,都应该学会这种思考方式
昨天在网上看到了一篇文章说程序员写不过35这种说法,但事实上,确实并不能每个人都像我一样,在写JS中找到乐趣,就乐意写这东西直到50岁眼瞎为止. 那肯定有人要问,也许我不仅写JS写不到35,可能我连3 ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- 学习zepto.js(原型方法)
学习zepto.js(原型方法)[1] 转载 新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): ...
- js运动动画
原文:js运动动画 今天简单的学了一下js运动动画,再此感谢慕课网的这位老师http://www.imooc.com/view/167,讲的很不错. 下面是我整理出来的结果. 知识点一:速度动画. 1 ...
- 从零开始学习Vue.js,学习笔记
一.为什么学习vue.js methods 只有纯粹的数据逻辑,而不是去处理 DOM 事件细节. vue.js兼具angular.js和react的优点,并且剔除了他们的缺点 官网:http://cn ...
- [学习笔记]JS 数组Array push相关问题
前言: 今天用写了一个二维数组,都赋值为零,然后更新其中一个值,结果和预期是不一样,会整列的相同位置都是同一个值. 1.用Chrome的控制台样例如下: arrs[2][2] =1的赋值,竟然是三个数 ...
- JS封装动画框架,网易轮播图,旋转轮播图
JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...
随机推荐
- Caffe系列1——网络文件和求解分析
1. 首先,我们先看一个完整的文件:lenet_train_test.prototxt name: "LeNet" #整个网络的名称 layer { #数据层——训练数据 name ...
- string json list
String str="[{\"cIndex\":14,\"column\":\"nextAdvice\",\"id\& ...
- jvisualvm 工具使用【转】
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...
- DbUtils要点小结
一. DbUtils核心API 1. QueryRunner update方法 query方法 2. 各种Handler都实现ResultSetHandler接口 beanhandler beanli ...
- [JZOJ4913] 【GDOI2017模拟12.3】告别
题目 描述 题目大意 给你两个排列AAA和BBB,每次随即选三个数进行轮换操作,问mmm次操作内使AAA变成BBB的概率. 思考历程 首先随便搞一下,就变成了AAA中每个数回归自己原位. 一眼望去,感 ...
- C++ Builder获取系统文件的路径
取得路径的程序:(注意红色字体,由于博客显示问题,所以中间加了空格,大家自己把空格去掉即可) // -------------------------------------------------- ...
- springboot让内置tomcat失效
一.POM(去除内嵌tomcat后,需要添加servlet依赖) <dependency> <groupId>org.springframework.boot</grou ...
- 自定义UICollectionViewLayout(适用于多个section)
一.自定义layout主要方法 重写系统的- (void)prepareLayout 方法: 其实就是计算每个cell的frame和其它相关属性. 二.在网上看了好多自定义的layout 但是没有多 ...
- day 42 02--CSS的继承性和层叠性
02--CSS的继承性和层叠性 本节目录 一 继承性 二 层叠性 三 层叠性权重相同处理 一 继承性 css有两大特性:继承性和层叠性 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点 ...
- 关于不同数据库的连接配置(MySql和Oracle)
mysql: driverClass=com.mysql.jdbc.Driver #在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8,插入数据库防止中文乱码 ur ...