原生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 字符串连接的性能问题(多浏览器)
Nov 18 Javascript
javascript 匿名函数的理解(透彻版)
Jan 28 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
javascript函数作用域学习示例(js作用域)
Jan 13 Javascript
js实现鼠标悬浮给图片加边框的方法
Jan 30 Javascript
全面解析Bootstrap表单使用方法(表单控件)
Nov 24 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 jQuery
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
Jun 05 jQuery
Vue CLI3 如何支持less的方法示例
Aug 29 Javascript
JavaScript实现单英文金山打字通
Jul 24 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 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
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
php随机显示图片的简单示例
2014/02/15 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
vue强制刷新组件的方法示例
2019/02/28 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python socket 超时设置 errno 10054
2014/07/01 Python
python3序列化与反序列化用法实例
2015/05/26 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
python实现画循环圆
2019/11/23 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
保安员岗位职责
2013/11/17 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
党员政治学习材料
2014/05/14 职场文书
火锅店的活动方案
2014/08/15 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
如何写通讯稿
2015/07/22 职场文书
python对文档中元素删除,替换操作
2022/04/02 Python
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers