[jQuery] 事件和動畫詳解
1. 事件
1.1 加載DOM
在頁面加載完畢后,瀏覽器會通過JavaScript為DOM元素添加事件。在JavaScript代碼中,通常使用window.onload方法,而在jQuery中,使用的是$(document).ready()方法。$(document).ready()方法和window.onload方法有相似的功能,但是在執(zhí)行時機方面是有區(qū)別的。window.onload方法是在網(wǎng)頁中所有的元素完全加載到瀏覽器后才執(zhí)行,而$(document).ready()方法注冊的事件處理程序,在DOM完成就緒時就可以被調(diào)用。
由于在$(document).ready()方法內(nèi)注冊的事件,只要DOM就緒就會被執(zhí)行,因此可能此時元素的關(guān)聯(lián)文件未下載完。要解決這個問題,可以使用jQuery中另一個關(guān)于頁面加載的方法load()方法。load()方法會在元素的onload事件中綁定一個處理函數(shù)。如果處理函數(shù)綁定給window對象,則會在所有內(nèi)容加載完畢后觸發(fā),例如:
$(window).load(function(){
});
每次調(diào)用$(document).ready()方法都會在現(xiàn)有的行為上追加新的行為,這些行為函數(shù)會根據(jù)注冊的順序依次執(zhí)行。它也可以簡寫為:
$(function(){
});
另外,$(document)也可以簡寫為$(),例如:
$().ready(function(){
});
1.2 事件綁定
在文檔裝載完成后,如果要為元素綁定事件來完成某些操作,可以使用bind()方法來對匹配元素進行特定事件的綁定,例如:
bind(type[,data],fn);
第一個參數(shù)是事件類型,包括:blur、focus、load、resize、scroll、unload、click、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keypress、keyup和error等。
第二個參數(shù)是可選參數(shù),作為event.data屬性值傳遞給事件對象的額外數(shù)據(jù)對象。
第三個參數(shù)則是用來綁定的處理函數(shù)。
例如:
$("#mydiv").bind("click",function(){
$(this).next("div.content").show();
});
與ready()方法一樣,bind()方法也可以多次調(diào)用。像click、mouseover和mouseout這類事件,在程序中經(jīng)常用到,jQuery為此也提供了一套簡寫方法,例如:
$("#mydiv").mouseover(function(){
$(this).next("div.content").show();
});
1.3 合成事件
jQuery有兩個合成事件:hover()方法和toggle()方法。hover()方法的語法結(jié)構(gòu)為:
hover(enter,leave);
hover()方法用于模擬光標懸停事件。當光標移動到元素上時,會觸發(fā)指定的第一個函數(shù),當光標移出這個元素時,會觸發(fā)指定的第二個函數(shù)。
toggle(fn1,fn2,...fnN);
toggle()方法用于模擬鼠標連續(xù)單擊事件,第一次單擊元素,觸發(fā)指定的第一個函數(shù),當再次單擊同一個元素時,則觸發(fā)指定的第2個函數(shù),以此類推,直到最后一個。
1.4 事件冒泡
在頁面上可以有多個事件,也可以多個元素響應同一個事件。由于IE-DOM和標準DOM實現(xiàn)事件對象的方式不同,在不同瀏覽器中獲取事件對象比較困難。jQuery進行了相應的擴展和封裝,從而使在任何瀏覽器中都能輕松獲取事件對象,例如:
$("element").bind("click",function(event){
});
停止事件冒泡可以阻止事件中其他對象的事件處理函數(shù)被執(zhí)行,在jQuery中提供了stopPropagation()方法來停止事件冒泡,例如:
$("span").bind("click",function(event){
var txt = $("#msg").html() + "<p>click!</p>";
$("#msg").html(txt);
event.stopPropagation();
});
網(wǎng)頁中的元素有自己默認的行為,例如單擊超鏈接后會跳轉(zhuǎn)等。在jQuery中,提供了preventDefault()方法來阻止元素的默認行為,例如:
$("#button").bind("click",function(event){
var txt = $("#msg").html() + "<p>click!</p>";
$("#msg").html(txt);
event.preventDefault();
});
如果想同時對事件對象停止冒泡和默認行為,可以在事件處理函數(shù)中返回false。
1.5 事件對象的屬性
jQuery在遵循W3C規(guī)范的情況下,對事件對象的常用屬性進行了封裝,使事件處理在各瀏覽器下都可以正常運行而不需要進行瀏覽器類型判斷。常用的方法如下:
1) event.type(): 獲取到事件的類型。
2) event.preventDefault(): 阻止默認的事件行為。
3) event.stopPropagation(): 阻止事件的冒泡。
4) event.target(): 獲取到觸發(fā)事件的元素。
5) event.relatedTarget(): 獲取事件發(fā)生的相關(guān)元素。
6) event.pageX()/event.pageY(): 獲取到光標相對于頁面的x坐標和y坐標。
7) event.which(): 在鼠標單擊事件中獲取到鼠標的左、中、右鍵。
8) event.metaKey(): 鍵盤事件中獲取<ctrl>鍵。
9) event.originalEvent(): 指向原始的事件對象。
1.6 移除事件
unbind()方法可以用于刪除元素的事件,語法結(jié)構(gòu)如下:
unbind([type][,data]);
如果沒有參數(shù),則刪除所有綁定的事件。如果提供了事件類型,則只刪除該類型的綁定事件。如果把在綁定時傳遞的處理函數(shù)作為第二個參婁和,則只有這個特定事件處理函數(shù)才會被刪除,例如:
$("#delAll").click()(
$("#btn").unbind("click");
);
one()方法的結(jié)構(gòu)與bind()方法類似,使用方法也與bind()方法相,語法結(jié)構(gòu)如下:
one(type[,data],fn);
使用one()方法為元素幫定事件后,只在第一次觸發(fā)時執(zhí)行,之后毫無作用。
1.7 模擬操作
有時需要通過模擬用戶操作,來達到單擊效果,可以使用trigger()方法完成,例如:
$("#btn").trigger("click");
也可以直接用簡化寫法click()來達到同樣的效果。
trigger(type[,data])方法有兩個參數(shù),第二個參數(shù)是要傳遞給事件處理函數(shù)的附加數(shù)據(jù),以數(shù)組形式傳遞。
trigger()方法觸發(fā)事件后,會執(zhí)行瀏覽器默認操作,例如:
$("input").trigger("focus");
以上代碼不僅會觸發(fā)focus事件,也會使input元素本身得到焦點,如果不想執(zhí)行瀏覽器默認操作,可以使用另一個類似的方法triggerHandler()方法。
2. 動畫
2.1 show()方法和hide()方法
show()方法和hide()方法是jQuery中最基本的動畫方法。為一個元素調(diào)用hide()方法,會將該元素的display樣式改為"none",例如:
$("#mydiv").hide();
當把元素隱藏后,可以使用show()方法將元素的display樣式設(shè)置為先前的顯示狀態(tài),例如:
$("#mydiv").show();
show()方法可以指定一個速度參數(shù),例如,指定一個速度關(guān)鍵字"slow",例如:
$("#mydiv").show("slow");
運行該代碼后,元素將在600毫秒內(nèi)慢慢顯示,其他的速度關(guān)鍵字還有"normal"和"fast",不僅如此,還可以為顯示速度指定一個數(shù)字,單位是毫秒。
2.2 fadeIn()方法和fadeOut()方法
與show()方法不同的時,fadeIn()和fadeOut()方法只改變元素的不透明度。fadeOut()方法會在指定時間內(nèi)降低元素的不透明度,直到元素完全消失。fadeIn()方法則相反,例如:
$("#mydiv").fadeOut();
2.3 slideUp()方法和slideDown()方法
slideUp()方法和slideDown()方法只會改變元素的高度。如果一個元素的display屬性值為"none",當調(diào)用slideDown()方法時,這個元素將由上至下延伸顯示。slideUp()方法正好相反,元素將由下到上縮短隱藏,例如:
$("#mydiv").slideDown();
2.4 自定義動畫方法animate()
如果需要采取一些高級的自定義動畫來解決更多控制的問題,可以使用animate()方法來自定義動畫,語法結(jié)構(gòu)為:
animate(params,speed,callback);
params包含樣式屬性及值的映射,比如{property1:"value1",property2:"value2",...},speed是可選的速度參數(shù),callback是在動畫完成時執(zhí)行的函數(shù),例如:
$("#mydiv").animate({left:"+=500px"},300);
"+="符號或"-="符號即表示在當前位置累加或者累減。如果需要同時執(zhí)行多個動畫,可以寫如下代碼:
$("#mydiv").animate({left:"500px",height:"200px"},3000);
如果只想按順序執(zhí)行動畫,只需把代碼拆開即可,例如:
$("#mydiv").animate({left:"500px"},3000);
$("#mydiv").animate({height:"200px"},3000);
或者:
$("#mydiv").animate({left:"500px"},3000).animate({height:"200px"},3000);
2.5 停止動畫和判斷是否處于動畫狀態(tài)
很多時候需要停止匹配元素正在進行的動畫,需要使用stop()方法,語法結(jié)構(gòu)為:
stop([clearQueue][,gotoEnd]);
參數(shù)clearQueue和gotoEnd都是可選的參數(shù),為Boolean值,clearQueue代表是否要清空未執(zhí)行完的動畫隊列,gotoEnd代表是否直接將正在執(zhí)行的動畫跳轉(zhuǎn)到末狀態(tài)。
在使用animate()方法的時候,要避免動畫積累而導致的動畫與用戶的行為不一致,解決方法是判斷元素是否正處于動畫狀態(tài),例如:
if(!$("#mydiv").is("animated")){
}
2.6 其他動畫方法
jQuery中還有3個專門用于交互的動畫方法:toggle(speed,[callback]),slideToggle(speed,[callback]),fadeTo(speed,opacity,[callback])。
toggle()方法可以切換元素的可見狀態(tài),例如:
$("#mydiv").click(function(){
$(this).next("div.content").toggle();
});
slideToggle()方法通過高度變化來切換匹配元素的可見性,例如:
$("#mydiv").click(function(){
$(this).next("div.content").slideToggle();
});
fadeTo()方法可以把元素的不透明度以漸進方式調(diào)整到指定的值,例如:
$("#mydiv").click(function(){
$(this).next("div.content").fadeTo(600,0.2);
});
總結(jié)
以上所述是小編給大家介紹的[jQuery] 事件和動畫詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
使用jquery實現(xiàn)的一個圖片延遲加載插件(含圖片延遲加載原理)
這篇文章主要介紹了使用jquery實現(xiàn)的一個圖片延遲加載插件,同時講解了圖片延遲加載的原理,還有無阻塞加載廣告的功能哦,需要的朋友可以參考下2014-06-06
jQuery增加和刪除表格項目及實現(xiàn)表格項目排序的方法
jQuery對表格的操作是老生常談的問題了,各種插件也到處都是,這里我們還是來從技術(shù)著手jQuery增加和刪除表格項目及實現(xiàn)表格項目排序的方法:2016-05-05
jquery實現(xiàn)點擊label的同時觸發(fā)文本框點擊事件的方法
這篇文章主要介紹了jquery實現(xiàn)點擊label的同時觸發(fā)文本框點擊事件的方法,涉及jQuery鼠標事件及頁面元素操作的技巧,需要的朋友可以參考下2015-06-06
jQuery中常用的遍歷函數(shù)用法實例總結(jié)
這篇文章主要介紹了jQuery中常用的遍歷函數(shù)用法,以實例形式分析并總結(jié)了jquery中常見的遍歷函數(shù)使用方法與注意事項,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09

