原生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 相关文章推荐
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
Oct 24 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
Jquery修改页面标题title其它JS失效的解决方法
Oct 31 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 Javascript
JS获取input[file]的值并显示在页面的实现方法
Mar 09 Javascript
Vue+webpack实现懒加载过程解析
Feb 17 Javascript
JS快速实现简单计算器
Apr 08 Javascript
Vue computed 计算属性代码实例
Apr 22 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
PHP7 新增常量
2021/03/09 PHP
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
python操作excel让工作自动化
2019/08/09 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
德购商城:德国进口直邮商城
2017/06/13 全球购物
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
请解释在new与override的区别
2012/10/29 面试题
市场营销方案范文
2014/03/11 职场文书
公司年底活动方案
2014/08/17 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
保送生自荐信
2015/03/06 职场文书
初中物理教学反思
2016/02/19 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS