好程序员技术教程分享JavaScript运动框架
好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下。
JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程。如让div的width属性由200px变到400px,opacity属性由0.3变到1.0,就是一个运动过程。
实现运动要注意以下方面:
- 匀速运动(改变left、right、width、height、opacity等属性)
- 缓冲运动(速度是变化的)
- 多物体运动(注意所有东西都不能共用,否则容易产生冲突,如定时器timer)
- 获取任意属性值(封装一个getStyle函数)
- 链式运动(串行)
- 同时运动(并行,同时改变多个属性,需要使用 json)
封装好的getStyle函数,在下面的运动框架中会用到:
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr]; //针对IE
}
else{
return getComputedStyle(obj,false)[attr]; //针对Firefox
}
}
万能的运动框架:
function Move(obj,json,callback){
var flag=true; //标志变量,为true表示所有运动都到达目标值
clearInterval(obj.timer);
obj.timer=setInterval(function(){
flag=true;
for(var attr in json){
//获取当前值
var curr=0;
if(attr=='opacity'){
curr=Math.round(parseFloat(getStyle(obj,attr))*100); //parseFloat可解析字符串返回浮点数//round四舍五入
}
else{
curr=parseInt(getStyle(obj,attr)); //parseInt可解析字符串返回整数
}
//计算速度
var speed=(json[attr]-curr)/10;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
//检测是否停止
if(curr!=json[attr]){
flag=false; //有一个属性未达目标值,就把flag变成false
}
if(attr=='opacity'){
obj.style.filter='alpha(opacity:'+(curr+speed)+')'; //针对IE
obj.style.opacity=(curr+speed)/100; //针对Firefox和Chrome
}
else{
obj.style[attr]=curr+speed+'px';
}
}
if(flag){
clearInterval(obj.timer);
if(callback){
callback();
}
}
},30);
}
调用上述运动框架的实例:
var div_icon=document.getElementById('icon');
var aList=div_icon.getElementsByTagName('a');
for(var i=0;i aList[i].onmouseover=function(){
var _this=this.getElementsByTagName('i')[0];
Move(_this,{top:-70,opacity:0},function(){
_this.style.top=30+'px';
Move(_this,{top:10,opacity:100});
});
}
}
好了,以上就是用JavaScript编写的运动框架。此外,jQuery中的animate函数也可以方便实现上述功能:
$(function(){
$('#icon a').mouseenter(function(){
$(this).find('i').animate({top:"-70px",opacity:"0"}, 300,function(){ //动画速度为300ms
$(this).css({top:"30px"});
$(this).animate({top:"10px",opacity:"1"}, 200);
});
})
})

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SqlServer 将纯数字的时间转换为DateTime
SqlServer 将纯数字的时间转换为DateTime由于数据库存的是整个字符串组到一起了,C#代码是这个样子的。 复制代码public static string time(DateTime dt) { return dt.Year.ToString() + ((Convert.ToInt32(dt.Month) < 10) ? "0" + dt.Month.ToString() : dt.Month.ToString()) + ((Convert.ToInt32(dt.Day) < 10) ? "0" + dt.Day.ToString() : dt.Day.ToString()) + ((Convert.ToInt32(dt.Hour) < 10) ? "0" + dt.Hour.ToString() : dt.Hour.ToString()) + ((Convert.ToInt32(dt.Minute) < 10) ? "0" + dt.Minute.ToString() : dt.Minute.ToString()) + ((Convert.ToIn...
- 下一篇
【直播预告】阿里技术专家天樵:基于JVM的脚本语言开发、运用实践
主讲人:天樵(阿里集团-业务平台事业部-技术专家)本名:包行杰 来自阿里巴巴的技术专家 — 天樵,在阿里巴巴长期担任规则引擎开发工作,通过规则引擎、规则管理平台等技术输出,来支持阿里巴巴复杂多变的上层业务变更需求,对脚本工具、规则引擎、流程引擎等有比较深入的研究。 目前负责的阿里开源项目:https://github.com/alibaba/QLExpress 点击关注天樵的云栖社区个人主页 内容概要:复杂的业务系统往往会使用表达式(EL)或者脚本语言(script)来实现部分业务逻辑的实时动态发布,比如在数学公式计算,规则引擎、脚本引擎中的运用。 本人在阿里巴巴长期担任规则引擎开发工作,通过规则引擎、规则管理平台等技术输出,来支持阿里巴巴复杂多变的上层业务变更需求。 本次分享聚焦基于jvm的脚本语言,通过对这个领域常见的脚本语言原理、基本使
相关文章
文章评论
共有0条评论来说两句吧...