JS动画理论
动画(Animation)
动画意味着随着时间而变化,尤其指视觉上的变化,包括位置、形态等的变化。运动基本上表现为物体随时间,发生位置上的变化;形态基本表现为大小、颜色、透明度、形状等随时间的变化。
图像以每秒24帧的速度播放,最容易看成运动的图像。比这个速度再慢些,会由于停顿时间较长,人眼会感觉影像不连贯。人眼似乎不能分辨比这个帧频再快的速度,理论上讲,帧频再快也不会使动画变得更真实,虽然快速的帧频,看上去会更平滑。
三角学(Trigonometry)
三角学是研究三角形与其边和角关系的学科。一个三角形有三条边和三个角,这些边和角存在着一些特殊的关系。比如,增大其中任何一个角,那么该角对应的边就会增长,假设其它两条边长度不,其它两个角会变小。我们在动画中,经常遇到的是直角三角形模型,其中一个角为90度。

勾股定理
直角三角形两直角边长的平方和等于斜边长的平方。由上图可推出: b2 + c2 = a2
斜边公式
坐标系(Coordinate System)
基于HTML文档的JS动画,文档左上角坐标为(0,0),X值从左向右不断增大,Y值从上到下不断增大。

旋转(Rotation)

波形(waveform)
正弦曲线:y=sin(x)

余弦曲线:y=cos(x)

