原生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 相关文章推荐
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
javascript学习总结之js使用技巧
Sep 02 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
Jun 13 Javascript
详解auto-vue-file:一个自动创建vue组件的包
Apr 26 Javascript
对layui中table组件工具栏的使用详解
Sep 19 Javascript
Vue之Mixins(混入)的使用方法
Sep 24 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
Jan 08 Javascript
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
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
图解Sublime Text3使用技巧
2015/12/21 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
原生JS实现留言板
2020/03/26 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
python分数表示方式和写法
2019/06/26 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
你对IPv6了解程度
2016/02/09 面试题
linux系统都有哪些运行级别
2012/04/15 面试题
2013年军训通讯稿
2014/02/05 职场文书
培训研修方案
2014/06/06 职场文书
个人工作总结范文2014
2014/11/07 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python