/*讲时间运动之前先给大家复习一下运动函数

通常大家都会写运动框架,一个定时器(Timer),一个步长(step 就是每次运动的距离),一个当前位置(current)一个目标位置(target),然后判断一下当前位置加上步长和目标位置的关系就可以了

就可以了。

简写就是这样呗*/

var obj=document.getElementById("div");

/*想要获取元素当前的位置,是要获取CSS的,obj.style.left="25"px;这样是OK的,没有问题,

但是如果你这么写 var left=obj.style.left;是获取不到的,CSS的获取,需要用到方法*/

function getCSS(obj,attr){

/*window.getComputedStyle 兼容标准浏览器  谷歌 火狐 苹果浏览器

currentStyle 是兼容IE的*/

return window.getComputedStyle?getComputedStyle(obj)[attr]:obj.currentStyle[attr];

}

/*attr 是要改变的元素属性(left或者top);

step的正负决定运动方向*/

function move(obj,target,step,attr)

{

var timer=null,current=0;

clearInterval(timer);

timer=setInterval(function(){

current=parseFloat(getCSS(obj,attr));//去掉单位px

if((current+step-target)*step<0) //运动向下或者向上都满足这个条件

{

obj.style[attr]=current+step+"px";

}

else{

obj.style[attr]=target+"px";

clearInterval(timer);

}

},1000/60);

}

时间运动函数

function getCSS(obj,attr){
return window.getComputedStyle?window.getComputedStyle(obj)[attr]:obj.currentStyle[attr];
}

function $(id){return document.getElementById(id);}
/*时间运动主要依赖一个公式 变化的时间/总时间=变化的位移/总位移
当比值为1的时候,运动就结束了呗!
变化的时间=当前时间-初始的时间
变化的位置=当前位置-初始位置
每次移动的位移=(变化的时间/总时间)*总位移
*/

function move(obj,attr,time,target)
{
var current=parseFloat(getCSS(obj,attr));//获取当前位置
var startTime=new Date();//获取当前时间
var offset=target-current;//总偏移量,总位移
var changeTime=0;//变化的时间
obj.timer=null;
clearInterval(obj.timer);//使用定时器之前清除一下,只是一个良好的习惯,避免多次产生定时器

obj.timer=setInterval(function(){
changeTime=(new Date()-startTime);//变化的时间
var t=changeTime/time;//变化的时间/总时间
if(t>=1){

obj.style[attr]=target+"px";
clearInterval(obj.timer);

}

else{
obj.style[attr]=current+t*offset+"px";

}
},1000/60);

}

经过测试都是没问题的

原生JS封装时间运动函数的更多相关文章

  1. 使用原生JS封装一个动画函数

    最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...

  2. 原生JS封装animate运动框架

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  3. 原生JS封装创建多级菜单函数

    手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...

  4. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  5. 用原生js封装轮播图

    原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...

  6. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  7. 原生JS封装ajax方法

    http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...

  8. 基于原生JS封装数组原型上的sort方法

    基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...

  9. 移动端lCalendar纯原生js日期时间选择器

    网上找过很多的移动端基于zepto或jquery的日期选择器,在实际产品中也用过一两种,觉得都不太尽如人意,后来果断选择了H5自己的日期input表单,觉得还可以,至少不用引用第三方插件了,性能也不错 ...

随机推荐

  1. Java基于自定义注解的面向切面的实现

    目的:实现在任何想要切的地方添加一个注解就能实现面向切面编程 自定义注解类 @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retentio ...

  2. JAVA的18条BASE

    关于Java的基础知识,实践证明学习OO,最终领悟“父类控制流程,子类实现具体的业务逻辑”的OO思想,需要的不是智商而是基础,也就是说,基础越好越快领悟,所以请每位S1学习Java的学员请牢记以下Ja ...

  3. Centos网口流量实时监控

    iptraf方式 [root@kazihuo ~]# yum -y install iptraf [root@kazihuo ~]# iptraf-ng-ng 开启服务日志: 进入细节监控后提示日志路 ...

  4. 二分查找(Java实现)

    二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param r ...

  5. Xss问题解决方案

    xss跨站脚本攻击问题最主要是呈现在html页面的脚本被执行导致的结果,可分为两个方便作屏蔽 后台屏蔽 在前端上传的各个参数后,对其进行转义后再保存至数据库,属于暴力式转义,一般不建议.下面是写的例子 ...

  6. Javscript的函数链式调用基础篇

    我们都很熟悉jQuery了,只能jQuery中一种非常牛逼的写法叫链式操作: $('#div').css('background','#ccc').removeClass('box').stop(). ...

  7. 神奇的RAC宏

    先说说RAC中必须要知道的宏 RAC(TARGET, [KEYPATH, [NIL_VALUE]])   使用: RAC(self.outputLabel, text) = self.inputTex ...

  8. 【Linux】 文本比较工具 diff和cmp

    Linux 文本比较工具 ■ diff命令 diff用于逐行比较两个文本文件,列出其不同之处 diff [option] <file1> <file2> file1和file2 ...

  9. C语言中数据类型的取值范围

    C语言中数据类型的取值范围如下:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 ...

  10. Python打包工具setuptools的使用

    将我们写的Python程序发布成包后,可以使其能够安装使用. 在项目上测试的时候,某些情况下,可以将Python打包,然后上传到测试服务器,安装测试. setuptools是常用的打包工具. 一个简单 ...