好程式設計師技術教程分享JavaScript運動框架
好程式設計師 技術教程分享 JavaScript 運動框架,有需要的朋友可以參考下。
JavaScript 的運動,即讓某元素的某些屬性由一個值變到另一個值的過程。如讓 div 的 width 屬性由 200px 變到 400px , opacity 屬性由 0.3 變到 1.0 ,就是一個運動過程。
實現運動要注意以下方面:
1. 勻速運動(改變 left 、 right 、 width 、 height 、 opacity 等屬性)
2. 緩衝運動(速度是變化的)
3. 多物體運動(注意所有東西都不能共用,否則容易產生衝突,如定時器 timer )
4. 獲取任意屬性值(封裝一個 getStyle 函式)
5. 鏈式運動(序列)
6. 同時運動(並行,同時改變多個屬性,需要使用 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.length;i++){
<span style="white-space:pre"> </span>aList[i].onmouseover=function(){
<span style="white-space:pre"> </span>var _this=this.getElementsByTagName('i')[0];
<span style="white-space:pre"> </span>Move(_this,{top:-70,opacity:0},function(){
<span style="white-space:pre"> </span>_this.style.top=30+'px';
<span style="white-space:pre"> </span>Move(_this,{top:10,opacity:100});
<span style="white-space:pre"> </span>});
<span style="white-space:pre"> </span>}
}
好了,以上就是用 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);
});
})
})
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2642286/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師技術分享淺談JavaScript中的閉包程式設計師JavaScript
- 好程式設計師雲端計算教程分享Mysql技術知識點程式設計師MySql
- 好程式設計師web前端教程分享JavaScript面試題程式設計師Web前端JavaScript面試題
- 好程式設計師HTML5培訓技術分享JavaScript 閉包程式設計師HTMLJavaScript
- 好程式設計師技術分享html5和JavaScript的區別程式設計師HTMLJavaScript
- 好程式設計師web前端培訓分享JavaScript框架J程式設計師Web前端JavaScript框架
- 好程式設計師Java教程分享Java技術知識點總結程式設計師Java
- 好程式設計師Java教程分享Java面試常見技術難題程式設計師Java面試
- 好程式設計師Java教程分享Java開發主流框架程式設計師Java框架
- 好程式設計師web前端教程分享javascript 練習題程式設計師Web前端JavaScript
- 好程式設計師web前端教程分享JavaScript簡寫方法程式設計師Web前端JavaScript
- 好程式設計師Web前端教程分享JavaScript開發技巧程式設計師Web前端JavaScript
- 好程式設計師JavaScript教程分享JavaScript中變數和作用域程式設計師JavaScript變數
- 好程式設計師Java教程分享面試中Spring的技術問題程式設計師Java面試Spring
- 好程式設計師教程分享Java註解和運用註解程式設計程式設計師Java
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 好程式設計師Java教程分享JavaScript常見面試題五程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題三程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題二程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題一程式設計師JavaScript面試題
- 好程式設計師web前端教程分享JavaScript Math(算數)物件程式設計師Web前端JavaScript物件
- 好程式設計師web前端技術分享css盒模型程式設計師Web前端CSS模型
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師web前端技術分享移動端頁面佈局程式設計師Web前端
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師web前端教程分享前端javascript練習題二程式設計師Web前端JavaScript
- 好程式設計師web前端教程分享前端javascript練習題三程式設計師Web前端JavaScript
- 好程式設計師web前端教程分享前端 javascript 練習題二程式設計師Web前端JavaScript
- 好程式設計師web前端教程分享JavaScript的執行機制!程式設計師Web前端JavaScript
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師web前端技術分享媒體查詢程式設計師Web前端
- 好程式設計師+爛技術=痛苦程式設計師
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師技術分析JavaScript閉包特性詳解程式設計師JavaScript
- 好程式設計師分享JavaScript建立物件的方式!程式設計師JavaScript物件
- 好程式設計師web前端教程分享前端javascript練習題之promise程式設計師Web前端JavaScriptPromise