日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JQuery绑定及效果

發布時間:2024/4/11 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JQuery绑定及效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JQuery綁定及效果

文章目錄

  • JQuery綁定及效果
    • 一、JQuery的四種事件綁定
      • 1.bind(type,[data],function(eventObject))
      • 2.live(type, [data], fn)
      • 3.delegate
      • 4.on
    • 二、this
      • 1.獲取元素的索引值
      • 2.this和$(this)
      • 3.jQuery中this與$(this)的區別
    • 三、效果
      • 1.隱藏和顯示
      • 2.淡入淡出
      • 3.jQuery 滑動方法
      • 4.jQuery 動畫 - animate() 方法
      • 5.jQuery stop()
      • 6.chaining

一、JQuery的四種事件綁定

jQuery提供了多種綁定事件的方式,每種方式各有其特點,明白了它們之間的異同點,有助于我們在寫代碼的時候進行正確的選擇,從而寫出優雅而容易維護的代碼。下面我們來看下jQuery中綁定事件的方式都有哪些。

jQuery中提供了四種事件監聽方式,分別是bind、live、delegate、on,對應的解除監聽的函數分別是unbind、die、undelegate、off。

1.bind(type,[data],function(eventObject))

  • bind是使用頻率較高的一種,作用就是在選擇到的元素上綁定特定事件類型的監聽函數,參數的含義如下:
  • type:事件類型,如click、change、mouseover等;
  • data:傳入監聽函數的參數,通過event.data取到??蛇x;
  • function:監聽函數,可傳入event對象,這里的event是jQuery封裝的event對象,與原生的event對象有區別,使用時需要注意
  • bind的源碼:
bind: function( types, data, fn ) {return this.on( types, null, data, fn );}$('#myol li').bind('click',getHtml);
  • bind的特點就是會把監聽器綁定到目標元素上,有一個綁一個,在頁面上的元素不會動態添加的時候使用它沒什么問題。
  • 但如果列表中動態增加一個“列表元素”,點擊它是沒有反應的,必須再bind一次才行。 要想不這么麻煩,我們可以使用live。
  • jQuery還有一種事件綁定的簡寫方式如a.click(function(){});、a.change(function(){});等,它們的作用與bind一樣,僅僅是簡寫而已。

2.live(type, [data], fn)

  • live的參數和bind一樣,它又有什么蹊蹺呢,我們還是先瞄一眼源碼:
live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn );return this;}
  • 可以看到**live方法并沒有將監聽器綁定到自己(this)身上,而是綁定到了this.context上了**。這個context是什么東西呢?其實就是元素的限定范圍,看了下面的代碼就清楚了:
$('#myol li').context; //document$('#myol li','#myol').context; //document$('#myol li',$('#myol')[0]); //ol
  • 通常情況下,我們都不會像第三種方式那樣使用選擇器,所以也就認為這個context通常就是document了,即live方法把監聽器綁定到了document上了。
  • 不把監聽器直接綁定在元素上,你是不是想起事件委托機制來了呢?
  • live正是利用了事件委托機制來 完成事件的監聽處理,把節點的處理委托給了document。在
  • 監聽函數中,我們可以用event.currentTarget來獲取到當前捕捉到事件的 節點。下面的例子來揭曉:
$('#myol li').live('click',getHtml);

3.delegate

  • live存在那樣的缺點,所以我們就思考,既然老爺子負擔那么重,可不可以別把監聽器綁定在document上呢,
  • 綁定在就近的父級元素上不就好了。順應正常邏輯,delegate破殼而出
  • 參數多了一個selector,用來指定觸發事件的目標元素,監聽器將被綁定在調用此方法的元素上。看看源碼:
delegate: function( selector, types, data, fn ) {return this.on( types, selector, data, fn );}
  • 又是調用了on,并且把selector傳給了on。看來這個on真的是舉足輕重的東西。照樣先不管它。

看看示例先:

$('#myol').delegate('li','click',getHtml);

4.on

看了這么多,你是不是迫不及待想看看這個on的真實面目了呢,這就來:

on(type,[selector],[data],fn)
  • 參數與delegate差不多但還是有細微的差別,首先type與selector換位置了
  • 其次selector變為了可選項。交換位置的原因不好查證,應該是為了讓視覺上更舒服一些吧。

我們先不傳selector來看一個例子:

$('#myol li').on('click',getHtml);
  • 可以看到event.currentTarget是li自己,與bind的效果一樣。至于傳selector進去,就是跟delegate一樣的意義了,除了參數順序不同,其他完全一樣。
  • 終于看到on的真實作用了,那么,這么多的事件綁定方式,我們該如何進行選擇呢?
  • 其實這個問題是完全不必糾結的,因為你已經知道他們之間的區別了不是么?根據實際情況斟酌使用就行。
  • 不過官方有一個推薦就是盡量使用on,因為其他 方法都是內部調用on來完成的,直接使用on可以提高效率,而且你完全可以用on來代替其他三種寫法。
  • 至于如何代替我想就不必這么直白的寫出來了,真正理 解它們的區別之后自然而然也就不是難事了
