原生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 相关文章推荐
javascript Keycode对照表
Oct 24 Javascript
ExtJs使用IFrame的实现代码
Mar 24 Javascript
jquery.validate分组验证代码
Mar 17 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 Javascript
不使用jquery实现js打字效果示例分享
Jan 19 Javascript
jquery动感漂浮导航菜单代码分享
Apr 15 Javascript
[js高手之路]原型式继承与寄生式继承详解
Aug 28 Javascript
微信小程序实现吸顶特效
Jan 08 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
详解JavaScript之ES5的继承
Jul 08 Javascript
详解Vue slot插槽
Nov 20 Vue.js
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使之能同时支持GIF和JPEG
2006/10/09 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
javascript实现表单验证
2016/01/29 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python中内建模块collections如何使用
2020/05/27 Python
python使用建议与技巧分享(一)
2020/08/17 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
三星印度官网:Samsung印度
2019/08/03 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
怎样写好自我鉴定
2013/12/04 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
读书活动实施方案
2014/03/10 职场文书
家长对学生的评语
2014/04/18 职场文书
检讨书范文1000字
2015/01/28 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL