原生js封装运动框架的示例讲解


Posted in Javascript onOctober 01, 2017

昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架.

正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装.

首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子

如下代码:

#div{
width: 100px;

height: 100px;

background: gold;

position: absolute;

left:0;

top:0;

opacity: 1;
}

然后我们就开始写js代码了,如下:

window.onload=function() {

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

var timer;

写一个函数,方便以后用的时候直接调用就好了,首先先传入几个参(要运动的对象,变动的属性,终点距离,运动总时间,回调函数)----今天的只是简单的封装一下,你也写可以传入一个json

 

function move(obj,name, target, dur,fn) {
// 总步数=总时间÷计时器设定的时间
var count = parseInt(dur / 30);
// 起始位置

var start = parseFloat(setStyle(obj,name));
// 总距离=传入的距离-起始距离

var dis = target - start;
// 每步运动的距离=总距离÷总步数

var spen = dis / count;
// 定义起始步数

var n = 0;

timer = setInterval(function () {

n++;
// 把当前运动的位置保存

var cur=start + n * spen;
// 判断属性是不是透明度,透明度不用加单位

if(name=='opacity'){


obj.style[name]=cur;
// 兼容IE低版本,IE的透明度是1到100


obj.style.filter='alpha('+cur*100+')';

}else {


obj.style[name] = start + n * spen + "px";

}
// 判断运动是否完成

if (n == count) {
// 完成后清除定时器,停止运动


clearInterval(timer);
// 判断用户是否传入回调函数


fn && fn();

};
 }, 30);
};

 然后自己随便写一些调用回调函数,测试一下:

oDiv.onclick=function(){

move(oDiv,"left",600,1000,function(){



move(oDiv,'top',400,1000,function(){




move(oDiv,"width",300,1000,function(){





move(oDiv,"opacity",0,1000);




});



});


});

};
// 获取非行间样式

function setStyle(obj,name){
// 考虑兼容性问题


if(obj.currentStyle){//不兼容火狐和谷歌



return obj.currentStyle[name];


}else{



return getComputedStyle(obj,false)[name];//不兼容IE


};

};
};

好了,今天就先封装到这里了,这只是简单的封装一下,明天我们会改进一下,比如参数太多、参数顺序不能乱的问题,还有多次点击计时器出现的Bug的问题,如果你有好的方法欢迎评论区留言,程序员之间就是要相互学习的,明天见,老铁们!

以上这篇原生js封装运动框架的示例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
又一个小巧的图片预加载类
May 05 Javascript
JavaScript QueryString解析类代码
Jan 17 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
Oct 10 Javascript
关于javascript模块加载技术的一些思考
Nov 28 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
PHP7新特性简述
Jun 11 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
vue自定义指令用法经典实例小结
Mar 16 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 #Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 #Javascript
vuejs使用递归组件实现树形目录的方法
Sep 30 #Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 #Javascript
js实现轮播图的两种方式(构造函数、面向对象)
Sep 30 #Javascript
React实践之Tree组件的使用方法
Sep 30 #Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 #Javascript
You might like
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Python with标签使用方法解析
2020/01/17 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
部队学习十八大感言
2014/01/11 职场文书
一年级家长会邀请函
2014/01/25 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
离婚协议书怎么写
2014/09/12 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
学校体育节班级口号
2015/12/25 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技