1. 程式人生 > >jq案例思路分析

jq案例思路分析

一、選項卡
1、先給需要的所有的按鈕新增一個事件
2、獲取當前按鈕的index,使用var idx = $(this).index();
3、給當前的按鈕新增一個class類,而其餘的兄弟節點去除class類$(this).addClass('active').siblings().removeClass('active');
4、把與index對應的div顯示出來$('#div2>div').eq(idx).show().siblings().hide();

二、簡易日曆
1、先給需要的所有的按鈕新增一個事件$('#table>ul>li').mouseenter


2、獲取當前按鈕的index,使用var idx = $(this).index();
3、給當前的點選的新增css,使背景顏色為藍色,其他的把css設定成白色
$(this).css(‘backgroundColor’,’blue’).siblings().css(‘backgroundColor’,’white’);`
4、把之前用字串連線的部分放到html()方法中

$('#div1').html('<h2>'+(idx+1)+'月</h2><p>'+oText[idx] +'</p>');

三、全選全不選反選
1、給不同的按鈕新增事件$('button').eq(0).click

,使用eq()方法和下標來實現

2、使用prop()方法來設定布林值的屬性
如果使用prop()函式操作表單元素的checked、selected、disabled等屬性,如果該元素被選中(或禁用),則返回true,否則(意即HTML中沒有該屬性)返回false。
prop(propertyName,[value])方法的使用:如果引數只有propertyName,則表示返回屬性propertyName的值,如果兩個引數,就是給propertyName設定值
3、對於全選$('#check1 input').prop('checked',true);
全不選$('#check1 input').prop('checked',false);


4、對於反選,其中有一個:checked
四、輪播
1、其中不用設定一個很長的ul,而是把所有的圖片都固定到一個位置,最開始只有第一張是block,其餘的都是none,然後使用jq讓其淡入淡出
2、給右箭頭新增點選事件,使用一個變數count來記錄點選的次數,當count的值等於圖片個數,即li的length時,讓count=0;讓每一個對應count的li淡入出來,其餘的淡出。
3、對於左箭頭,需要判斷的是當count=-1的時候,讓count變為裡li.length-1;
五、固定導航欄
1、給window滾動事件$(window).scroll(function(){})
2、當滾動的高度大於導航欄上部的高度時,給導航欄設定一個固定定位。
3、與此同時,要給下面的部分設定一個margin-top,因為當導航欄設定固定定位時,會脫離文件流,如果不設定,在滾動的時候,下面的會突然少 一部分。
4、當回滾的時候,只需要在else中把固定定位移除,並且使margi-top變回原來的高度。
六、小火箭滾動案例
1、小火箭圖片是固定定位,當滾動大於1000時顯示,可以使用淡入淡出,其中在if判斷值大於1000時,1000不用加px.因為scrollTop()返回的是一個值。
2、在滾動事件外面給小火箭註冊事件,其中,不能用window設定scrollTop的值為0,因為在js中window沒有scrollTop屬性,window有的是pageYoffset屬性,而且該屬性是隻讀屬性。但是在jq中window可以獲得scrollTop,因為他有scrollTop()方法,$(window).scroll()是scroll事件。鑑於相容性的問題,所以給html或者body新增scrollTop,並設定他的值。因為IE6\7\8獲取scrollTop時使用的是document.documentElement.scrollTop谷歌使用的是document.body.scrollTop
七、音樂滾動條
長按時,會出現bug,因為對於keydown事件,如果一直按著會觸發多次。
所以使用節流閥,即是定義一個變數,在keydown時進行判斷,為true時執行keydown裡面的程式碼,並且在裡面把flag改為false,在彈起時,把flag再改為true。
八、五角星案例
1、 給li註冊滑鼠經過事件,讓自己和前面所有的兄弟prevAll()都變成實心,並且使後面的所有兄弟nextAll()變為空心
2、給li註冊點選事件,給被點選的li做一個標記,可以加一個class,因為可能點選多次,所以需要給自己加class的同時,使其他的兄弟移除class。
3、給ul註冊移出事件,此時需要讓所有的li都變成空心,再做一件事件,找到current,讓current和current前面的變成實心就行。

$('.comment>li').on('mouseenter', function() {
//這裡不能繼續鏈式程式設計
                    $(this).text(wjx_s).prevAll().text(wjx_s);
                    $(this).nextAll().text(wjx_k);
                });

解釋:如果滑鼠放入的是第三個li,$(this).text(wjx_s)得到的是一個jq物件,其中之包含一個dom物件,即是第三個li,$(this).text(wjx_s).prevAll()此時得到的也是jq物件,但是包含兩個dom物件,即是兩個li,第一個物件是原本的第二個li和第二個物件是原本的第一個li,此時在繼續執行nextAll(),首先第一個物件會得到後面3個li,然後第二個物件會得到後面四個,所以最終是得到後面的四個li,而我們只需要最後兩個li,所以這裡不能進行鏈式程式設計。