1,勻速動畫效果
window.onload = function(){ var odiv = document.getElementById('odiv'); odiv.onmouseover = function(){ startMover(0); } odiv.onmouseout = function(){ startMover(-200); } } var timer = null; function startMover(itarget){//目標值 clearInterval(timer);//執行當前動畫同時清除之前的動畫 var odiv = document.getElementById('odiv'); timer = setInterval(function(){ var speed = 0; if(odiv.offsetLeft > itarget){ speed = -1; } else{ speed = 1; } if(odiv.offsetLeft == itarget){ clearInterval(timer); } else{ odiv.style.left = odiv.offsetLeft+speed+'px'; } },30); }
2,緩沖動畫效果
window.onload = function(){ var odiv = document.getElementById('odiv'); odiv.onmouseover = function(){ startMover(0); } odiv.onmouseout = function(){ startMover(-200); } } var timer = null; function startMover(itarget){//速度和目標值 clearInterval(timer);//執行當前動畫同時清除之前的動畫 var odiv = document.getElementById('odiv'); timer = setInterval(function(){ var speed = (itarget-odiv.offsetLeft)/10;//緩沖動畫的速度參數變化值 //如果速度是大於0,說明是向右走,那么就向上取整 speed = speed>0?Math.ceil(speed):Math.floor(speed); //Math.floor();向下取整 if(odiv.offsetLeft == itarget){ clearInterval(timer); } else{ //clientLeft 返回對象的offsetLeft屬性值和到當前窗口左邊的真實值之間的距離 odiv.style.left = odiv.offsetLeft+speed+'px'; } },30); }
3,透明度動畫
window.onload = function(){ var odiv = document.getElementsByTagName('div'); for(var i=0;i<odiv.length;i++) { odiv[i].onmouseover = function(){ startOP(this,100); } odiv[i].onmouseout = function(){ startOP(this,30); } odiv[i].timer = null;//事先定義 odiv[i].alpha = null;//事先定義 //這里發現一個問題,對象的動畫屬性可以不定義,但是透明度屬性必須定義,否則報錯 } } function startOP(obj,utarget){ clearInterval(obj.timer);//先關閉定時器 obj.timer = setInterval(function(){ var speed = 0; if(obj.alpha>utarget){ speed = -10; } else{ speed = 10; } obj.alpha = obj.alpha+speed; if(obj.alpha == utarget){ clearInterval(obj.timer); } obj.style.filter = 'alpha(opacity:'+obj.alpha+')';//基於IE的 obj.style.opacity = parseInt(obj.alpha)/100; },30); }
4,多物體動畫
window.onload = function(){ var olist = document.getElementsByTagName('li'); for(var i=0; i<olist.length;i++) { olist[i].onmouseover = function(){ startmov(this,400); }; olist[i].onmouseleave = function(){ startmov(this,200); }; olist[i].timer = null; } function startmov(obj,itarget){ clearInterval(obj.timer);//執行動畫之前清除動畫 obj.timer = setInterval(function(){ var speed =0; speed = (itarget - obj.offsetWidth)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); if(obj.offsetWidth == itarget){ clearInterval(obj.timer); } else{ obj.style.width = obj.offsetWidth+speed+'px'; } },30); } }
5,獲取樣式動畫
window.onload = function(){ var odiv = document.getElementById('odiv'); odiv.onmouseover = function(){ startMov(this); }; function startMov(obj){ setInterval(function(){ obj.style.width = parseInt(getStyle(obj,'width'))+1+'px'; obj.style.fontSize = parseInt(getStyle(obj,'fontSize'))+1+'px'; },30); } function getStyle(obj,attr) { if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } }
6,多物體復雜動畫
window.onload = function(){ var li1 = document.getElementById('li1'); var li2 = document.getElementById('li2'); li1.onmouseover = function(){ startMov(this,400,'width'); }; li1.onmouseout = function(){ startMov(this,200,'width'); }; li2.onmouseover = function(){ startMov(this,200,'height'); }; li2.onmouseout = function(){ startMov(this,100,'height'); }; function startMov(obj,itarget,attr){ clearInterval(obj.timer);//執行動畫之前清除動畫 obj.timer = setInterval(function(){ var icur = parseInt(getStyle(obj,attr)); var speed =0; speed = (itarget - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); if(icur == itarget){ clearInterval(obj.timer); } 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]; } } }
7,多物體復雜動畫(帶透明度的)
window.onload = function(){ var li1 = document.getElementById('li1'); var li2 = document.getElementById('li2'); li1.onmouseover = function(){ startMov(this,100,'opacity'); }; li1.onmouseout = function(){ startMov(this,30,'opacity'); }; li2.onmouseover = function(){ startMov(this,200,'height'); }; li2.onmouseout = function(){ startMov(this,100,'height'); } li1.timer = null; li2.timer = null; function startMov(obj,itarget,attr){ clearInterval(obj.timer);//執行動畫之前清除動畫 obj.timer = setInterval(function(){ var icur = 0; if(attr == 'opacity'){ icur = Math.round(parseFloat(getStyle(obj,attr))*100);//轉換成整數,並且四舍五入下 //計算機在計算小數的時候往往是不准確的! } else{ icur = parseInt(getStyle(obj,attr)); } var speed =0; speed = (itarget - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); if(icur == itarget){ clearInterval(obj.timer); } 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]; } } }
8,鏈式動畫
window.onload = function(){ var li1 = document.getElementById('li1'); li1.onmouseover = function(){ startMov(li1,400,'width',function(){ startMov(li1,200,'height',function(){ startMov(li1,100,'opacity'); }); }); }; li1.onmouseout = function(){ startMov(li1,30,'opacity',function(){ startMov(li1,100,'height',function(){ startMov(li1,100,'width'); }); }); }; li1.timer = null; function startMov(obj,itarget,attr,fn){//fn回調函數 clearInterval(obj.timer);//執行動畫之前清除動畫 obj.timer = setInterval(function(){ var icur = 0; if(attr == 'opacity'){ icur = Math.round(parseFloat(getStyle(obj,attr))*100);//轉換成整數,並且四舍五入下 //計算機在計算小數的時候往往是不准確的! } else{ icur = parseInt(getStyle(obj,attr)); } var speed =0; speed = (itarget - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); 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]; } } }
9,多物體同時運動動畫
window.onload = function(){ var li1 = document.getElementById('li1'); li1.onmouseover = function(){ startMov(li1,{width:201,height:200,opacity:100}); }; li1.onmouseout = function(){ startMov(li1,{width:200,height:100,opacity:30}); }; li1.timer = null; function startMov(obj,json,fn){//fn回調函數 clearInterval(obj.timer);//執行動畫之前清除動畫 var flag = true;//是否動畫都完成了 obj.timer = setInterval(function(){ for(var attr in json){ var icur = 0; if(attr == 'opacity'){ icur = Math.round(parseFloat(getStyle(obj,attr))*100);//轉換成整數,並且四舍五入下 //計算機在計算小數的時候往往是不准確的! } else{ icur = parseInt(getStyle(obj,attr)); } var speed =0; speed = (json[attr] - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); if(icur != json[attr]){ flag = false; } if(attr == 'opacity'){ obj.style.filter = 'alpha(opacity:'+(icur+speed)+')'; obj.style.opacity = (icur+speed)/100; } else{ obj.style[attr] = icur+speed+'px'; } if(flag){ clearInterval(obj.timer); if(fn){ fn(); } } } },30); } function getStyle(obj,attr) { if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } }