jQuery 源代碼看不懂,怎么辦。。有沒有解釋jQuery 源代碼的書籍?
書不知道現在有沒有,不過網上有一些源碼分析的文章,給你推薦一個:
http://www.cnblogs.com/nuysoft/archive/2011/11/14/2248023.html
要不要閱讀別人代碼?
要。
閱讀別人代碼干什么?
提高自己的代碼質量。
試圖通過閱內讀別人代碼找容出代碼的邏輯?
錯誤。
試圖通過閱讀別人代碼找出想要實現自己的邏輯的代碼?
正確,只有遵循了這個原則,才能實現物為我所用。
毫無目的去看別人代碼 不暈才怪呢。
建議去找原碼看,一般網上下載下來都是經過壓縮的。
沒有API嗎?如果這個你都不看 不知道你看什么...
去找你版本的API下載 不懂得去看
JQUery 一段代碼 看不懂 幫忙打個注釋
rn rn rn var durl = $("#cplb ul").attr("data-url");獲取div下面的ul元素中的data-url并賦值給drul;
$("#cplb ul li").each(function(){
var url = $(this).find("a").attr("href");
if(url==durl){
$("#cplb ul li").removeClass("current");
$(this).addClass("current");
}
});
然后是遍歷出當前有多少回個li元素;
創建 變量(答url)= 當前li元素找到下面的a標簽并改變它的href值;
判斷:
如果當前a元素的href值=ul的地址;
那么鼠標移動上去吧所有的Li元素中包含current類名的名字刪掉;
并給當前的li元素添加current類名;
這個方法也就是經常用在導航模塊中,current的屬性可以在css中設置,可以移動上去為背景圖片,顏色都可以,添加其他css3效果也行
var durl = $("#cplb ul").attr("data-url");獲取div下面的ul元素中的data-url并賦值給drul;
$("#cplb ul li").each(function(){
var url = $(this).find("a").attr("href");
if(url==durl){
$("#cplb ul li").removeClass("current");
$(this).addClass("current");
}
});
然后是遍歷出當前有多少個li元素;
創建 變量(url)= 當前li元素找到下面的a標簽并改變它的href值;
判斷:
如果當前a元素的href值=ul的地址;
那么鼠標移動上去吧所有的Li元素中包含current類名的名字刪掉;
并給當前的li元素添加current類名;
這個方法也就是經常用在導航模塊中,current的屬性可以在css中設置,可以移動上去為背景圖片,顏色都可以,添加其他css3效果也行
這好像是計算數學的公式
求大神給解釋一段jquery代碼
需要解釋的地方寫在注釋里了rn源碼下載地址http://www.lanrentuku.com/js/xiangce-923.htmlrnrn這是一段判斷頁面中所有圖片是否加載完的代碼,加載完后執行start()rnvar loaded= 0;rn$thumb_imgs.each(function(){ //$thumb_imgs是獲取img節點rnvar $this = $(this);rn$(x27x27).load(function(){ // 問題1:為什么寫成(x27x27)而不是(x27imgx27)rn++loaded;rnif(loaded == nmb_thumbs*2) //nmb_thumbss是圖片個數。問題2:為什么要乘以2rnstart();rn}).attr(x27srcx27,$this.attr(x27srcx27)); //問題3:為什么要把自己的鏈接地址賦值給自己rn$(x27x27).load(function(){ //問題4:為什么要執行兩次rn++loaded;rnif(loaded == nmb_thumbs*2)rnstart();rn}).attr(x27srcx27,$this.attr(x27srcx27).replace(x27/thumbsx27,x27x27));rn});#1, $('<img />')的意思是來創建一個<img />元素,源$('img')的意思是選擇img標簽
#2,因為它對每個圖片執行了兩次load,每次Load執行了一次++loaded,所以雙倍
#3,請注意開頭的var $this = $(this),所以此處是將該img的src賦值給$('<img />')的src
#4,load第二個圖片
從代碼效果分析,這個網站首次加載了預覽圖,然后它對每個圖片遍歷,然后修改其src達到加載其他該圖片相關的其他尺寸圖片的目的,這樣訪問者點擊查看大圖的時候就不用再次等待圖片下載了
1. 使用來img將會全部默認第自一個。
2. 我感覺不用乘以2啊,不知道這是為什么。
3. 這些是加載進來的,即便是開始時有默認的,但來后還是要重新賦值。
4. 這兩個load有不同,明顯下面的attr執行的操作就不同。
希望可以幫到你,不過何必去研究這種寫到吐血的插件呢。
誰能幫我詳細解釋一下這段Jquery代碼,每行都解釋一下好嗎? 我新手看不懂!
ph$ = {n bindEvt : function() {n var o = {};n o.btn_sell_l = $("#pageLeft");n if (o.btn_sell_l.length > 0) {n o.btn_sell_l.bind("click", function() {n ph$.scrollLveSell(x27rightx27);n });n }n o.btn_sell_r = $("#pageRight");n if (o.btn_sell_r.length > 0) {n o.btn_sell_r.bind("click", function() {n ph$.scrollLveSell(x27leftx27);n });n }nn },n scrollLveSell : function(o) {n if (this.cfg.lv_flag == 0)n return false;n var tar = $("#sell_order");n var tar2 = $("#sell_order_t");n tar.stop();n tar2.stop();n var max_num = $("#sell_order>li").length;n var width = 196;n var left = 0;n var pos = tar.position();n //alert(pos.left + "|" + width);n if (o == "left") {n if (Math.abs(pos.left)+width > width*(max_num-5)) {n return false;n }n left = pos.left - width;n } else if (o == "right") {n if (pos.left >= 0) {n return false;n }n left = pos.left + width;n }n left = left + "px";n //alert(left);n ph$.cfg.lv_flag = 0;n tar.animate({n left: leftn }, 600);n tar2.animate({n left: leftn }, 600, function() {n ph$.cfg.lv_flag = 1;n //alert(pos.left);n });n },nn cfg : {nn },n init : function() {n this.bindEvt();n }n};nnjQuery(function($) {n ph$.init();nn n});本人javascript半桶水,高手勿噴...但歡迎指正....
我從這段代碼的調用順序說起吧
=====================
首先起作用的是
jQuery(function($) {
ph$.init();
});
意思就是從網頁準備好之后,調用ph$對象的init()方法;
先看ph$是何物
ph$ = {};
ph$是json對象,json對象有屬性或方法,調用方法是json.屬性或json.方法()
==========================
然后去看看ph$.init()方法
init : function() {
this.bindEvt();
}
除了this,其他沒什么好說的
如果想要在一個function內使用this指向非window對象,通常需要實例化一個function,例如 a = new a();醬紫在a這個對象內,this指向a本身.
但是現在this是在json對象內,是指向json對象本身:即ph$,也就是說ph$已經是實例化的了
至于兩種實例化方法,最明顯的區別就是a()這個function可以實例化多個獨立對象,例如a = new a();b = new b();而json對象只能由a = {}這樣來實例化,是不能復用的.
======================
所以 this.bindEvt(); 是調用 ph$.bindEvt();
去看看bindEvt();
bindEvt : function() {
var o = {};
o.btn_sell_l = $("#pageLeft");
if (o.btn_sell_l.length > 0) {
o.btn_sell_l.bind("click", function() {
ph$.scrollLveSell('right');
});
}
o.btn_sell_r = $("#pageRight");
if (o.btn_sell_r.length > 0) {
o.btn_sell_r.bind("click", function() {
ph$.scrollLveSell('left');
});
}
}
o為json對象
o.btn_sell_l = $("#pageLeft");
把o的屬性 btn_sell_l 賦值為$('#pageLeft')這個jquery選擇器返回的數組,選擇的是網頁中id為pageLeft的元素
if (o.btn_sell_l.length > 0) {
o.btn_sell_l.bind("click", function() {
ph$.scrollLveSell('right');
});
}
o.btn_sell_l.length > 0 等于 $("#pageLeft").length > 0
jquery找不到id為pageLeft不會返回false,所以使用length判斷有沒有找到元素,大于零就是找到了
o.btn_sell_l.bind("click", function() {
ph$.scrollLveSell('right');
});
綁定click事件到o.btn_sell_l這個對象,事件內容為調用Ph$的scrollLveSell方法,傳參right
下面的 o.btn_sell_r 等一段的代碼與以上的功能差不多,這里不作復述
下面看Ph$的scrollLveSell方法
臥槽,好長,請聽下回分解....
相關推薦:
最高額保證法律依據(民法典后保證最高額擔保的規定)
中外合資經營企業的資本(中外合資企業注冊資本金要求)
車輛抵押貸款(汽車抵押貸款需要什么條件)
國有企業設立的資料(國有企業注冊條件)
怎么注冊公司流程(公司注冊流程及需要的材料)