原生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 相关文章推荐
最新的10款jQuery内容滑块插件分享
Sep 18 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
查找页面中所有类为test的结点的方法
Mar 28 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
Aug 27 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
Nov 09 Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 Javascript
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 Javascript
js实现本地时间同步功能
Aug 26 Javascript
vuex直接赋值的三种方法总结
Sep 16 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 Javascript
vue 解决文本框被键盘遮住的问题
Nov 06 Javascript
JavaScript正则表达式验证登录实例
Mar 18 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三层结构(上) 简单三层结构
2010/07/04 PHP
php设计模式 Visitor 访问者模式
2011/06/28 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
python中xlrd模块的使用详解
2021/02/01 Python
酒店公关部经理岗位职责
2013/11/24 职场文书
学生党支部先进事迹
2014/02/04 职场文书
心理健康课教学反思
2014/02/13 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
高三物理教学反思
2016/02/20 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