Jquery基礎之動畫操作


   Jquery的動畫效果能夠輕松的為網頁添加動畫效果,為網頁帶來了新的活力。

 一、show()方法和hide()方法

  show()方法和hide()方法是jquery中最基本的動畫方法。使用show()方法會將隱藏的元素顯示出來,使用hide()方法會將元素的屬性設置為display:none。使用hide()方法會記住原來的display屬性值,並把現在的display屬性設置為none;show()方法會元素的屬性設置為hide()前的屬性值。

  示例:

  $("btnShowHide").toggle(function(){$("p").hide();},function(){$("p").show();});

  該示例點擊button按鈕時候交替切換p元素的狀態為隱藏和可見狀態,此時該方法同css("diplay","none/block/inline")效果一樣,但是hide()和show()方法可以帶有參數調整動作的執行速度。分別為"slow","normal","fast",對應時間為0.6秒、0.4秒和0.2秒。也可設置整數指定執行時間數字計數級別是毫秒。如:("p").show(1000);該示例使p元素中1秒內顯示完畢。也能添加回調事件函數。

   二、fadeIn()方法和fadeOut()方法

  fadeIn()方法和fadeOut()方法只改變元素的不透明度借以改變元素的顯示狀態。例:

  $("btnfade").toggle(function(){$("p").hide();},function(){$("p").show();});

  該示例通過改變元素的不透明度改變元素的是顯示狀態,同show()和hide()方法一樣也可以添加速度參數。也能添加回調事件函數。

 三、slideUp()方法和slideDown()方法

  slideUp()方法和slideDown()方法通過改變元素的的顯示狀態。例:

  $("btnHeight").toggle(function(){$("p").hide();},function(){$("p").show();});

  該示例通過改變元素的高度改變元素的是顯示狀態,同show()和hide()方法一樣也可以添加速度參數。也能添加回調事件函數。

 四、自定義動畫

  前面三種類型動畫方法滿足用戶的各種需求,需要采取一些高級的自定義動畫來解決問題,Jquery中定義了animate()方法來實現自定義動畫,語法結構為:animate(params,speed,callback);

  參數如下:params一個包含樣式屬性及值的映射,比如:{width:"500",height:"300",....};speed速度參數,可選。callback在動畫完成時執行的函數,也是可選的。

  1、自定義簡單動畫

  自定義一個簡單動畫使元素中頁面飄動,示例如下:

  先定義樣式

<style type="text/css">
.panel
{
position: relative;  //位置樣式必須為relative或者absolute.
width: 200px;
height: 200px;
border: 1px solid;
background: #96E555;
}
</style>

頁面中定義一個div元素class="panel"。

<div class="panel"></div>

設置元素點擊事件時候觸發動畫事件,事件綁定函數如下:

$(".panel").click(function () {
$(this).animate({ top: "100px", left: "500px" }, 1000);
});

這樣一個簡單的動畫就完成了,頁面加載完成后當點擊元素時候div元素會中1秒內,移動到指定位置。

2、累加動畫

上面只實現了一次性位置改變,也實現累加改變位置動畫,只需要改變事件綁定函數如下:

$(".panel").click(function () {
$(this).animate({ top:"+=100px", left: "+=50px" }, 1000);
});

這樣連續點擊div元素時元素位置會連續改變。實現了動畫的累加。

3、順序動畫

  上面的動畫top位置和left位置是同時改變的,也可以順序執行位置改變動畫,如下:

$(".panel").click(function () {

$(this).animate({ top: "+=50px" }, 1000);
$(this).animate({ left: "+=50px" }, 1000);
});

這樣當點擊div元素時候動畫就會順序執行先改變top位置,再改變left位置,連續點擊連續改變。也可以改寫成鏈式形式如下:

$(".panel").click(function () {

$(this).animate({ top: "+=50px" }, 1000).animate({ left: "+=50px" }, 1000);
});

像這樣的動畫的執行按順序執行,又可以稱為"動畫隊列"。

4、回調函數

  在動畫結束后可以使用回調函數改變元素的樣式、內容等來達到想要的顯示效果。如在div元素示例中添加回調函數如下:

   $(this).animate({ top: "+=50px" }, 1000).animate({ left: "+=50px" }, 1000, function () { $(this).css("border", "5px solid blue"); });

  通過在最后一個animate方法加添加回調函數,在動畫結束后回調函數會改變元素的邊框寬度和顏色。

   5、停止動畫和動畫狀態

  上面的示例中如果連續點擊div元素,動畫會一直執行相應的次數后才停止,使用stop()方法可以停止正在進行的動畫。stop方法結構是stop([clearqueue],[gotoEnd])兩個參數都是可選參數,參數都是bool值true或false。如果clearqueue為true則方法會清除動畫隊列,如果gotoEnd為true動畫直接跳轉到結束狀態。以合成事件hover為例:使用上面的div元素為元素綁定hover事件如下:

  $(".panel").hover(function(){$(this).stop().animate({height:"200px"},2000);},function(){$(this).stop().animate({height:"300px"},2000);});

  該示例中使用無參數的stop()方法停止當前正在執行的動畫然后執行stop()方法后面的新的動畫。不帶參數的stop方法停止的是當前正在執行的動畫,如果是當前動畫后有動畫等待執行stop()方法后后面的動畫會繼續執行,此時需要使用帶參數的stop方法停止動畫並清空動畫隊列,或者使動畫直接到達最后狀態。

  動畫狀態用於判斷元素是否處理正在動畫狀態,判斷方法和jquery選擇器一樣使用.is(":animated")方法來判斷,使用該方法可以跟據元素是否處於動畫狀態來做出相應的操作。例:如果元素處理動畫狀態就不添加新的動畫,否則添加新動畫。

  if(!$(".panel").is(":animated")){$(this).animate({left:"+=300"},2000);}

 6、交互的動畫方法

  Jquery提供了3種專門用於交互的動畫方法:toggle(speed,[callback])、slideToggle(speed,[callback])、fadeTo(speed,opacity,[callback])。

  toggle方法用於切換元素的可見性狀態,如果元素是隱藏的則顯示元素,如果元素是可見的則隱藏狀態。例:

$("#btntoggle").click(function () {

$(this).prev("div.panel").toggle(3000, function () { alert($("div.panel").is(":visible")); });

});

該示例使用toogle交互方法改變div元素的可見性,在動畫結束后打印元素的當前可見性狀態。

slideToggle方法用於通過改變高度改變元素的可見性狀態,例:

$("#btntoggle").click(function () {

$(this).prev("div.panel").slideToggle(3000, function () { alert($("div.panel").is(":visible")); });

});

該示例通過使用slideToggle方法改變元素的高度實現元素的可見性改變,最后在動畫執行結束后執行回調函數打印元素的當前狀態。

fadeTo方法用於改變元素的透明度,使用該方法也可以實現可見性的改變。例:

$("#btntoggle").click(function () {

$(this).prev("div.panel").fadeTo(3000,0.2,function () { alert($("div.panel").css("opacity"); });

});

 

使用方法改變元素的透明度,然后使用回調函數打印元素的當前透明度。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM