本文系原创文章,转载请注明出处(本人qq空间或博客园或IT EYE的相关文章链接均可)。
相信很多朋友都用过jquery的缓动效果javascript,但对于它的实现毫无头绪,而且缓动函数在各类UI中都很实用,若不清楚其原理,则每一次用其他语言时都需要寻找相应的插件方可,这无疑大大制约了开发人员的创新需求。本文章主要讲解缓动函数的基本原理以及用javascript在html5的canvas中的具体实现。
看本文章之前可以先了解以下概念
加速度的概念:高中物理的运动学中很重要的一个部分,简而言之就是描述物体运动速度变化率的单位量。
一重积分:大学高等数学或数学分析中最基础、最简单的积分学概念,若对积分学不太了解,可以事先度娘或谷哥一下相关原理。
抛物线方程:
什么是缓动?
缓动效果在现实生活中应用很多,如PPT的图片或文字的淡入淡出,图片或文字的飞入、飞出等效果,又如mac系统的屏保大量运用了缓动技术。 这样的呈现效果给人一种和谐、平滑的美感,使得界面的呈现不显得突兀,可以大大优化用户体验。
缓动函数:
所谓的缓动函数实际上是描述物体运动过程中速度变化的物理量。更具体而言,缓动实际上就是一个物体
从地点A运动到地点B的一段位移中,该物体的运动速度遵循某个速度曲线函数。
如:该速度遵循线性曲线时为加速度不变的加速运动(或减速运动),其缓动函数可以描述为:
如:该速度遵循线性曲线时为加速度不变的加速运动(或减速运动),其缓动函数可以描述为:
Velocity = a*timer +k ,
其中,Velocity和Timer为变量,a和k为常量。当a的值为0时,说明物体的运动速度与运动时间无关,即此时速度运动曲线褪变为匀速直线运动。
又如:物体速度遵循抛物线方程,即此时的缓动函数为: ,
又如:物体速度遵循抛物线方程,即此时的缓动函数为: ,
其中a和k为常量,Time为变量。在本文章的程序中,采取的是这种缓动函数,
以下我们通过函数图像来解析缓动曲线(由于本人亲手操刀画的图,有点挫,大家将就着看):
其中横坐标为时间,纵坐标为当前时刻的速度, 该运动曲线的意思是 在时刻,其初速度为,
当运动到时刻时,速度降为0,如果此时该物体还要运动,那么其运行速度将会从0开始上升,如图中的右半边。
曲线图以及抛物线公式我们都得到了,但是关于a 和k这两个常数如何取值呢?如果随便取值肯定不行,
曲线图以及抛物线公式我们都得到了,但是关于a 和k这两个常数如何取值呢?如果随便取值肯定不行,
因为他们二者之间需要满足一定的依赖关系。于是乎,接下来就变成了纯粹的数学题了,热爱数学的朋友请看题,此题如下:
已知一张图片从屏幕的右边运动到屏幕的左边,总的路程为s,过程经历T秒,物体的初始速度为,末速度为,物体速度变化的曲线方程为,且该方程仅有一个实根,问此时常量a和k的取值为多少?其中k>0
解:
由题意可知:
路程S,总共经历的时间T,初速度,末速度,其中末速度在本示例中的值为0像素/秒 ,但为了兼容各类情况,此处末速度为已知条件,且用代替。
如上图 封闭弧线O的面积即该物体从 0时刻到T的路程总值,因此由一重积分公式可得:
其中 (即在时刻t的速度为v)
解出这个积分得:
-------方程1
又在点T时,也就是时刻,速度为
则由曲线方程有:
此处demo中=0,即此时有=k(关于不等于0的情况,请大家自己去计算方程,此处特殊情况下方程的解很容易算出)
将k的值带入方程1 , 所以 a的关系式为:
于是乎我们便通过T 和 S 就确定了缓动函数的方程式,接下来我们可以通过这个函数关系式得到任意时刻的物体运动速度。
至此,核心算法部分已经完成,接下来便是在html5的canvas中将算法写上去,关于缓动的demo我会在最后贴上下载地址,可通过百度网盘下载。
已知一张图片从屏幕的右边运动到屏幕的左边,总的路程为s,过程经历T秒,物体的初始速度为,末速度为,物体速度变化的曲线方程为,且该方程仅有一个实根,问此时常量a和k的取值为多少?其中k>0
解:
由题意可知:
路程S,总共经历的时间T,初速度,末速度,其中末速度在本示例中的值为0像素/秒 ,但为了兼容各类情况,此处末速度为已知条件,且用代替。
如上图 封闭弧线O的面积即该物体从 0时刻到T的路程总值,因此由一重积分公式可得:
其中 (即在时刻t的速度为v)
解出这个积分得:
-------方程1
又在点T时,也就是时刻,速度为
则由曲线方程有:
此处demo中=0,即此时有=k(关于不等于0的情况,请大家自己去计算方程,此处特殊情况下方程的解很容易算出)
将k的值带入方程1 , 所以 a的关系式为:
于是乎我们便通过T 和 S 就确定了缓动函数的方程式,接下来我们可以通过这个函数关系式得到任意时刻的物体运动速度。
至此,核心算法部分已经完成,接下来便是在html5的canvas中将算法写上去,关于缓动的demo我会在最后贴上下载地址,可通过百度网盘下载。
划横红色线条的两个文件为图片缓动效果的demo需要用到的文件
右边的代码中, this.doInterval 是animation_js.js文件中 AnimatTimer对象的一个方法,该方法主要作用是执行帧绘制。大家都知道我们之所以能看到动画是因为图片一张一张连续播放,其中连续播放频率越高,绘制的动画越流畅。 代码中speed 就是帧的播放速率,此处我取值为10。
SetValue函数是在画布canvas中绘制出图片,同时擦出画布上留下的图片痕迹,如果大家不明白这个痕迹,可以尝试注释掉setValue代码中的context.clearRect(start+1,y,height,width); 方法即可理解。
函数 setInterval中的内容每隔speed毫秒, 也就是10毫秒执行一次, 那么时间t的叠加时间则为10ms,,注意,由于方便度量,本程序中的时间在最后均换算为秒, 1秒=1000毫秒, duration是我希望这个动画的持续时间 ,start 和end 为该图片或物体的起止x坐标的位置信息。
效果如图,一张图片从右边,遵循抛物线的缓动函数运动到终点的过程,也可打自行下载demo,无需任何服务器,可在IE9及以上 或chrome firefox等支持html5的浏览器中执行,未测试过360等浏览器。
以上只是缓动函数的demo,其实我的最终目的是实现苹果MAC系统的屏保特效,我的文件目录effect.html是实现了框图位置信息的demo,该图片板块区域可以改变一个参数来进行板块缩放,且各个板块位置以及板块上的图片均是随机排列的:
文件大概64M 但是代码很小,也就1M左右, 由于图片是高清,所以图片很大,如果大家不需要图片的,可以不下载img文件夹中的东西。
相关推荐
在本项目中,"原生js html5 canvas 3D云动画效果" 是一个利用JavaScript、HTML5的Canvas API和3D技术实现的创新性视觉效果。Canvas是HTML5的一个重要组成部分,它允许开发者在网页上进行动态图形绘制,而无需借助...
这个“html5——canvas”课程很可能是为了教授如何利用Canvas API来创建一个倒计时钟的实例。在这个教程中,我们将深入探讨HTML5 Canvas以及如何用它来实现倒计时功能。 Canvas是一个基于矢量图形的二维画布,通过...
在这个"HTML5 canvas仿屏保动态管道"项目中,我们利用canvas元素来模仿经典的Windows屏保——动态管道效果。 首先,让我们了解HTML5 canvas的基础。canvas是一个HTML元素,它提供了一个画布,可以在这个画布上通过...
在这个“html5 canvas多边形分割图片动画”项目中,我们探讨了如何利用Canvas API来实现对图片的切割,并通过CSS和JavaScript动画库将这些切割的图像部分组合成动态效果。 首先,Canvas API提供了`drawImage()`方法...
HTML5的Canvas元素是网页开发中的一个强大工具,它允许开发者在网页上绘制图形,创建动态视觉效果。在这个实例中,我们将深入探讨如何利用Canvas来制作一个太阳、地球和月球三球联动的动画,这涉及到JavaScript编程...
在实际应用中,这样的效果可以提高网站的吸引力和互动性。粒子动画的实现可能包括以下几个步骤: 1. 创建canvas元素并获取其2D渲染上下文。 2. 定义粒子类,包含粒子的各种属性。 3. 实现粒子的生成、更新和销毁逻辑...
在这个场景中,我们将深入探讨如何使用HTML5的`canvas`来制作经典的游戏——2048。 2048是一款基于数字的益智游戏,玩家需要通过上下左右滑动屏幕,将相同的数字合并,最终达到生成2048这个数字的目标。这个游戏的...
在这个"HTML5基于Canvas实现的火焰喷射动画效果源码"项目中,我们聚焦于HTML5的一个核心特性——Canvas,这是一个用于绘制2D图形的API,允许开发者在网页上动态生成图像。 Canvas通过JavaScript进行编程,它提供了...
HTML2canvas是一个JavaScript库,它的主要功能是在浏览器环境中将HTML内容转换为Canvas图像,从而能够进一步将这些图像...开发者需要理解其工作原理,合理处理滚动页面和兼容性问题,才能在实际项目中发挥出它的价值。
在这个“HTML5 Canvas炫酷图片爆炸飞散特效”项目中,我们看到的是利用HTML5 Canvas和JavaScript实现的一种创新视觉效果。这个特效使得用户在点击图片时,图片会模拟出类似玻璃破碎后碎片飞散的效果,为网页增添了一...
在本文中,我们将深入探讨HTML5的Canvas元素,特别是如何利用它来实现“爆炸粒子”和“渐入动画效果”的实际案例。Canvas是HTML5的一个重要特性,它为Web开发者提供了一个可以在网页上进行2D图形绘制的画布。 首先...
在这个项目中,我们关注的是如何利用HTML5的Canvas和JavaScript来创建一个音频频谱动画,展示音频播放时的实时频谱效果。 首先,`index.html`是网页的主文件,它包含了页面的基本结构,以及引用的外部JavaScript...
这个“HTML5 canvas商品图片360度旋转浏览效果.zip”压缩包显然包含了一个实现商品图片全方位展示的示例。在现代电商网站中,这种功能能够提升用户体验,使用户能更全面地查看商品细节。 首先,我们要理解HTML5的...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式用户体验。"html5+canvas开门效果"是指利用HTML5的Canvas元素实现一种类似门开启或关闭的动画效果。这个效果通常...
在本示例中,"html5 canvas首屏自适应背景动画循环效果代码" 提到了几个关键点,我们将逐一深入探讨。 1. HTML5 Canvas 基础: HTML5 Canvas 是一个基于矢量图形的画布元素,通过JavaScript来控制其内容的绘制。在...
"HTML5 Canvas三维立体的旋转物体动画"这个主题涉及到的是利用Canvas API来实现三维空间中的物体旋转效果,这在游戏、数据可视化、用户界面设计等领域有广泛应用。 Canvas API提供了基础的绘图命令,如画线、填充...
描述中提到的“图片3D倒影效果”是通过Canvas API实现的一种视觉特效。在3D空间中,物体通常会有其在平面上的投影,这种投影在视觉上产生了倒影的错觉,使得图像看起来更具有立体感。这个源码通过JavaScript编程实现...
在这个“HTML5 Canvas 图片粒子沙漏动画”项目中,我们主要探讨的是如何利用Canvas API来创建一种独特的视觉效果——粒子沙漏动画。 首先,Canvas API是HTML5的一个核心特性,它提供了一个2D渲染上下文,开发者可以...
在这个特定的案例中,“html5 canvas图片水波倒影动画特效”是一个利用Canvas API实现的视觉效果,它展示了如何将静态图片转化为具有动态水波和倒影效果的交互式元素。 首先,我们需要理解Canvas的基本使用方法。...
在这个“Html5 Canvas 图片开门效果”的实例中,我们将深入探讨如何利用`drawImage()`实现一个动态的图片开门动画。 1. **HTML5 Canvas基本概念** - HTML5 Canvas是一个基于矢量的图形绘制区域,通过JavaScript来...