html部分

<!DOCTYPE html>
<html lang="en">
<head>
<link href="../css/default.css" rel="stylesheet">
<script src="../js/main.js">
</script>
<meta charset="utf-8">
<title>
Document
</title>
<script type="text/javascript">
window.onload=function(){
var div=document.getElementsByTagName('div');
for(var i=0;i<div.length;i++){
div[i].timer=null; div[i].onmouseover = function() {
// var _this = this;
// var _this2 = _this;
startMove(this, {width:400,height:400,opacity:100});
// startMove(_this, 400, 'height', function() {
// startMove(_this2, 100, 'opacity');
// });
// }); //用this可以调取当前的节点对象
};
div[i].onmouseout = function() {
// var _this = this;
// var _this2 = _this;
startMove(this,{width:200,height:200,opacity:30});
// startMove(_this, 200, 'height', function() {
// startMove(_this2, 200, 'width');
// });
// }); //用this可以调取当前的节点对象
}; } };
</script>
</meta>
</link>
</head>
<body>
<div id="div1">
</div>
<div id="div2">
</div>
</body>
</html>

js部分

function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];//针对IE获取样式
} else {
return getComputedStyle(obj, false)[attr];//针对非IE获取样式。
}
} //获取样式的好处,是防止出现obj.offsetWidth与boder这样的Bug。
function startMove(obj, json, fn) { //iTarget是具体的数字,attr是宽或高或透明度之类的。json[attr],包括2者
clearInterval(obj.timer); //清除计时器
obj.timer = setInterval(function() {
var flag=true;//假设所有都到达了目标
for (var attr in json) { //用json,这样的话,可以2个函数同时运行。
var icur = 0;
var speed = 0;
if (attr == 'opacity') {
icur = Math.round(parseFloat(getStyle(obj, attr)) * 100); //这里获取到的是透明度
} else {
icur = parseInt(getStyle(obj, attr)); //因为获取到的宽或者高是小数,所以需要强制转换下,这里获取到的是宽高之类的
} /*上面部分是获取具体的值,及是否是透明度*/
speed = (json[attr] - icur) / 8; //因为这里的attr不能直接代表obj.offsetLeft,要用样式去获取.
//json[attr]代替iTarget《==》speed=(iTarget-obj.offsetLeft)/8
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(json[attr] != icur) {
flag=false;
}
             if(attr == 'opacity') {
obj.style[attr] = (icur + speed) / 100; //icur+speed是当前的透明度加上变化的速度
obj.style.filter = 'alpha(opacity' + (icur + speed) + ')';
} else {
obj.style[attr] = icur + speed + 'px';
}
              if(flag) {
clearInterval(obj.timer);
if (fn) {
fn(); //如果有回调函数就执行回调函数。
}
}
}
}, 30);
}

css部分

* {
margin:;
padding: 0
} div {
width: 200px;
height: 200px;
filter: alpha(opacity:30);//针对IE的透明度
opacity: 0.3;//非IE的透明度
background: blue;
margin-bottom: 20px;
}

js  分4部分

1.判断类型,是透明度还是宽或者高

2.算运动速度

3.检测停止

4.清除计时器

JS动画完美框架的更多相关文章

  1. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

  2. js动画学习(五)

    九.多属性同时运动 前面的例子都是每个属性单独运动,如果想要多属性同时运动怎么办?比如,我想要一个div的onmouseover事件中宽和高同时变化.下面这个函数是单独变宽: window.onloa ...

  3. js动画(四)

    终于到了最后了,这里要告一段落了,整了个js运动框架,咳咳咳,好冷 啊啊啊啊啊啊,这天气.妈的,工资怎么也不发,啊,说好的 人与人之间的信任呢?哎,气诶,不到150字啊,又是这个梗..怎么办?说些什么 ...

  4. JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能

    摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...

  5. 转 10 个最佳的 Node.js 的 MVC 框架

    10 个最佳的 Node.js 的 MVC 框架 oschina 发布于: 2014年02月24日 (33评) 分享到:    收藏 +322 Node.js 是一个基于Chrome JavaScri ...

  6. Android动画学习(一)——Android动画系统框架简介

    2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...

  7. 【06-23】js动画学习笔记01

    <html> <head> <style> * { margin:0; padding:0; } #div1{ width:200px; height:200px; ...

  8. css动画与js动画的区别

    CSS动画 优点: (1)浏览器可以对动画进行优化.   1. 浏览器使用与 requestAnimationFrame 类似的机制,requestAnimationFrame比起setTimeout ...

  9. CSS VS JS动画,哪个更快[译]

    英文原文:https://davidwalsh.name/css-js-animation 原作者Julian Shapiro是Velocity.js的作者,Velocity.js是一个高效易用的js ...

随机推荐

  1. redis安装到本地服务的方法

    要安装Redis,首先要获取安装包. Windows的Redis安装包需要到以下GitHub链接找到. 链接:https://github.com/MSOpenTech/redis 打开网站后,找到R ...

  2. python系统模块

    Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...

  3. delphi 安卓开发常用

    delphi 安卓开发有几个常用的pas: FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewTex ...

  4. NOI2019赛前两周被吊打记录

    7.1 T1看了半天发现会个暴力FWT,然后突然返发现随便容斥一下就好了 T2猜了个只有13和23的,结果打个表发现伪了,然后标号不只一种连搜索都写错了,也没想过可以轮廓线dp,菜哭了o(╥﹏╥)o ...

  5. CF16E Fish(状压+期望dp)

    [传送门[(https://www.luogu.org/problemnew/show/CF16E) 解题思路 比较简单的状压+期望.设\(f[S]\)表示\(S\)这个状态的期望,转移时挑两条活着的 ...

  6. 【Web】浅析JQuery的apply(), call(), bind()方法

    原文地址:https://blog.csdn.net/whuzxq/article/details/64166253 由于在理解this的用法的时候多次出现了这几个方法,个人对这几个方法理解的不是很透 ...

  7. 【JUC】JDK1.8源码分析之AbstractQueuedSynchronizer

    一.前言 在锁框架中,AbstractQueuedSynchronizer抽象类可以毫不夸张的说,占据着核心地位,它提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.所以很有必 ...

  8. 文本数据和mysql 里面的数据比较

    实现读取TXT文件中的内容然后存到内存,然后将内存中的数据和mysql 数据库里面某张表数据的字段做一个比较,如果比较内存中的数据在mysql 里存在则不做处理,如果不存在则将该数据插入mysql数据 ...

  9. sklearn中pipeline的用法和FeatureUnion

    一.pipeline的用法 pipeline可以用于把多个estimators级联成一个estimator,这么 做的原因是考虑了数据处理过程中一系列前后相继的固定流程,比如feature selec ...

  10. lambda x:i*x for i in range(4)

    解决方法:冒号前添加接收 i 的变量 return [lambda x,i=i: i * x for i in range(4)]