原生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 相关文章推荐
js String对象中常用方法小结(字符串操作)
Jan 27 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 Javascript
jQuery弹出(alert)select选择的值
Apr 21 Javascript
Javascript中克隆一个数组的实现代码
Dec 06 Javascript
Javascript获取表单名称(name)的方法
Apr 02 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
Koa代理Http请求的示例代码
Oct 10 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
Vue export import 导入导出的多种方式与区别介绍
Feb 12 Javascript
vue中的计算属性和侦听属性
Nov 06 Javascript
在vue项目中封装echarts的步骤
Dec 25 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
第四节--构造函数和析构函数
2006/11/16 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php实现留言板功能
2017/03/05 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Django添加feeds功能的示例
2018/08/07 Python
python机器学习之神经网络实现
2018/10/13 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Django 框架模型操作入门教程
2019/11/05 Python
python os.rename实例用法详解
2020/12/06 Python
商学院大学生求职的自我评价
2014/03/12 职场文书
社区科普工作方案
2014/06/03 职场文书
实施意见格式范本
2015/06/05 职场文书
公司安全管理制度范本
2015/08/05 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
ubuntu下常用apt命令介绍
2022/06/05 Servers