原生JS封装时间运动函数
/*讲时间运动之前先给大家复习一下运动函数
通常大家都会写运动框架,一个定时器(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封装时间运动函数的更多相关文章
- 使用原生JS封装一个动画函数
最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...
- 原生JS封装animate运动框架
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- 原生JS封装创建多级菜单函数
手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- 用原生js封装轮播图
原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 原生JS封装ajax方法
http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...
- 基于原生JS封装数组原型上的sort方法
基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...
- 移动端lCalendar纯原生js日期时间选择器
网上找过很多的移动端基于zepto或jquery的日期选择器,在实际产品中也用过一两种,觉得都不太尽如人意,后来果断选择了H5自己的日期input表单,觉得还可以,至少不用引用第三方插件了,性能也不错 ...
随机推荐
- Cannot find class: BaseResultMap
版权声明:本文为博主原创文章,转载请注明出处. model对应的mapping中将resultType改成resultMap即可. 什么是相应的model的xml配置文件呢? 可以理解为: 一直都可以 ...
- 设计模式——装饰器模式(C++实现)
#include <iostream> #include <string> using namespace std; class Component { public: ; } ...
- Linux乱码问题解决
语言设置常用命令 # echo $LANG # locale # LANG=zh_CN.UTF-8 # LANG=en Centos6中文语言包的设置 安装CentOS时选择了中文,但在终端不能显 ...
- python作业02
1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=['alex', 'eric', 'rain'] li = ['alex', 'eric', 'rain'] v = "_& ...
- Explain
explain关键字 explain关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.explain 可以帮助我们分析 sele ...
- Python十题(第2课)
一.天天向上的力量 C 一年365天,以第1天的能力值为基数,记为1.0.当好好学习时,能力值相比前一天提高N‰:当没有学习时,由于遗忘等原因能力值相比前一天下降N‰.每天努力或放任,一年下来的能力值 ...
- 一、Python安装与Pycharm使用入门
一.安装Python 1.Linux下安装 一般系统默认已安装2.6.6版本,升级成2.7版本, 但 2.6 不能删除,因为系统对它有依赖,epel源里最新的也是2.6版本,所以以源代码的方式安装2. ...
- python(字符串操作)
一.字符串的局部替换 python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'我把a字符串里的word替换为py ...
- 如何测试一个WEB的输入框?
WEB输入框是B/S架构系统中页面使用非常频繁的控件,比如我们登录一个网站,输入 用户名和密码的控件都是输入框,比如使用百度搜索,在输入搜索内容的控件也是输入框,比如网购一个物品,我们需要输入购买的数 ...
- IDEA2017注册码
1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...