//給元素綁定click事件,可以用如下方法: $('#btn1').click(function(){// 內部的this指的是原生對象// 使用jquery對象用 $(this)})

二、this

1.獲取元素的索引值

有時候需要獲得匹配元素相對于其同胞元素的索引位置,此時可以用index()方法獲取

var $li = $('.list li').eq(1); alert($li.index()); // 彈出1 ...... <ul class="list"><li>1</li><li>2</li><li>4</li><li>5</li><li>6</li> </ul>

2.this和$(this)

當你用的是jquery時,就用$(this),如果是JS,就用this

$(this).html( $(this).html() + " BAM! ");
  • 這個里的html()是JQUERY方法,用$(this).html()
  • 當然,JS里也有相似方法innerHTML,如果用innerHTML,就要這樣寫了,這里的reset是JS方法,所以同上得用this.reset():
1 this.innerHTML(); 2 this.reset();
  • jquery對象$ (this)[0]等同于JS里的元素this,這里的this是一樣的
  • JS里的元素只要包上$()就是jquery對象了,而jquery的對象只要加上[0]或者.get(0),就是js元素了
  • $(this)是jquery對象,this就是簡單指當前元素。
  • jquery對象不能直接指定元素的屬性(ele.style),需要get(index)或者直接(index)取得對象中元素才行
  • JQuery中的 $() 這個符號,實際上這個符號在JQuery中相當于JQuery(),即:
$(this)=jquery(this);
  • 也就是說,這樣可以返回一個jquery對象。那么,當你在網頁中alert($('#id'));時,會彈出一個[object Object ],這個object對象,也就是jquery對象了。
  • 那么,我們再回過頭來說$(this),這個this是什么呢?假設我們有如下的代碼:
