原生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 相关文章推荐
Javascript 面向对象编程(一) 封装
Aug 28 Javascript
javascript:history.go()和History.back()的区别及应用
Nov 25 Javascript
js中的caller和callee属性介绍和例子
Jun 07 Javascript
深入理解JavaScript编程中的原型概念
Jun 25 Javascript
js滚动条平滑移动示例代码
Mar 29 Javascript
Angular实现图片裁剪工具ngImgCrop实践
Aug 17 Javascript
关于预加载InstantClick的问题解决方法
Sep 12 Javascript
帝国cms首页列表页实现点赞功能
Oct 30 Javascript
js html实现计算器功能
Nov 13 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
Sep 06 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
node.js超时timeout详解
2014/11/26 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
jQuery实现评论模块
2020/08/19 jQuery
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
python自定义类并使用的方法
2015/05/07 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python sep参数使用方法详解
2020/02/12 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
社区安全检查制度
2014/02/03 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
自荐信怎么写
2015/03/04 职场文书
安全教育的主题班会
2015/08/13 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python