第一章 事件篇
鼠標(biāo)事件
1. click與dbclick事件
click()
: 監(jiān)聽(tīng)用戶的單機(jī)操作
$("#test").click(function() {
//this指向 div元素
});
dbclick
: 監(jiān)聽(tīng)用戶的雙擊操作
2. mousedown與mouseup
監(jiān)聽(tīng)用戶鼠標(biāo)的按下和彈起。
$("button:eq(0)").mousedown(function(e) {
alert('e.which: ' + e.which)
})
** 用event 對(duì)象的which區(qū)別按鍵:**
敲擊鼠標(biāo)左鍵which的值是1,敲擊鼠標(biāo)中鍵which的值是2,敲擊鼠標(biāo)右鍵which的值是3
3. mousemove 事件
監(jiān)聽(tīng)用戶鼠標(biāo)移動(dòng)的操作
$("#test").mousemove(function() {
//this指向 div元素
});
4. mouseover 和 mouseout 事件
移入和移除事件
5. mouseenter與mouseleave事件
監(jiān)聽(tīng)用戶移動(dòng)到內(nèi)部的操作
mouseenter事件和mouseover的區(qū)別
關(guān)鍵點(diǎn)就是:冒泡的方式處理問(wèn)題
mouseover為例:
<div class="aaron2"> <p>鼠標(biāo)離開(kāi)此區(qū)域觸發(fā)mouseleave事件</p> </div>
如果在p元素與div元素都綁定mouseover事件,鼠標(biāo)在離開(kāi)p元素,但是沒(méi)有離開(kāi)div元素的時(shí)候,觸發(fā)的結(jié)果:
- p元素響應(yīng)事件
- div元素響應(yīng)事件
這里的問(wèn)題是div為什么會(huì)被觸發(fā)? 原因就是事件冒泡的問(wèn)題,p元素觸發(fā)了mouseover,他會(huì)一直往上找父元素上的mouseover事件,如果父元素有mouseover事件就會(huì)被觸發(fā)
所以在這種情況下面,jQuery推薦我們使用 mouseenter事件
mouseenter事件只會(huì)在綁定它的元素上被調(diào)用,而不會(huì)在后代節(jié)點(diǎn)上被觸發(fā)
6. hover 事件
鼠標(biāo)劃入和劃出觸發(fā)不同事件,相當(dāng)于mouseover+mouseout
或者mouseenter+mouseleave
$(selector).hover(handlerIn, handlerOut)
7. focusin 和 focusout 事件
focusin
: 獲得焦點(diǎn)時(shí)動(dòng)作
focusout
: 失去焦點(diǎn)時(shí)動(dòng)作
$("#test").focusin(function() {
//this指向 div元素
});
8. blur 與 focus 事件
用于處理表單焦點(diǎn)的事件,類似于 focusin 事件與 focusout 事件
不同: focus()
在元素本身產(chǎn)生,focusin()
在元素包含的元素中產(chǎn)生
9. change 事件
<input>
元素,<textarea>
和<select>
元素的值發(fā)生變化時(shí)通過(guò)change事件去監(jiān)聽(tīng)這些改變的動(dòng)作
$('.target1').change(function(e) {
$("#result").html(e.target.value)
});
10. select 事件
當(dāng) textarea 或文本類型的 input 元素中的文本被選擇時(shí),會(huì)發(fā)生 select 事件。
select事件只能用于<input>
元素與<textarea>
元素。
$("input").select(function(e){
alert(e.target.value)
})
11. submit事件
form元素是有默認(rèn)提交表單的行為,如果通過(guò)submit處理的話,需要禁止瀏覽器的這個(gè)默認(rèn)行為。
傳統(tǒng)的方式是調(diào)用事件對(duì)象e.preventDefault()
來(lái)處理, jQuery中可以直接在函數(shù)中最后結(jié)尾return false
即可。
$("#target").submit(function(data) {
return false; //阻止默認(rèn)行為,提交表單
});
鍵盤(pán)事件
1. keydown()與keyup()
鍵盤(pán)按下和松手時(shí)觸發(fā)的動(dòng)作
2. keypress 事件
keydown 時(shí),每次獲取的內(nèi)容都是之前輸入的,當(dāng)前的額獲取不了。
keypress事件與keydown和keyup的主要區(qū)別:
- 只能捕獲單個(gè)字符,不能捕獲組合鍵
- 無(wú)法響應(yīng)系統(tǒng)功能鍵(如delete,backspace)
- 不區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符
3. on 的多事件綁定
之前學(xué)的鼠標(biāo)事件,表單事件與鍵盤(pán)事件都有個(gè)特點(diǎn),就是直接給元素綁定一個(gè)處理函數(shù),所有這類事件都是屬于快捷處理。翻開(kāi)源碼其實(shí)可以看到,所有的快捷事件在底層的處理都是通過(guò)一個(gè)on
方法來(lái)實(shí)現(xiàn)的。jQuery on()
方法是官方推薦的綁定事件的一個(gè)方法。
$("#elem").click(function(){}) //快捷方式
$("#elem").on('click',function(){}) //on方式
多個(gè)事件綁定同一個(gè)函數(shù)
$("#elem").on("mouseover mouseout",function(){ });
// 通過(guò)空格分離,傳遞不同的事件名,可以同時(shí)綁定多個(gè)事件
多個(gè)事件綁定不同函數(shù)
$("#elem").on({
mouseover:function(){},
mouseout:function(){},
});
// 通過(guò)空格分離,傳遞不同的事件名,可以同時(shí)綁定多個(gè)事件,每一個(gè)事件執(zhí)行自己的回調(diào)方法
將數(shù)據(jù)傳遞到處理程序
function greet( event ) {
alert( "Hello " + event.data.name ); //Hello
}
$( "button" ).on( "click", {name: "Tom"}, greet );
// 可以通過(guò)第二參數(shù)(對(duì)象),當(dāng)一個(gè)事件被觸發(fā)時(shí),要傳遞給事件處理函數(shù)的
on 的事件委托機(jī)制
.on( events ,[ selector ] ,[ data ], handler(eventObject) )
//給body綁定一個(gè)click事件
//沒(méi)有直接a元素綁定點(diǎn)擊事件
//通過(guò)委托機(jī)制,點(diǎn)擊a元素的時(shí)候,事件觸發(fā)
$('body').on('click', 'a', function(e) {
alert(e.target.textContent)
})
事件綁定在最上層div元素上,當(dāng)用戶觸發(fā)在a元素上,事件將往上冒泡,一直會(huì)冒泡在div元素上。如果提供了第二參數(shù),那么事件在往上冒泡的過(guò)程中遇到了選擇器匹配的元素,將會(huì)觸發(fā)事件回調(diào)函數(shù)。
4. 卸載事件off()方法
通過(guò).on()
綁定的事件處理程序;通過(guò)off()
方法移除該綁定。
綁定2個(gè)事件
$("elem").on("mousedown mouseup",fn)
刪除一個(gè)事件
$("elem").off("mousedown")
刪除所有事件
$("elem").off("mousedown mouseup")
快捷方式刪除所有事件,這里不需要傳遞事件名了,節(jié)點(diǎn)上綁定的所有事件講全部銷(xiāo)毀
$("elem").off()
jQuery 事件對(duì)象
1. jQuery 事件對(duì)象的作用
<ul>
<li class="even1"></li>
<li class="even2"></li>
<li class="even2"></li>
.........
</ul>
ul有N個(gè)子元素li(這里只寫(xiě)了3個(gè)),如果我要響應(yīng)每一個(gè)li的事件,那么常規(guī)的方法就是需要給所有的li都單獨(dú)綁定一個(gè)事件監(jiān)聽(tīng),這樣寫(xiě)法很符合邏輯,但是同時(shí)有顯得繁瑣。因?yàn)閘i都有一個(gè)共同的父元素,而且所有的事件都是一致的,這里我們可以采用要一個(gè)技巧來(lái)處理,也是常說(shuō)的『事件委托』,綁定到父元素ul。觸發(fā)li的時(shí)候把這個(gè)事件往上冒泡到ul上,因?yàn)閡l上綁定事件響應(yīng)所以就能夠觸發(fā)這個(gè)動(dòng)作了。唯一的問(wèn)題怎么才知道觸發(fā)的li元素是哪個(gè)一個(gè)?
這里就引出了事件對(duì)象了:
事件對(duì)象是用來(lái)記錄一些事件發(fā)生時(shí)的相關(guān)信息的對(duì)象。事件對(duì)象只有事件發(fā)生時(shí)才會(huì)產(chǎn)生,并且只能是事件處理函數(shù)內(nèi)部訪問(wèn),在所有事件處理函數(shù)運(yùn)行結(jié)束后,事件對(duì)象就被銷(xiāo)毀
event.target
event.target
代表當(dāng)前觸發(fā)事件的元素,可以通過(guò)當(dāng)前元素對(duì)象的一系列屬性來(lái)判斷是不是我們想要的元素
//多事件綁定一
$("ul").on('click',function(e){
alert('觸發(fā)的元素是內(nèi)容是: ' + e.target.textContent)
})
2. jQuery事件的屬性和方法
event.type:獲取事件的類型
event.pageX 和 event.pageY:獲取鼠標(biāo)當(dāng)前相對(duì)于頁(yè)面的坐標(biāo)
event.preventDefault() 方法:阻止默認(rèn)行為
這個(gè)用的特別多,在執(zhí)行這個(gè)方法后,如果點(diǎn)擊一個(gè)鏈接(a標(biāo)簽),瀏覽器不會(huì)跳轉(zhuǎn)到新的 URL 去了。我們可以用 event.isDefaultPrevented() 來(lái)確定這個(gè)方法是否(在那個(gè)事件對(duì)象上)被調(diào)用過(guò)了。
event.stopPropagation() 方法:阻止事件冒泡
event.which:獲取在鼠標(biāo)單擊時(shí),單擊的是鼠標(biāo)的哪個(gè)鍵
event.which
將 event.keyCode
和 event.charCode
標(biāo)準(zhǔn)化了。event.which
也將正常化的按鈕按下(mousedown 和 mouseupevents),左鍵報(bào)告1,中間鍵報(bào)告2,右鍵報(bào)告3。
**event.currentTarget : 在事件冒泡過(guò)程中的當(dāng)前DOM元素 **
冒泡前的當(dāng)前觸發(fā)事件的DOM對(duì)象, 等同于this.
this和event.target的區(qū)別:
js中事件是會(huì)冒泡的,所以this是可以變化的,但event.target不會(huì)變化,它永遠(yuǎn)是直接接受事件的目標(biāo)DOM元素;
.this和event.target都是dom對(duì)象
如果要使用jquey中的方法可以將他們轉(zhuǎn)換為jquery對(duì)象。比如this和$(this)的使用、event.target和$(event.target)的使用;
自定義事件
1. trigger 事件
根據(jù)綁定到匹配元素的給定的事件類型執(zhí)行所有的處理程序和行為。
trigger除了能夠觸發(fā)瀏覽器事件,同時(shí)還支持自定義事件,并且自定義時(shí)間還支持傳遞參數(shù):
$('#elem').on('Aaron', function(event,arg1,arg2) {
alert("自觸自定義時(shí)間")
});
$('#elem').trigger('Aaron',['參數(shù)1','參數(shù)2'])
trigger觸發(fā)瀏覽器事件與自定義事件區(qū)別?
- 自定義事件對(duì)象,是jQuery模擬原生實(shí)現(xiàn)的
- 自定義事件可以傳遞參數(shù)
<body>
<h2>自定義事件trigger</h2>
<div class="left">
<div>
<span></span>
<span>0</span> 點(diǎn)擊次數(shù)
</div>
<button>直接點(diǎn)擊</button>
<button>通過(guò)自定義點(diǎn)擊</button>
</div>
<script type="text/javascript">
//點(diǎn)擊更新次數(shù)
$("button:first").click(function(event, bottonName) {
bottonName = bottonName || 'first';
update($("span:first"), $("span:last"), bottonName);
});
//通過(guò)自定義事件調(diào)用,更新次數(shù)
$("button:last").click(function() {
$("button:first").trigger('click', 'last');
});
function update(first, last, bottonName) {
first.text(bottonName);
var n = parseInt(last.text(), 10);
last.text(n + 1);
}
</script>
</body>
2. triggerHandler 事件
盡管 .trigger(
) 模擬事件對(duì)象,但是它并沒(méi)有完美的復(fù)制自然發(fā)生的事件,若要觸發(fā)通過(guò) jQuery 綁定的事件處理函數(shù),而不觸發(fā)原生的事件,使用.triggerHandler()
來(lái)代替。
triggerHandler與trigger的用法是一樣的,重點(diǎn)看不同之處:
- triggerHandler不會(huì)觸發(fā)瀏覽器的默認(rèn)行為,
.triggerHandler( "submit" )
將不會(huì)調(diào)用表單上的.submit()
-
.trigger()
會(huì)影響所有與 jQuery 對(duì)象相匹配的元素,而.triggerHandler()
僅影響第一個(gè)匹配到的元素 - 使用
.triggerHandler()
觸發(fā)的事件,并不會(huì)在 DOM 樹(shù)中向上冒泡。 如果它們不是由目標(biāo)元素直接觸發(fā)的,那么它就不會(huì)進(jìn)行任何處理 - 與普通的方法返回 jQuery 對(duì)象(這樣就能夠使用鏈?zhǔn)接梅?相反,
.triggerHandler()
返回最后一個(gè)處理的事件的返回值。如果沒(méi)有觸發(fā)任何事件,會(huì)返回undefined
<h2>自定義事件triggerHandler</h2>
<div class="left">
<div id="accident">
<a>triggerHandler事件</a>
<input type="text">
</div>
<button>事件冒泡,觸發(fā)瀏覽器默認(rèn)聚焦行為</button><br><br>
<button>不會(huì)冒泡,不觸發(fā)瀏覽器默認(rèn)聚焦行為</button>
</div>
<script type="text/javascript">
//給input綁定一個(gè)聚焦事件
$("input").on("focus",function(event,title) {
$(this).val(title)
});
$("#accident").on("click",function() {
alert("trigger觸發(fā)的事件會(huì)在 DOM 樹(shù)中向上冒泡");
});
//trigger觸發(fā)focus
$("button:first").click(function() {
$("a").trigger("click");
$("input").trigger("focus");
});
//triggerHandler觸發(fā)focus
$("button:last").click(function() {
$("a").triggerHandler("click");
$("input").triggerHandler("focus","沒(méi)有觸發(fā)默認(rèn)聚焦事件");
});
</script>
第二章 動(dòng)畫(huà)篇
隱藏和顯示
1. hide方法
讓頁(yè)面上的元素不可見(jiàn),一般可以通過(guò)設(shè)置css的display為none屬性。但是通過(guò)css直接修改是靜態(tài)的布局,如果在代碼執(zhí)行的時(shí)候,一般是通過(guò)js控制元素的style屬性,這里jQuery提供了一個(gè)快捷的方法.hide()來(lái)達(dá)到這個(gè)效果。
$elem.hide()
提供參數(shù)
.hide( options )
這是一個(gè)動(dòng)畫(huà)設(shè)置的快捷方式,元素會(huì)執(zhí)行200/600毫秒的動(dòng)畫(huà)后再隱藏
.hide("fast / slow")
$("#a2").hide({
duration: 3000,
complete: function() {
alert('執(zhí)行3000ms動(dòng)畫(huà)完畢')
}
})
2. show方法
css中有display:none屬性,同時(shí)也有display:block,所以jQuery同樣提供了與hide相反的show。
$('elem').hide(3000).show(3000)
- show與hide方法是修改的display屬性,通過(guò)是visibility屬性布局需要通過(guò)css方法單獨(dú)設(shè)置
- 如果使用!important在你的樣式中,比如
display: none !important
,如果你希望.show()
方法正常工作,必須使用.css('display', 'block !important')
重寫(xiě)樣式 - 如果讓show與hide成為一個(gè)動(dòng)畫(huà),那么默認(rèn)執(zhí)行動(dòng)畫(huà)會(huì)改變?cè)氐母叨龋叨龋该鞫取?/li>
3. 隱藏切換toggle方法
切換顯示或隱藏匹配元素
$('elem').toggle(3000);
4. 下拉動(dòng)畫(huà)slideDown
用滑動(dòng)動(dòng)畫(huà)顯示一個(gè)匹配元素
.slideDown( [duration ] [, complete ] )
// 持續(xù)時(shí)間(duration)是以毫秒為單位的,數(shù)值越大,動(dòng)畫(huà)越慢
// 字符串 'fast' 和 'slow' 分別代表200和600毫秒的延時(shí)。默認(rèn)使用400 毫秒的延時(shí)。
$("ele").slideDown(1000, function() {
//等待動(dòng)畫(huà)執(zhí)行1秒后,執(zhí)行別的動(dòng)作....
});
5. 上卷動(dòng)畫(huà)slideUp
用法同 slideDown
6. slideToggle
slideToggle("fast") // 200毫秒延遲
slideToggle("slow") // 600毫秒延遲
淡入淡出效果
1. fdeOut 和 fadeIn
fadeOut()
: 用于隱藏所有匹配的元素,并帶有淡出的過(guò)渡動(dòng)畫(huà)效果.
fadeIn
: 淡入效果
2. 淡入淡出切換fadeToggle
fadeToggle
切換fadeOut
與fadeIn
效果,所謂"切換",即如果元素當(dāng)前是可見(jiàn)的,則將其隱藏(淡出);如果元素當(dāng)前是隱藏的,則使其顯示(淡入)。
3. 淡入效果fadeTo
.fadeTo( duration, opacity ,callback)
duration:參數(shù)規(guī)定效果的時(shí)長(zhǎng).它可以取以下值:"slow","fast" 或毫秒
opacity :不透明度(介于0到1之間)
callback :函數(shù)完成后要執(zhí)行的動(dòng)作
4. toggle與slideToggle以及fadeToggle的比較
操作元素的顯示和隱藏可以有幾種方法。
例如:
改變樣式display為none
設(shè)置位置高度為0
設(shè)置透明度為0
toggle、sildeToggle以及fadeToggle的區(qū)別:toggle:切換顯示與隱藏效果
sildeToggle:切換上下拉卷滾效果
fadeToggle:切換淡入淡出效果
當(dāng)然細(xì)節(jié)上還是有更多的不同點(diǎn):
toggle與slideToggle細(xì)節(jié)區(qū)別:
- toggle:動(dòng)態(tài)效果為從右至左。橫向動(dòng)作,toggle通過(guò)display來(lái)判斷切換所有匹配元素的可見(jiàn)性
- slideToggle:動(dòng)態(tài)效果從下至上。豎向動(dòng)作,slideToggle 通過(guò)高度變化來(lái)切換所有匹配元素的可見(jiàn)性
fadeToggle方法
- fadeToggle() 方法在 fadeIn() 和 fadeOut() 方法之間切換。
- 元素是淡出顯示的,fadeToggle() 會(huì)使用淡入效果顯示它們。
- 元素是淡入顯示的,fadeToggle() 會(huì)使用淡出效果顯示它們。
- 注釋:隱藏的元素不會(huì)被完全顯示(不再影響頁(yè)面的布局)
自定義動(dòng)畫(huà)
1. animate
精確的控制樣式屬性從而執(zhí)行動(dòng)畫(huà)
.animate( properties ,[ duration ], [ easing ], [ complete ] )
.animate( properties, options )
properties:一個(gè)或多個(gè)css屬性的鍵值對(duì)所構(gòu)成的Object對(duì)象。要特別注意所有用于動(dòng)畫(huà)的屬性必須是數(shù)字的
特別注意單位,屬性值的單位像素(px),除非另有說(shuō)明。單位em 和 %需要指定使用
.animate({ left: 50, width: '50px' opacity: 'show', fontSize: "10em", }, 500);
除了定義數(shù)值,每個(gè)屬性能使用'show', 'hide', 和 'toggle'。這些快捷方式允許定制隱藏和顯示動(dòng)畫(huà)用來(lái)控制元素的顯示或隱藏
.animate({ width: "toggle" });
如果提供一個(gè)以+= 或 -=開(kāi)始的值,那么目標(biāo)值就是以這個(gè)屬性的當(dāng)前值加上或者減去給定的數(shù)字來(lái)計(jì)算的
.animate({ left: '+=50px' }, "slow");
duration時(shí)間
動(dòng)畫(huà)執(zhí)行的時(shí)間,持續(xù)時(shí)間是以毫秒為單位的;值越大表示動(dòng)畫(huà)執(zhí)行的越慢,不是越快。還可以提供'fast' 和 'slow'字符串,分別表示持續(xù)時(shí)間為200 和 600毫秒。
easing動(dòng)畫(huà)運(yùn)動(dòng)的算法
jQuery庫(kù)中默認(rèn)調(diào)用 swing。如果需要其他的動(dòng)畫(huà)算法,請(qǐng)查找相關(guān)的插件
complete回調(diào)
動(dòng)畫(huà)完成時(shí)執(zhí)行的函數(shù),這個(gè)可以保證當(dāng)前動(dòng)畫(huà)確定完成后發(fā)會(huì)觸發(fā)、
.animate( properties, options )
options參數(shù)
- duration - 設(shè)置動(dòng)畫(huà)執(zhí)行的時(shí)間
- easing - 規(guī)定要使用的 easing 函數(shù),過(guò)渡使用哪種緩動(dòng)函數(shù)
- step:規(guī)定每個(gè)動(dòng)畫(huà)的每一步完成之后要執(zhí)行的函數(shù)
- progress:每一次動(dòng)畫(huà)調(diào)用的時(shí)候會(huì)執(zhí)行這個(gè)回調(diào),就是一個(gè)進(jìn)度的概念
- complete:動(dòng)畫(huà)完成回調(diào)
其中最關(guān)鍵的一點(diǎn)就是:
如果多個(gè)元素執(zhí)行動(dòng)畫(huà),回調(diào)將在每個(gè)匹配的元素上執(zhí)行一次,不是作為整個(gè)動(dòng)畫(huà)執(zhí)行一次
列出常用的方式:
$('#elem').animate({
width: 'toggle',
height: 'toggle'
}, {
duration: 5000,
specialEasing: {
width: 'linear',
height: 'easeOutBounce'
},
complete: function() {
$(this).after('<div>Animation complete.</div>');
}
});
<select id="animation">
<option value="1">動(dòng)畫(huà)step動(dòng)畫(huà)</option>
<option value="2">動(dòng)畫(huà)progress回調(diào)</option>
</select>
<a></a>
<input id="exec" type="button" value="執(zhí)行動(dòng)畫(huà)">
<script type="text/javascript">
$("#exec").click(function() {
var v = $("#animation").val();
var $aaron = $("#aaron");
if (v == "1") {
//觀察每一次動(dòng)畫(huà)的改變
$aaron.animate({
height: '50'
}, {
duration :2000,
//每一個(gè)動(dòng)畫(huà)都會(huì)調(diào)用
step: function(now, fx) {
$aaron.text('高度的改變值:'+now)
}
})
} else if (v == "2") {
//觀察每一次進(jìn)度的變化
$aaron.animate({
height: '50'
}, {
duration :2000,
//每一步動(dòng)畫(huà)完成后調(diào)用的一個(gè)函數(shù),
//無(wú)論動(dòng)畫(huà)屬性有多少,每個(gè)動(dòng)畫(huà)元素都執(zhí)行單獨(dú)的函數(shù)
progress: function(now, fx) {
$aaron.text('進(jìn)度:'+arguments[1])
// var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
// alert(data)
}
})
}
});
2. 停止動(dòng)畫(huà)stop
.stop( [clearQueue ], [ jumpToEnd ] )
.stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] )
stop還有幾個(gè)可選的參數(shù),簡(jiǎn)單來(lái)說(shuō)可以這3種情況
-
.stop();
停止當(dāng)前動(dòng)畫(huà),點(diǎn)擊在暫停處繼續(xù)開(kāi)始 -
.stop(true);
如果同一元素調(diào)用多個(gè)動(dòng)畫(huà)方法,尚未被執(zhí)行的動(dòng)畫(huà)被放置在元素的效果隊(duì)列中。這些動(dòng)畫(huà)不會(huì)開(kāi)始,直到第一個(gè)完成。當(dāng)調(diào)用.stop()的時(shí)候,隊(duì)列中的下一個(gè)動(dòng)畫(huà)立即開(kāi)始。如果clearQueue參數(shù)提供true值,那么在隊(duì)列中的動(dòng)畫(huà)其余被刪除并永遠(yuǎn)不會(huì)運(yùn)行 -
.stop(true,true);
當(dāng)前動(dòng)畫(huà)將停止,但該元素上的 CSS 屬性會(huì)被立刻修改成動(dòng)畫(huà)的目標(biāo)值
$("#aaron").animate({
height: 300
}, 5000)
$("#aaron").animate({
width: 300
}, 5000)
$("#aaron").animate({
opacity: 0.6
}, 2000)
- stop():只會(huì)停止第一個(gè)動(dòng)畫(huà),第二個(gè)第三個(gè)繼續(xù)
- stop(true):停止第一個(gè)、第二個(gè)和第三個(gè)動(dòng)畫(huà)
- stop(true ture):停止動(dòng)畫(huà),直接跳到第一個(gè)動(dòng)畫(huà)的最終狀態(tài)
jQuery 核心
1. each方法的應(yīng)用
語(yǔ)法
jQuery.each(array, callback )
jQuery.each( object, callback )
第一個(gè)參數(shù)傳遞的就是一個(gè)對(duì)象或者數(shù)組,第二個(gè)是回調(diào)函數(shù)
$.each(["Aaron", "Hello"], function(index, value) {
//index是索引,也就是數(shù)組的索引
//value就是數(shù)組中的值了
});
jQuery.each()
函數(shù)還會(huì)根據(jù)每次調(diào)用函數(shù)callback的返回值來(lái)決定后續(xù)動(dòng)作。如果返回值為false,則停止循環(huán)(相當(dāng)于普通循環(huán)中的break);如果返回其他任何值,均表示繼續(xù)執(zhí)行下一個(gè)循環(huán)。
$.each(["Aaron", "Hello"], function(index, value) {
return false; //停止迭代
});
jQuery方法可以很方便的遍歷一個(gè)數(shù)據(jù),不需要考慮這個(gè)數(shù)據(jù)是對(duì)象還是數(shù)組。
$("#exec").click(function() {
var v = $("#animation").val();
var $aaron = $("#aaron");
$aaron.empty();
if (v == "1") {
// 遍歷數(shù)組元素
$.each(['Aaron', 'Hello','aaa','bbb'], function(i, item) {
$aaron.append("索引=" + i + "; 元素=" + item);
});
} else if (v == "2") {
// 遍歷對(duì)象屬性
$.each({
name: "張三",
age: 18
}, function(property, value) {
$aaron.append("屬性名=" + property + "; 屬性值=" + value);
});
}
}
2. 查找數(shù)組中的索引 inArray
jQuery.inArray()
函數(shù)用于在數(shù)組中搜索指定的值,并返回其索引值。如果數(shù)組中不存在該值,則返回 -1。
語(yǔ)法:
jQuery.inArray( value, array ,[ fromIndex ] )
用法非常簡(jiǎn)單,傳遞一個(gè)檢測(cè)的目標(biāo)值,然后傳遞原始的數(shù)組,可以通過(guò)fromIndex規(guī)定查找的起始值,默認(rèn)數(shù)組是0開(kāi)始
例如:在數(shù)組中查找值是5的索引
$.inArray(5,[1,2,3,4,5,6,7]) //返回對(duì)應(yīng)的索引:4
注意:
如果要判斷數(shù)組中是否存在指定值,你需要通過(guò)該函數(shù)的返回值不等于(或大于)-1來(lái)進(jìn)行判斷
3. 去空格神器trim方法
jQuery.trim()函數(shù)用于去除字符串兩端的空白字符
4. DOM元素的獲取get方法
jQuery是一個(gè)合集對(duì)象,如果需要單獨(dú)操作合集中的的某一個(gè)元素,可以通過(guò).get()
方法獲取到
以下有3個(gè)a元素結(jié)構(gòu):
<a>1</a>
<a>2</a>
<a>3</a>
通過(guò)jQuery獲取所有的a元素合集$("a")
,如果想進(jìn)一步在合集中找到第二2個(gè)dom元素單獨(dú)處理,可以通過(guò)get方法
語(yǔ)法:
.get( [index ] )
注意2點(diǎn)
- get方法是獲取的dom對(duì)象,也就是通過(guò)
document.getElementById
獲取的對(duì)象 - get方法是從0開(kāi)始索引
所以第二個(gè)a元素的查找:$(a).get(1)
負(fù)索引值參數(shù)
get方法還可以從后往前索引,傳遞一個(gè)負(fù)索引值,注意的負(fù)值的索引起始值是-1
同樣是找到第二元素,可以傳遞$(a).get(-2)
5. DOM元素的獲取index方法
.index()
方法,從匹配的元素中搜索給定元素的索引值,從0開(kāi)始計(jì)數(shù)。
語(yǔ)法:參數(shù)接受一個(gè)jQuery或者dom對(duì)象作為查找的條件
.index() // 返回值時(shí)jQuery對(duì)象中第一個(gè)元素相對(duì)于它同輩元素的位置
.index( selector ) // 返回值時(shí)原生元素相對(duì)于選擇器匹配的位置
.index( element ) // 返回值時(shí)傳入的元素相對(duì)于原生集合的位置。如果找不到匹配的元素,則 .index() 返回 -1
<ul>
<a></a>
<li id="test1">1</li>
<li id="test2">2</li>
<li id="test3">3</li>
</ul>
$("li").index()
沒(méi)有傳遞參數(shù),反正的結(jié)果是1,返回同輩的排列循序,第一個(gè)li之前有a元素,同輩元素是a開(kāi)始為0,所以li的開(kāi)始索引是1
如果要快速找到第二個(gè)li在列表中的索引,可以通過(guò)如下2種方式處理
$("li").index(document.getElementById("test2")) //結(jié)果:1
$("li").index($("#test2")) //結(jié)果:1