原生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 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
javascript 自定义事件初探
Aug 21 Javascript
js 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
Aug 29 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
Nov 20 Javascript
纯JS焦点图特效实例(可一个页面多用)
Dec 07 Javascript
防止重复发送 Ajax 请求
Feb 15 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
JavaScript惰性载入函数实例分析
Mar 27 Javascript
微信小程序 slot踩坑的解决
Apr 01 Javascript
使用vue实现各类弹出框组件
Jul 03 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
如何基于python实现脚本加密
2019/12/28 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
物流管理专业大学生自荐信
2013/10/04 职场文书
人力资源主管职责范本
2014/03/05 职场文书
保护母亲河倡议书
2014/04/14 职场文书
毕业评语大全
2014/05/04 职场文书
中学政教处工作总结
2015/08/13 职场文书
股东出资协议书
2016/03/21 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
Python基本知识点总结
2022/04/07 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