封装了一个JS方法,可支持块元素的常规动画:高、宽、透明度、位置等,同时支持链式动画和同时运动,参照imooc整理,具体代码如下:

/**
* 获取HTML元素属性值
* obj是Element, attr是属性
**/
function getStyle(obj, attr) {
if (obj.currentStyle) {
  // IE浏览器
  return obj.currentStyle[attr]; 
 } else {
  // Google、Firefox等
  return getComputedStyle(obj, false)[attr];
}
}
/**
* 主函数,实现元素动画。
* obj是Element, attrJson是属性及其目标值的JSON,fn是运动完成后的回调函数,根据回调函数实现链式动画
*/
function startMove(obj, attrJson, fn) {
 // 1. 清空该元素的定时器
clearInterval(obj.timer);
// 变量flag 记录运动是否需要停止
var flag = true;
 // 2. 开启该元素的定时器,间隔时间可重设
 obj.timer = setInterval(function() {
// 遍历attrJson,获取需要运动的属性,对每个属性进行改变
  for (var attr in attrJson) {
// 属性目标值
var iTarget = attrJson[attr];
// 获取原本属性值
var iCur = 0;
if (attr == 'opacity') {
     // 对透明度(opacity)单独处理
iCur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
iCur = parseInt(getStyle(obj, attr));
}
// 判断此属性的运动是否已经完成
if (iTarget == iCur) {
continue;
}
flag = false;
// 8为速度系数,可重设
var speed = (iTarget - iCur) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (attr == 'opacity') {
obj.style.filter = 'alpha(opacity:' + (iCur + speed) + ')';
obj.style[attr] = (iCur + speed)/100;
} else {
obj.style[attr] = iCur + speed + 'px';
}
}
// 全部属性均已经运动完成
if (flag) {
clearInterval(obj.timer);
// 如果有回调函数,开启下一个回调函数
if (fn) {
fn();
}
}
 }, 30);
}

调用代码如下:

window.onload = function() {
var li1 = document.getElementById("li1");
li1.onmouseover = function() {
startMove(this, {width:400, height:200, opacity:100});
};
li1.onmouseout = function() {
startMove(this, {width:200, height:100, opacity:30});
}
}

最新文章

  1. angularjs之filter过滤器
  2. PHP 根据key 给二维数组分组
  3. Java学习笔记:控制反转
  4. Quartz.net 定时调度时间配置格式说明与实例
  5. 配置 nginx server 出现nginx: [emerg] "root" directive is duplicate in /etc/nginx/server/blogs.conf:7
  6. git ssh key创建和github使用
  7. 斯特灵数 (Stirling数)
  8. 第几天 switch做法 杭电
  9. 从点亮一个LED开始,Cortex-A9裸机程序设计
  10. POJ - 2828 Buy Tickets (段树单点更新)
  11. 多线程之Parallel类
  12. quartus2中FPGA管脚分配保存方法(转)
  13. MIPCMS V3.1.0 远程写入配置文件Getshell过程分析(附批量getshell脚本)
  14. [HNOI2008]越狱
  15. ECharts.js学习动态数据绑定
  16. 155. Min Stack - Unsolved
  17. 对Kalman(卡尔曼)滤波器的理解@@zz
  18. MTStatusBarOverlay (状态栏,添加自定义内容库)
  19. nginx php fastcgi安装
  20. pos机代理行业

热门文章

  1. js 驼峰命名和下划线互换
  2. 常见bug类别
  3. WebStorm取消默认style样式折叠
  4. django -- ORM实现图书增删改查
  5. BFS实现8数码问题,思考与总结
  6. LOJ2507 CEOI2011 Matching
  7. The import junit cannot be resolved解决问题
  8. Spring Security教程之基于表达式的权限控制(九)
  9. 【Activiti学习之一】Activiti入门
  10. 设计高性能大并发WEB系统架构注意点