梳理一下Jquery中還不太熟悉的APIweb
語法糖,支持多個事件綁定同一個函數ide
$("p").on("mouseover mouseout",function(){ alert(1); });
語法糖,支持多個事件綁定不一樣的函數函數
$("p").on({ mouseover:function(){alert(1)}, mouseout:function(){alert(2)}, click:function(){alert(3)} });
語法糖,支持多個事件綁定不一樣的函數性能
$(document).ready(function(){ $("p").on("myOwnEvent", function(event, showName){ $(this).text(showName + "! What a beautiful name!").show(); }); $("button").click(function(){ $("p").trigger("myOwnEvent",["Anja"]); }); });
能夠往callback裏傳參動畫
function callback(event){ alert(event.data.msg); } $(document).ready(function(){ $("p").on("click", {msg: "You just clicked me!"}, callback) });
能夠給未建立的DOM上綁定事件(只能採起事件委託的形式)this
$("button").click(function(){ $("<p class="newP">This is a new paragraph.</p>").insertAfter("button"); }); $("div").on("click",".newP",function(){ $(this).slideToggle(); }); 因此寫成這樣是沒法觸發的 $("button").click(function(){ $("<p class="newP">This is a new paragraph.</ p>").insertAfter("button"); }); $(".newP").on("click",function(){ $(this).slideToggle(); });
針對是大量元素都綁定了同一事件的狀況,建議採用事件委託
的形式對事件進行處理.
好比咱們但願點擊$('.btn')會彈出彈框alert("click me!");spa
<div class="parent"> <span class="btn">click me</span> <span class="btn">click me</span> <span class="btn">click me</span> <span>default</span> <span>default</span> </div>
不建議 $('.btn').on('click',function(){alert('click me')})
而是建議$('.parent').on('click','.btn',function(){alert('click me')})
code
由於在大量子元素上綁事件,至關因而每個$('.btn')都綁定了一個匿名回調函數,效率低,資源率佔用高,性能不好.
咱們能夠利用事件向上冒泡的特性,只要在父元素上綁定一次事件處理的回調函數便可. 由於每次子元素產生事件,冒泡到父元素時父元素會斷定事件源對象e.target,若是e.target==$('.btn')[0], 則觸發回調函數.對象
$(".btn").trigger("click");
好比一個btn點擊以後會對某個元素開始一段動畫. 而且動畫過程期間,再也不響應btn的點擊,直到動畫調用完畢以後.
思路很簡單,對btn元素設定一個狀態標籤lock=0, 動畫調用期間設置lock爲1,動畫完成的回調把lock設置成0. 每次點擊都判斷btn的狀態是否爲可用.seo
Jquery有animation方法可以對元素設置動畫,而且能夠傳入callback做爲動畫完成的回調
可是可否對寫在CSS文件中的動畫設置回調?
答案是確定的
CSS 動畫播放時,會發生如下三個事件:
animationstart
- CSS 動畫開始後觸發
animationiteration
- CSS 動畫重複播放時觸發
animationend
- CSS 動畫完成後觸發
咱們只要對動畫元素監聽這三個事件,就能對對應的狀態設置回調函數,好比
.ani{ width:30px; height:30px; background:red; animation:myani 5s} @keyframes myani{ 100% {width:500px;} } ... $('.ani').on('webkitAnimationEnd',function(){alert(111)}) ... <div class="ani"></div>
在動畫完成後,會彈出彈框
和Css animation 同樣,播放完畢也會觸發事件transitionEnd