弹性运动——学习笔记
来源:互联网 发布:const javascript 编辑:程序博客网 时间:2024/05/01 01:14
运动在js中,只需要开了个定时器,并且不断的改变对象的left和top值就可以了。当然,对象必须是相对定位的元素。js代码如下,例1:
<pre class="javascript" name="code">window.onload=function(){var oDiv=document.getElementById('div');var oBtn=document.getElementById('btn');var left=0;oBtn.onclick=function(){setInterval(function(){left+=5;oDiv.style.left=left+'px';},30)};};
在上例中可以发现对象每隔30毫秒就改变一下自身的left值,+5的匀速增值下去。我们可以设置一个变量做为速度来代替5,代码如下,例2:
window.onload=function(){var oDiv=document.getElementById('div');var oBtn=document.getElementById('btn');var left=0; var iSpeed=5;oBtn.onclick=function(){setInterval(function(){left+=iSpeed;oDiv.style.left=left+'px';},30)};};
在运动过程中,距离和位置决定运动的轨迹,速度决定物体运动的快慢。在上面代码的基本上,制作一个left值在0到300之间的来回运动效果。代码如下,例3:
window.onload=function(){var oDiv=document.getElementById('div');var oBtn=document.getElementById('btn');var left=0;var iSpeed=0;oBtn.onclick=function(){setInterval(function(){if(left<300){iSpeed++;}else{iSpeed--;}left+=iSpeed;oDiv.style.left=left+'px';//document.title=iSpeed;},30)};};
从代码上可以看出,对象在0到300之间匀速运动。 怎么就能让对象慢慢的停下来呢,只有当速度越来越小,只到为零时,对象就停下来了。这就是所谓的摩擦力。代码如下,例4:
window.onload=function(){var oDiv=document.getElementById('div');var oBtn=document.getElementById('btn');//var left=0;var iSpeed=20;oBtn.onclick=function(){setInterval(function(){iSpeed*=0.95;oDiv.style.left=oDiv.offsetLeft+iSpeed+'px';},30)}};
把例3改造一下,让对象燥起来,代码如下,例5:
window.onload=function(){var oDiv=document.getElementById('div');var oBtn=document.getElementById('btn');var left=0;var iSpeed=0;oBtn.onclick=function(){setInterval(function(){if(left<300){iSpeed+=300-left;}else{iSpeed-=left-300;}left+=iSpeed;oDiv.style.left=left+'px';//alert(iSpeed+',left:'+left);},30)};};
显然这样不太合适,iSpeed的值分别是0和300,改造一下,让它们的值分别除上一个整数,速度就会有所变化。
//...iSpeed+=(300-left)/5;//...iSpeen-=(left-300)/5; //对上行进行数学运算改造下,同时加负号变为:iSpeed+=(300-left)/5;发现和第一行一样,所以这里是不需要if语句的。
现在把代码再整合一下,如下:
window.onload=function(){var oDiv=document.getElementById('div');var oBtn=document.getElementById('btn');var left=0;var iSpeed=0;var timer=null;oBtn.onclick=function(){timer=setInterval(function(){iSpeed+=(300-left)/5;iSpeed*=0.7left+=iSpeed;oDiv.style.left=left+'px';//alert('速度:'+iSpeed+',左边:'+left);if(Math.round(iSpeed)==0 && Math.round(left)==300){clearInterval(timer);}},30)};};弹性运动的功能到这就要结束了。再来做个代码整理吧。做一个小小闭包吧。
;(function(global){var left=0;var iSpeed=0;var timer=null;global.moveSpring=function(obj,iTarget){clearInterval(timer);timer=setInterval(function(){iSpeed+=(iTarget-left)/5;iSpeed*=0.7;left+=iSpeed;obj.style.left=Math.round(left)+'px';if(Math.round(iSpeed)==0 && Math.round(left)==iTarget){clearInterval(timer);}},30)}})(window)(function(global){....})(window)这里是把window当做参数传进闭包内,有global来接受参数,然后给global添加一个属性方法。也就是给window添加一个属性方法,这样的好处是闭包内凡是用到window的地方都不用再向外层查找了;只在进入闭包时找一次,内部就都可以用到了。提高效率。
0 0
- 弹性运动——学习笔记
- 介绍几种运动——匀速、加速、缓冲、弹性
- 弹性运动
- js运动-弹性运动
- 弹性力学学习 笔记
- 弹性布局学习笔记
- 弹性布局学习笔记
- 弹性域学习——说明性弹性域
- 弹性域学习——键弹性域
- 弹性域学习——键弹性域
- shader学习笔记——运动模糊(motion blur)
- 智能社JavaScript学习笔记——JS运动基础
- Unity3d学习笔记3——基本运动与旋转
- 缓冲运动与弹性运动
- 运动action学习笔记
- Flex(弹性布局)学习笔记。
- 运动-弹性菜单
- 拖拽+弹性运动
- Android 自定义Activity切换动画效果的常用方法
- 湖南广电台长吕焕斌:湖南电视台的新媒体发展战略
- pdf.js – 利用HTML5技术读取PDF文件
- css3中div的水平,垂直居中
- sql的分组排序
- 弹性运动——学习笔记
- android 开源项目集锦 (转载)
- 分享 C++命名空间的解释 http://blog.chinaunix.net/uid-26874138-id-3215266.html
- HMM模型
- Redis总结笔记(一):安装和常用命令
- JSP中的EL表达式详细介绍
- 解决pdflatex文档目录乱码的解决方法
- 第二讲:我的第一个驱动
- 类型转换二:Type casting