创建波形:
value = center + Math.sin(angle)*range;
angle += speed;
创建圆形:
posx = centerX + Math.cos(angle)*radius;
posy = centerY + Math.sin(angle)*radius;
angle += speed;
创建椭圆:
posx = centerX + Math.cos(angle)*radiusX;
posy = centerY + Math.sin(angle)*radiusY;
angle += speed;
两点间距离:
dx = x2 - x1;
dy = y1 - y2;
dist = Math.sqrt(dx*dx + dy*dy);
加速度(accelerate)
加速度就是使速度加快,减速度就是使速度减慢。
speed += a*speed;
角速度转换为想x,y速度向量
vx = speed * Math.cos(angle);
vy = speed * Math.sin(angle);
角加速度转换为 x,y加速度
ax = force * Math.cos(angle);
ay = force * Math.sin(angle);
速度转换:
vx += ax;
vy += ay;
边界(edge)
边界是一个矩形,就是物体运动不能超过这个矩形范围,这个范围我们一般设为浏览器可视范围。
if(posx - width > right){
posx = left - width;
}else if(posx < left){
posx = left;
}
if(posy - height > bottom){
posy = bottom - height;
}else if(posy < top){
posy = top;
}
反弹(rebound)
反弹即改变物体运动的运动方向为反方向。
摩擦力(Friction)
摩擦力是与速度方向相反的力,从速度中减去这个值。如果摩擦力大于速度,速度就变为0。常用的做法是在速度上乘以0.9或0.8,速度会无限接近零,但永远不会等于0 。这种做法的好处是速度永远不会变为负数,不需要进行判断。
speed = Math.sqrt(vx*vx + vy*vy);
angle = Math.atan2(vy, vx);
if(speed > friction){
speed -= friction;
}else {
speed = 0;
}
vx = Math.cos(angle) * speed;
vy = Math.sin(angle) * speed;
或者
vx *= friction;
vy *= friction;
缓动(easing)
缓动运动,速度与距离成反比,物体离目标越远,物体速度越快。当物体与目标点非常接近时,物体几乎停止运动。
缓动速查: http://easings.net/zh-cn
弹性(springing)
弹性运动,加速度与距离成正比。物体离目标很远,再用上加速度,会使物体移动速度越来越快。当物体接近目标是,加速度减小。物体飞过目标点,再由反向加速度将它拉回来,最终,用摩擦力使其静止。
JS动画理论的更多相关文章
- 【06-23】js动画学习笔记01
<html> <head> <style> * { margin:0; padding:0; } #div1{ width:200px; height:200px; ...
- css动画与js动画的区别
CSS动画 优点: (1)浏览器可以对动画进行优化. 1. 浏览器使用与 requestAnimationFrame 类似的机制,requestAnimationFrame比起setTimeout ...
- CSS VS JS动画,哪个更快[译]
英文原文:https://davidwalsh.name/css-js-animation 原作者Julian Shapiro是Velocity.js的作者,Velocity.js是一个高效易用的js ...
- css与 js动画 优缺点比较
我们经常面临一个抉择:到底使用JavaScript还是CSS动画,下面做一下对比 JS动画 缺点:(1)JavaScript在浏览器的主线程中运行,而主线程中还有其它需要运行的JavaScript脚本 ...
- [学习笔记]js动画实现方法,作用域,闭包
一,js动画基本都是依靠setInterval和setTimeout来实现 1,setInterval是间隔执行,过一段时间执行一次代码 setInterval(function(){},500);即 ...
- css3动画与js动画的一些理解
http://zencode.in/19.CSS-vs-JS%E5%8A%A8%E7%94%BB%EF%BC%9A%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.html 首 ...
- js动画(四)
终于到了最后了,这里要告一段落了,整了个js运动框架,咳咳咳,好冷 啊啊啊啊啊啊,这天气.妈的,工资怎么也不发,啊,说好的 人与人之间的信任呢?哎,气诶,不到150字啊,又是这个梗..怎么办?说些什么 ...
- css动画特效与js动画特效(一)------2017-03-24
1.用css做动画效果: 放鼠标才会发生 利用hover <head> <style> #aa{ background-color: red; width: 100px; he ...
- JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能
摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...
随机推荐
- Google辅助类软件
本博文的主要内容有 .Google辅助类软件的介绍 .重点首推! Google软件精选管理器 1.Google辅助类软件的介绍 1. Google软件精选管理器的下载和安装使用 2. Googl ...
- hdoj 2717 Catch That Cow【bfs】
Catch That Cow Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 408. Valid Word Abbreviation
感冒之后 睡了2天觉 现在痊愈了 重启刷题进程.. Google的题,E难度.. 比较的方法很多,应该是为后面的题铺垫的. 题不难,做对不容易,edge cases很多,修修改改好多次,写完发现是一坨 ...
- Oracle RAC中的投票算法
RAC集群中有三台机器,A,B,C A,B,C都会有3票,假设这是A的心跳线出现问题,整个RAC集群就划分为两个paritition, 一个是只有A的partition,一个是B,C组成的partit ...
- 程序员取悦女朋友的正确姿势---Tips(iOS美容篇)
前言 女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片.app独一无二,虽简亦繁. JH定律:魔镜:最漂亮的女人是你老婆魔镜: ...
- 【设计模式 - 20】之状态模式(State)
1 模式简介 状态模式的定义: 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.这个模式将状态封装成独立的类,并将动作委托到代表当前状态的类的对象. 状态模式的优点 ...
- 基于XMPP实现的Openfire的配置安装+Android客户端的实现
最近在整理一些这方面的资料,闲话少说,咱还是直奔主题吧 :) 一.基于xmpp实现的openfire的配置安装 1. 下载最新的openfire安装文件 官方下载站点: http://www.igni ...
- HTML及简单标签介绍
什么是HTML: HTML 语言是一种超文本的标记语言,简单来讲就是构建一套标记符号和语法规则,将所要显示出来的文字.图象.声音等要素按照一定的标准要求排放,形成一定的标题.段落.列表等单元. 标签 ...
- [转] Android学习系列(29)--App调试的几个命令实践
在Android的应用开发中,我们会用到各种代码调试:其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等,下面 ...
- JAVA正则忽略大小写
java正则表达式: (?i)abc 表示abc都忽略大小写 a(?i)bc 表示bc忽略大小写 a((?i)b)c 表示只有b忽略大小写 也可以用Pattern.compile(re ...