弹性运动——学习笔记
2016-02-22 14:26
393 查看
运动在js中,只需要开了个定时器,并且不断的改变对象的left和top值就可以了。当然,对象必须是相对定位的元素。js代码如下,例1:
在上例中可以发现对象每隔30毫秒就改变一下自身的left值,+5的匀速增值下去。我们可以设置一个变量做为速度来代替5,代码如下,例2:
在运动过程中,距离和位置决定运动的轨迹,速度决定物体运动的快慢。在上面代码的基本上,制作一个left值在0到300之间的来回运动效果。代码如下,例3:
从代码上可以看出,对象在0到300之间匀速运动。 怎么就能让对象慢慢的停下来呢,只有当速度越来越小,只到为零时,对象就停下来了。这就是所谓的摩擦力。代码如下,例4:
把例3改造一下,让对象燥起来,代码如下,例5:
显然这样不太合适,iSpeed的值分别是0和300,改造一下,让它们的值分别除上一个整数,速度就会有所变化。
现在把代码再整合一下,如下:
<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.7 left+=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的地方都不用再向外层查找了;只在进入闭包时找一次,内部就都可以用到了。提高效率。
相关文章推荐
- SQL Plan Management
- git branch用法总结
- fatal error C1083: 无法打开预编译头文件: “*.pch”: No such file or directory
- mybatis自动生成类
- mac下面鼠标滚轮的方向和windows不一致,如何改变
- js 判断空格并去除空格
- Android中WebView无法后退和js注入漏洞的解决方案
- ios插件开发-theos环境搭建
- 暴力字符串查找
- 集训队专题(6)1007 Fire Net
- Android View体系(一)视图坐标系
- [转]Null value was assigned to a property of primitive type setter of"原因及解决方法
- Xamarin.Forms教程下载安装Xamarin.iOS
- JavaScript function函数种类详解
- (十)观察者模式
- PermGenspace错误解决方法java.lang.OutOfMemoryError:Perm
- iOS学习道路上的一些良师益友
- ListView控件属性和方法
- SQL去掉某个字段重复记录
- Emacs golang 配置