原生JS封装animate运动框架的实例


Posted in Javascript onOctober 12, 2017

如下所示:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
div {
width: 100px;
height: 100px;
background-color: pink;
position: absolute;
left: 0;
top: 50px;
border-radius: 50%;
}
</style>
</head>
<body>
<button id="btn200">200</button>
<button id="btn400">400</button>
<div id="box"></div>
</body>
</html>
<script>
var btn200 = document.getElementById("btn200");
var btn400 = document.getElementById("btn400");
var box = document.getElementById("box");
btn200.onclick = function() {
animate(box,{width: 200, top: 100,left: 200,opacity:40,zIndex:3},function(){alert("我来了")});
}
btn400.onclick = function() {
animate(box,{top:500,opacity:10});
}
// 多个属性运动框架 添加回调函数
function animate(obj,json,fn) { // 给谁 json
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var flag = true; // 用来判断是否停止定时器 一定写到遍历的外面
for(var attr in json){ // attr 属性 json[attr] 值
//开始遍历 json
// 计算步长 用 target 位置 减去当前的位置 除以 10
// console.log(attr);
var current = 0;
if(attr == "opacity")
{
current = Math.round(parseInt(getStyle(obj,attr)*100)) || 0;
console.log(current);
}
else
{
current = parseInt(getStyle(obj,attr)); // 数值
}
// console.log(current);
// 目标位置就是 属性值
var step = ( json[attr] - current) / 10; // 步长 用目标位置 - 现在的位置 / 10
step = step > 0 ? Math.ceil(step) : Math.floor(step);
//判断透明度
if(attr == "opacity") // 判断用户有没有输入 opacity
{
if("opacity" in obj.style) // 判断 我们浏览器是否支持opacity
{
// obj.style.opacity
obj.style.opacity = (current + step) /100;
}
else
{ // obj.style.filter = alpha(opacity = 30)
obj.style.filter = "alpha(opacity = "+(current + step)* 10+")";

}
}
else if(attr == "zIndex")
{
obj.style.zIndex = json[attr];
}
else
{
obj.style[attr] = current + step + "px" ;
}

if(current != json[attr]) // 只要其中一个不满足条件 就不应该停止定时器 这句一定遍历里面
{
flag = false;
}
}
if(flag) // 用于判断定时器的条件
{
clearInterval(obj.timer);
//alert("ok了");
if(fn) // 很简单 当定时器停止了。 动画就结束了 如果有回调,就应该执行回调
{
fn(); // 函数名 + () 调用函数 执行函数
}
}
},30)
}
function getStyle(obj,attr) { // 谁的 那个属性
if(obj.currentStyle) // ie 等
{
return obj.currentStyle[attr]; // 返回传递过来的某个属性
}
else
{
return window.getComputedStyle(obj,null)[attr]; // w3c 浏览器
}
}
</script>

以上这篇原生JS封装animate运动框架的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery cookie插件代码类
May 26 Javascript
javascript 循环调用示例介绍
Nov 20 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
Mar 24 Javascript
Ajax清除浏览器js、css、图片缓存的方法
Aug 06 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
Jun 21 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 Javascript
vue element实现表格合并行数据
Nov 30 Vue.js
javascript中神奇的 Date对象小结
Oct 12 #Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 #Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 #Javascript
js实现单张图片平移切换效果
Oct 11 #Javascript
jQuery自动或手动图片切换效果
Oct 11 #jQuery
简单实现vue验证码60秒倒计时功能
Oct 11 #Javascript
mui框架移动开发初体验详解
Oct 11 #Javascript
You might like
第四节--构造函数和析构函数
2006/11/16 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
js实现无缝滚动图
2017/02/22 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
大学四年个人自我小结
2014/03/05 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
岗位说明书标准范本
2014/07/30 职场文书
黄石寨导游词
2015/02/05 职场文书
大学生读书笔记大全
2015/07/01 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书