<script>
window.onload = function() {
//var oDiv1 = document.getElementById('box1');
//var oDiv2 = document.getElementById('box2');
// oDiv1.timer = null;
var oDiv = document.getElementsByTagName('div'); for (var i = 0; i < oDiv.length; i++) {
oDiv[i].timer = null;
oDiv[i].onmouseover = function() {
var that = this; //闭包的关系,把this传递过去
startMove(this, {'width': 205, 'height': 500},function(){
startMove(that, {'opacity': 100});
});
//alert(getStyle(this,'opacity'))
}
oDiv[i].onmouseout = function() {
var that = this;
startMove(this, {'width': 200,'height':200}, function(){
startMove(that, {'opacity': 30});
});
}
}
}
//var timer = null;
function getStyle(obj,name){          //获取样式的函数
if(obj.currentStyle){
return obj.currentStyle[name]; //这里用这种形式的原因是name是以字符串的形式传递过来的
} else{
return getComputedStyle(obj,false)[name]; //得到加上边框的总宽
}
}
//startMove(onj,{width: 200, height: 200}, fnEnd)
function startMove(obj, json, fnEnd) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var bStop = true; //开了定时器之后设立一个假设:所有运动都停止了,那些把假设设到定时器外面的都是错误的方法
for(var attr in json){
var cur = 0;
if(attr == "opacity"){
cur = Math.round(parseFloat(getStyle(obj,attr)) * 100); //要取整
} else {
cur = parseInt(getStyle(obj,attr))
}
var speed = (json[attr] - cur) / 10; //
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (cur !== json[attr]) { //如果某次循环的值不等于目标值,
bStop = false; //假设不成立
};
if (attr == "opacity"){
obj.style.opacity = (speed + cur)/100;
obj.style.filter = 'alpha(opacity:'+ (speed + cur) +')';
} else{
obj.style[attr] = cur + speed + 'px';
}
}
if(bStop){ //所有的假设都成立了,才关闭定时器
clearInterval(obj.timer);
if(fnEnd) fnEnd(); //如果有回调函数,则执行回掉函数
}
}, 30)
}
</script>

html代码

  <div id="box1"></div>
<div id="box2"></div>

css代码

  div {
width: 200px;
height: 200px;
background: purple;
border: 10px solid maroon;
margin-top: 10px;
opacity: 0.3;
filter: alpha(opacity: 30);
}

全手打,亲测可用,支持多物体,多属性,链式,同时运动。

最新文章

  1. pip 安装psycopg的错误
  2. 防止SQL注入问题
  3. Android_使用 OpenVPN
  4. [转帖]ExtJs与服务器的交互(一)
  5. C# 操作 Word 修改word的高级属性中的自定义属性
  6. NVIDIA CG语言 函数之所有数学类函数(Mathematical Functions)
  7. (转)asp.net实现忘记密码找回的代码
  8. C++服务器设计(零):总体设计
  9. PLSQLDeveloper过期要注册表
  10. Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码
  11. SAP HANA中的SLT简介
  12. Centos常用命令之:搜索
  13. Mysql注入小tips --持续更新中
  14. CDH 安装 kafka
  15. 「SNOI2019」通信
  16. Java的四种内部类(含代码实例)
  17. CSS 的 ID 和 Class 有什么区别,如何正确使用它们。
  18. 菜鸟学SSH(七)——Spring jar包详解
  19. shutil模块---文件,文件夹复制、删除、压缩等处理
  20. javascript json字符串转json对象方法

热门文章

  1. Asp.net中具体的日期格式化用法
  2. Asp.Net HttpApplication请求管道与Session(一)
  3. linux环境下jdk 安装以及maven私服搭建
  4. 嵌入式开发——boa服务器下的ajax与cgi通信
  5. 安装apache服务器时遇到只能本地访问,局域网内其他电脑不能访问apache:
  6. 临时表妙用、连表更新、sqlserver group contant
  7. iOS -多字体混合
  8. LibSvm介绍---调用方法及参数介绍
  9. Netbeans7.4下搭建struts2.3.16
  10. Android的移动存储之SharedPreferences