$("#desktop a img").each(function(index){alert($(this));alert(this); }

那么,這時候可以看出來:

alert($(this)); //彈出的結果是[object Object ]alert(this); //彈出來的是[object HTMLImageElement]

3.jQuery中this與$(this)的區別

$("#textbox").hover( function() { this.title = "Test"; }, fucntion() { this.title = "OK; } ); 這里的this其實是一個html 元素(textbox),textbox有text屬性,所以這樣寫是完全沒有什么問題的。

但是如果將this換成(this)就不是那回事了,報Error了。this與(this)的區別在此。

\\Error Code: $("#textbox").hover( function() { $(this).title = "Test"; }, function() { $(this).title = "OK"; } );
  • $()這是jQuery的一個函數,也是最核心最基本的函數
  • 功能一:傳入一個選擇器字符串,獲得這個選擇器對應的dom內容,保存在[]中,也就是俗稱的jQuery對象。例如
('#id')(.class) $(‘tag’)
  • 功能二:傳入一個匿名函數 ,例如
$(function(){})//這個匿名函數在網頁載入完成后開始執行
  • 功能三:將JavaScript對象包裝成為jQuery對象。例如
$(this) $({a:1,b:2,c:3}) $(document.getElementById('idstr'))
  • this是javascript自身的語法關鍵字,它指向一個javascript對象,所以可以使用所指向的目標javascript對象所擁有的方法,但他自己不是一個普通的變量,所以你無法自己定義一個變量叫this
  • 所以為了使用jQuery對象的方法,你必須傳入jQuery函數$(this), 將javascript 對象包裝成為一個jquery對象。
  • 這里的$(this)是一個JQuery對象,而jQuery對象沒有title 屬性,因此這樣寫是錯誤的。
  • JQuery擁有attr()方法可以get/set DOM對象的屬性,所以正確的寫法應該是這樣:

正確的代碼:

$("#textbox").hover( function() { $(this).attr(’title’, ‘Test’); }, function() { $(this).attr(’title’,OK); } );
  • 使用jQuery的好處是它包裝了各種瀏覽器版本對DOM對象的操作,因此統一使用$(this)而不再用this應該是比較不錯的選擇。

典型錯誤與注意點

var node = $('#id'); node.click(function(){this.css('display','block');//報錯 this是一個html元素,不是jquery對象,//因此this不能調用jquery 的css()方法   $(this).css();//正確,$(this)是一個jquery對象,不是html元素,//可以用css()方法this.style.display = 'block';  //正確 this是一個html元素,//不是jquery對象,因此this不能調用jquery的css()方法,//但是可以用javascript來更改style屬性});

不要濫用$(this)
如果不了解javasrcipt中基本的DOM屬性和方法的話,很容易濫用jQuery對象。比如:

$(‘#someAnchor’).click(function() {alert( $(this).attr(‘id’) );});

如果你只是通過jQ對象獲取簡單的dom元素的屬性比如id,那么你完全可以使用js原生的方法:

$(‘#someAnchor’).click(function() {alert( this.id );});

諸如“src,” “href,” 和“style.”等一些屬性在老版本的ie中使用了getAttribute方法。

三、效果

1.隱藏和顯示

  • hide()隱藏元素
hidden(speed,callback); //說明:相反與show方法,用于隱藏元素,參數與show相同,請參考3.1 //下面的例子是點擊一個按鈕,隱藏顯示的div //代碼如下:var callback=function(){ //alert("我是回調函數"); } var f1=function(){ // $("#t1").hide(); 參數缺省 // $("#t1").hide("fast",callback); 顯示速度為fast方式 $("#t1").hide(3000,callback);//自定義顯示速度 3000毫秒 }; $("#b1").click(f1);
  • show() 顯示元素
show(speed,callback); //說明:這個方法可以顯示隱藏的元素,其中參數也缺省,即寫成show()這種形式 //speed ---指定顯示的速度 有3個參數可以選擇 slow ,normal,fast, //也可以自己指定數字(單位:毫秒) //callback---回調函數 //下面是一個簡單的例子var callback=function(){ //alert("我是回調函數"); } var f1=function(){ // $("#t1").show(); 參數缺省 // $("#t1").show("fast",callback); 顯示速度為fast方式 $("#t1").show(3000,callback);//自定義顯示速度 3000毫秒 }; $("#b1").click(f1);
  • toggle() 顯示隱藏的元素,隱藏顯示的元素
toggle(speed,callback) //說明:這個可以理解為show()與hide()方法的結合體,輪換執行show()與hide() //比如:頁面有一個隱藏的元素,第一次執行toggle(),顯示元素, //第二次執行,隱藏元素,第三次則又顯示元素。。。 代碼如下:var callback=function(){ //alert("我是回調函數"); } var f1=function(){ //$("#t1").toggle(); // 參數缺省 //$("#t1").toggle("fast",callback); //顯示速度為fast方式 $("#t1").toggle(3000,callback); }; $("#b1").click(f1);

2.淡入淡出

?

  • fadeIn()淡入已隱藏的函數
$(selector).fadeIn(speed,callback);
  • 可選的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒。
  • 可選的 callback 參數是 fading 完成后所執行的函數名稱。
  • ? fadeOut()方法淡出可見的元素
$(selector).fadeOut(speed,callback);
  • 可選的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒
  • 可選的 callback 參數是 fading 完成后所執行的函數名稱。
  • ? fadeToggle()可以再fadeIn()和fadeOut()方法之間進行切換。
$(selector).fadeToggle(speed,callback);
  • 可選的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒。
  • 可選的 callback 參數是 fading 完成后所執行的函數名稱。
  • ? fadeTo() 方法允許漸變為給定的不透明度(值介于 0 與 1 之間)
$(selector).fadeTo(speed,opacity,callback);
  • fadeTo() 方法中必需的 opacity 參數將淡入淡出效果設置為給定的不透明度(值介于 0 與 1 之間)。
  • 可選的 callback 參數是該函數完成后所執行的函數名稱。

3.jQuery 滑動方法

  • slideDown() 向下滑動元素
slideDown(speed,[callback]); //說明:改變對象的height以實現向下展開的動畫效果,常用與顯示隱藏的元素 //代碼如下:var callback=function(){ //alert("我是回調函數"); } var f1=function(){ //$("#t1").slideDown(); // 參數缺省 //$("#t1").slideDown("fast",callback); //顯示速度為fast方式 $("#t1").slideDown(1000,callback); }; $("#b1").click(f1);
  • slideUp() 向上滑動元素
slideUp(speed,[callback]););//說明:改變對象的height以實現向上展開的動畫效果,常用隱藏顯示的元素 //代碼如下:var callback=function(){ //alert("我是回調函數"); } var f1=function(){ //$("#t1").slideUp(); // 參數缺省 //$("#t1").slideUp("fast",callback); //顯示速度為fast方式 $("#t1").slideUp(1000,callback); }; $("#b1").click(f1); <input type="button" value="show" id="b1"/> <div id="t1" style="border: 1px solid gray;">dd</div>
  • slideToggle() 可以再slideDown ()和slideUp之間切換。

4.jQuery 動畫 - animate() 方法

自定義動畫使用方法:$(selector).animate({params},speed,callback);
參數說明:

  • params—一組包含作為動畫屬性和最終值哦樣式屬性和其值的集合
  • speed----可選的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒。
  • callback—回調函數,是動畫完成后所執行的函數名稱。

注意:params的樣式屬性必須書寫成駝峰形式,即比如margin-left應該些微
marginLeft的形式

代碼如下:

var callback=function(){ //alert("我是回調函數"); } ; var par={ height:"70%" }; var f1=function(){ $("#t1").animate(par,1000,callback); };$("#b1").click(f1);

5.jQuery stop()

方法用于在動畫或效果完成前對它們進行停止。

6.chaining

名為鏈接(chaining)的技術,允許我們在相同的元素上運行多條 jQuery 命令,一條接著另一條

總結

以上是生活随笔為你收集整理的JQuery绑定及效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。