南大软院大神养成计划——第十四天

今天是南大软院大神养成计划实施的第十四天,离结束越来越近了,我也要加紧学习了。今天学习的主要内容是jS动画剩下的部分——链式运动和同时运动和一些动画案例。

链式运动:

什么是链式运动呢?链式运动就是结束一个运动的时候,去直接做另一个运动 ,你可以无限延伸下去,比如改变了div的长度后,我们又接着改变高度,然后又改变透明度,这就是链式运动。

实现原理:

就是在startMove(obj,attr,iTarget)再加一个fn参数使其变为startMove(),并在清除动画之后,加入fn方法:if(fn){fn();}
在主页中,在三个参数之后再加入一个参数
startMove(Li,'width',400,function(){
startMove(Li,'height',200,function(){ startMove(Li,'opacity',100);
})
})

startMove就是一个运动框架,前一天的博客已经写到这部分内容,根据相应的参数持续相应的改变属性的运动,这个startMove的运动是缓冲运动。

fn相当于回调函数。

链式运动在改变属性后,肯定要复原原来的属性,复原的顺序跟改变的顺序是相反的,如我们先改变了宽度,然后高度,那么复原的顺序就是先复原高度然后再复原宽度。

实现代码:

function startMove(obj,attr,iTarget,fn){
clearInterval(obj.timer);//1.2+++
obj.timer=setInterval(function(){//1.2+++
var icur=null;
//1.判断类型
if(attr=='opacity'){
icur=Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
icur=parseInt(getStyle(obj,attr));
}
//2.算速度
var speed=(iTarget-icur)/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
//3.检测停止
if(icur==iTarget){
clearInterval(obj.timer);
if(fn){
fn();
}
}else{
if(attr=='opacity'){
obj.style.filter='alpha(opacity:'+(icur+speed)+')';
obj.style.opacity=(icur+speed)/100;
}else{
obj.style[attr]=icur+speed+'px';
}

}
},30);
}
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}

链式运动调用方法:

window.onload = function(){
var oDiv = document.getElementById("div1");
oDiv.timer = null;
oDiv.onmouseover = function(){
startMove(oDiv,'width',400,function(){//先改变宽度
startMove(oDiv,'height',400,function(){//然后改变高度
startMove(oDiv,'opacity',100);//然后改变透明度
});
});
};
oDiv.onmouseout = function(){
startMove(oDiv,'height',200,function(){//先还原透明度
startMove(oDiv,'opacity',30,function(){//然后还原高度
startMove(oDiv,'width',200)//最后还原宽度
})
});
};
};

})

同时运动:

同时运动就是同时做两种运动,而不是一个运动做完后接着另一个运动,比如我们同时改变宽度和高度。在实现同时运动的时候,我们需要粗略的了解json。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,我们称之为JavaScript对象表示法。

json格式:

var json={a:12,b:13};//可以放入多对值,每对值之间用“,”隔开,‘a’代表值得名称,12是值。
for(var i in json){//用for-in循环访问json里的值
alert(i); //弹出a
alert(json[i]); //弹出12

定义一个json{}通过for(var i in json)来遍历里面的值,使得属性可以同时变化。
注意:当json里的某个值到达目标时,就会停止定时器,此时需要对代码做出修改
json{name/key}

想具体了解json的同学,可以访问http://www.cnblogs.com/pigtail/archive/2012/06/08/2541314.html,这里详细讲解了json的内容。

所以根据以上json的知识,我们可以修改我们的框架来使其可以同时改变多个属性。

代码如下:

function startMove(obj,json,fn){
var flag=true;//标志所有运动是否到达目标值,
clearInterval(obj.timer);
obj.timer=setInterval(function(){
for(var attr in json){
var curr=0;
//判断是否为透明度
if(attr=='opacity'){
curr=Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
curr=parseInt(getStyle(obj,attr));
}
//移动速度处理
var speed=0;
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)+")";
obj.style.opacity=(curr+speed)/100;
}else{
obj.style[attr]=curr+speed+'px';
}
}//这个是定时器里的函数结尾
if(flag){//如果运动全部做完,则设置flag==ture
clearInterval(obj.timer);
if(fn){
fu();
}
}

有了这个框架,我们就可以实现大部分网上的动画效果,所以后面的动画效果都是基于这个框架实现的。

今天的学习就到这,期待明天的学习


### 回答1: 南大软院机试是指南京大学软件学院进行的选拔性考试,主要用于选拔优秀的计算机科学与技术专业学生。而CSDN是中国最大的IT技术社区和知识服务平台,提供大量的技术博客、问答、培训等服务。 南大软院机试的题目通常包括计算机基础知识、编程能力、数据结构与算法等内容。通过机试,南大软院可以了解考生的基础知识水平、动手能力和解决问题的能力,从而选拔出最优秀的学生。 而CSDN作为一个IT技术社区,为计算机科学与技术专业的学生和从业者提供了一个优质的学习和交流平台。在CSDN上,可以浏览到大量的技术博客,以及相关技术问题的解决方案。通过参与CSDN,学生们能够及时了解最新的技术动态和行业发展趋势,提升自己的技术实力。 因此,南大软院机试和CSDN都在不同层面上为计算机科学与技术专业的学生提供了有益的机会和资源。通过参加南大软院机试,学生们有机会进一步提升自己的编程和解决问题的能力,从而在未来的学习和工作中更加出色。而通过参与CSDN,学生们可以在该平台上获取到丰富的技术资源,并与其他志同道合的人进行交流和学习,以更好地提升自己的专业水平。 ### 回答2: 南京大学软件学院机试是指南京大学软件学院举办的面向计算机科学与技术专业的机器编程实践能力考试。在这场机试中,考生需要完成一系列的编程题目,以展示他们的编程能力和解决问题的能力。 南京大学软件学院的机试一般分为两个部分:编程题和理论题。编程题部分会考察考生在数据结构、算法和编程语言等方面的知识,要求考生用编程语言解决一定的问题,例如实现某个算法或数据结构,或者完成一道编程题目。理论题部分则考察考生对计算机科学基础知识的掌握程度,包括计算机网络、操作系统、数据库等。 南京大学软件学院举办机试的目的是为了选拔具有较强编程能力和解决实际问题能力的学生,以便保证学院培养出的学生具备扎实的专业知识和实践能力。机试成绩在考生的综合素质评定中占有重要的比重,对考生的录取结果有着直接的影响。 参加南京大学软件学院机试的考生应该具备良好的计算机编程基础知识,对数据结构和算法有深入的理解,同时还需要具备良好的解决问题和编程能力。对于准备参加机试的考生来说,平时要多进行编程练习,多从理论和实践两方面进行复习。 总之,南京大学软件学院机试是一个重要的考核环节,对考生的编程实践能力和解决问题的能力进行了全面的评估。参加机试的考生应该充分准备,以取得良好的成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值