原生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 full screen 全屏显示页面元素的方法
Sep 27 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
深入剖析JavaScript:Object类型
May 10 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
Jun 28 Javascript
Node.js搭建WEB服务器的示例代码
Aug 15 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
使用Angular material主题定义自己的组件库的配色体系
Sep 04 Javascript
详解JavaScript类型判断的四种方法
Oct 21 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 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
MySQL修改密码方法总结
2008/03/25 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
DOM 事件流详解
2015/01/20 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python中使用while循环的实例
2019/08/05 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Java程序员面试题
2013/07/15 面试题
售后服务科岗位职责范文
2013/11/13 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
团日活动总结怎么写
2014/06/25 职场文书
应届大专生求职信
2014/06/26 职场文书
学用政策心得体会
2014/09/10 职场文书
十月围城观后感
2015/06/08 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Python基础之pandas数据合并
2021/04/27 Python