原生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 相关文章推荐
基于jQuery的弹出框插件
Mar 18 Javascript
JS 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 Javascript
基于Css3和JQuery实现打字机效果
Aug 11 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
layui下拉列表select实现可输入查找的方法
Sep 28 Javascript
JS数组转字符串实现方法解析
Sep 04 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 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 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
destoon各类调用汇总
2014/06/20 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python简单实现旋转图片的方法
2015/05/30 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Numpy掩码式数组详解
2018/04/17 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Python爬取网页信息的示例
2020/09/24 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
办公室文秘岗位职责
2013/11/15 职场文书
超市中秋节活动方案
2014/02/12 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
python爬取豆瓣电影TOP250数据
2021/05/23 Python
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android