在学习js的过程中,发现这家伙做特效真是不错,尽管说眼下水平还不够,只是也能写点简单的效果。

今天分享一个简单的运动框架。然后利用这个框架实现简单的链式运动特效。

1.move.js

在运动框架中。主要进行长宽变化和透明度的变化。长宽的变化能够实现DIV的体积运动变化效果。透明度的话主要是在鼠标移入移出事件中加入淡入淡出的效果。我将这个简单的运动框架封装到一个单独的js文件里,方便调用。

先看看代码:

<span style="font-family:KaiTi_GB2312;">//用于获取非行间样式</span>
function getStyle(obj,name){ if(obj.currentStyle){
return obj.currentStyle[name];
}else{
return getComputedStyle(obj,false)[name];
}
}
<span style="font-family:KaiTi_GB2312;">//四个參数分别为对象,属性,改动值,函数</span>
function startMove(obj,attr,iTarget,func){
clearInterval(obj.timer); obj.timer=setInterval(function(){
var cur=0;
<span style="font-family:KaiTi_GB2312;">//推断要变化的属性是否为透明度</span>
if(attr=='opacity'){
cur=parseFloat(getStyle(obj,attr)*100);
}else{
cur=parseInt(getStyle(obj,attr));
} //<span style="font-family:KaiTi_GB2312;">运动速度计算</span>
var speed=(iTarget-cur)/6;
speed=speed>0? Math.ceil(speed):Math.floor(speed); if(cur==iTarget){
clearInterval(obj.timer); <span style="font-family:KaiTi_GB2312;"> //若存在函数參数。则运行函数</span>
if(f<span style="font-family:KaiTi_GB2312;">unc</span>){
<span style="font-family:KaiTi_GB2312;"> </span>f<span style="font-family:KaiTi_GB2312;">unc</span>();
}
}else{
if(attr=='opacity'){
<span style="font-family:KaiTi_GB2312;">//保证IE和FF的兼容性</span>
<span style="font-family:KaiTi_GB2312;"> </span>obj.style.filter='alpha(opacity:'+(cur+speed)+')';
obj.style.opacity=(cur+speed)/100;
}else{
obj.style[attr]=cur+speed+'px';
} } },30);
}

2.index.html

<html>
<head>
<meta charset="utf-8">
<style>
#div1{
width:100px;
height:100px;
background:red;
filter:alpha(opacity:30);opacity:0.3;
}
</style>
<script src="move.js"></script>
<script>
window.onload=function(){
var oDiv=document.getElementById('div1'); oDiv.onmouseover=function (){
startMove(oDiv,'width',300,function(){
startMove(oDiv,'height',300,function(){
startMove(oDiv,'opacity',100);
});
});
}; oDiv.onmouseout=function (){
startMove(oDiv,'opacity',30,function(){
startMove(oDiv,'height',100,function(){
startMove(oDiv,'width',100);
});
});
};
};
</script>
</head> <body>
<div id="div1"></div>
</body>
</html>

在mouseover中:先将DIV进行width变化,等运动结束。

然后进行height变化,最后进行opacity变化。

在mouseout中:先进行opacity变化,然后是height变化,最后进行width变化。就是和移入事件运动顺序全然相反。(此实例并无直接应用意义,可是对运动框架进行一些完好之后就能够做一些常见的特效了)

在startMove()的使用过程中。有类似与递归调用的感觉。只是这个好理解多了。

3.小结

尽管说运动框架仅仅有几十行的代码,可是当中的细节还是非常多的。假设实用到这个框架的同学,在使用的时候先好好整理代码的逻辑。要不然出了bug。也真够虐心的。还好,我把凝视写的非常清楚了,希望能帮助到有须要的人。

上两张运动前后的图:

(忽略水印)

详细运动过程还是自己实践一番为好,再稍作修饰的话。效果肯定倍加。

最新文章

  1. ORA-39242 错误
  2. Angular JS中$timeout的用法及其与window.setTimeout的区别
  3. c#连接mysql环境配置
  4. Mysql日期统计函数简介
  5. python之旅2
  6. RF《Quick Start Guide》操作总结
  7. [转] 国外程序员整理的 C++ 资源大全
  8. C#面向对象中类的静态成员与非静态成员的区别
  9. DS实验题 最大最小
  10. Java开发核心技术面试心得分析
  11. linux下多线程互斥量实现生产者--消费者问题和哲学家就餐问题
  12. secureCRT保存屏幕输出内容
  13. NoClassDefFoundError com/google/inject/Injector
  14. JAVA核心技术I---JAVA基础知识(格式化相关类)
  15. Springboot集成ES启动报错
  16. Java用户名登录学生信息管理系统并对其进行增删改查操作
  17. You Don&#39;t Know JS: this &amp; Object Prototypes( 第4章 Mixing &quot;Class&quot; Objects)
  18. vi 基本命令使用
  19. nfs挂载hdfs,实现云存储
  20. Java 中的三大特性

热门文章

  1. bzoj 1449 费用流
  2. 五十七 POP3收取邮件
  3. 五十一 常用第三方模块virtualenv
  4. RadioGroup多行显示
  5. linux c 学习笔记
  6. JS中事件绑定问题
  7. Flask实战第68天:项目上线部署
  8. leetcode7 Rerver Integer
  9. WebService数据示例
  10. BZOJ 1116 [POI2008]CLO(并查集)