為什么做了這樣一個的功能呢?原因是前一段時間jQuery群里有個朋友想實現(xiàn)這樣一個東東,大家都知道jQuery中有現(xiàn)成的slideDown和slideUp方法,但那是向下展開,而這個是一個完全相反的效果。
公司主營業(yè)務:成都網(wǎng)站建設、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出渭城免費做網(wǎng)站回饋大家。
功能展示鏈接 http://runjs.cn/detail/v6i9g6g0
其實這樣一個功能也蠻奇怪的,感覺不是很實用,但是當時也沒有一下子做出來,試著寫了一會兒覺得不能馬上寫完就say sorry了。
最近呢又開始接著繼續(xù)學習jQuery的東西,學到animate動畫的時候,自己就在想,是不是可以用來實現(xiàn)一下這個功能呢(這個真是個心結(jié)啊~~)?然后就試著寫了一下,經(jīng)過一番波折,不僅讓我對animate的使用更加了解之外,也讓我了解了一個用jQuery的小技巧,更重要的是,實現(xiàn)這個功能。
下面上代碼并做出解析:
Html部分:
<div> <span>Item1.1</span> <span>Item1.2</span> <span>Item1.3</span> <span>Item1.4</span> </div> <div> <span>Item2.1</span> <span>Item2.2</span> <span>Item2.3</span> <span>Item2.4</span> </div> <div> <span>Item3.1</span> <span>Item3.2</span> </div> <div> <span>Item4.1</span> <span>Item4.2</span> </div> <div class="menu"> <span>Item1</span> <span>Item2</span> <span>Item3</span> <span>Item4</span> </div>
文檔結(jié)構(gòu)是這樣子的,大家可以看到menu這個主菜單的菜單項的順序與子菜單的實際順序是一致的。這個是為點擊菜單項上的條目通過位置查找對應子項做的一個設計。
jQuery部分:
$(function () { $("div").each(function () {//遍歷所有div元素 if ($(this).is("[class='menu']")) {//如果是菜單所在的div $(this).css({ "top": $(this).height() + $(this).position().top, "position": "absolute", "color": "white", "background-color": "white", "width": "500px", "left": "200px" })//為菜單添加樣式 .children("span").css({ "background-color": "DimGrey", "border": "black solid thin" })//為菜單項添加樣式 .each(function () {//對每個菜單項進行遍歷 $(this).click(function () {//添加click事件 var Ind = $("div.menu").children().index(this);//找出當前點擊的菜單項是菜單div中的第幾個span var FocusEle = $("div:eq(" + Ind + ")");//將選中菜單項的子項設成一個變量 if ($("div[class*='up']").size() == 0) {//說明是第一次加載,初次的時候為沒選中任何菜單項的狀態(tài),所以up的個數(shù)為0 FocusEle.animate( { top: $(this).height() - 10//使對應的子項向上移動 }, 'normal',//中速移動 function () { $(this).addClass("up");//移動完之后為這個子項加上up的樣式 }); } else {//如果不是初次加載 $("div[class*='up']").animate(//找到正在顯示的菜單子項 { top: $(this).height() + 10//使對應子項向下移動 }, 'normal', function () { $(this).removeClass("up");//移除這個子項的up樣式 FocusEle.animate(//一 { top: $(this).height() - 10//將重新選中的菜單子項向上移動 }, 'normal', function () { $(this).addClass("up");//添加up樣式 }); }) //***************************特別說明********************** // .queue(function () {二 // FocusEle.animate( // { // top: $(this).height() - 10 // }, // 'slow', // function () { // $(this).addClass("up"); // }); // }); } }).css("cursor", "pointer").hover(function () { $(this).css("color", "red"); }, function () { $(this).css("color", "white"); }) }); } else {//如果不是菜單所在的div,即菜單子項 var Index = $("div").index(this); var Left = $("div.menu span:eq(" + Index + ")").position().left + 200;//修改不同子項的橫坐標,使其與菜單項的條目一致 $(this).css({ "top": $(this).height() + $(this).position().top, "left": Left, "color": "white", "position": "absolute" })//為菜單子項添加樣式 .children().css({ "background-color": "SlateGrey", "border": "black solid thin", "cursor": "pointer" }).hover(function () { $(this).css("color", "red"); }, function () { $(this).css("color", "white"); }); } }) });
上面的代碼幾乎是逐條注釋的,大家應該都能看懂,主要的實現(xiàn)思想我還是說一下,大家再結(jié)合著注釋看就OK了,大家會發(fā)現(xiàn)實現(xiàn)這個功能的時候完全沒有顯示(show()),隱藏(hide())的操作,最開始我也是一個思維誤區(qū),以為必須要用顯示,隱藏去實現(xiàn),但做著做著發(fā)現(xiàn)了一個非常傻的問題,展開的效果實現(xiàn)上是通過移動隱藏和顯示來實現(xiàn)的。怎么說呢,大家想想看完電影之后演員名單那部分的東西就能有個概念了。
這里有兩點很重要:
1、這5個div全部為absolute形式的,因為只有這樣才能進行相對移動
2、所謂的消失,實際上是4個子項的div被menu div也遮擋住了,所以這里要知道,我給menu div加了背景色,即白色。
說到這大家應該就知道是如何實現(xiàn)的了吧?
另外在說一 下 注釋中”特別說明”的那部分,其實這部分代碼與它上面不遠處的【一】的代碼是一樣的,只是前面加了.queue這么東西,這是做什么的呢?就是將多個動畫放到一個隊列里,然后依據(jù)隊列的次序,一個一個的展現(xiàn)出來。我的初衷就是,如果當前有子項是展開狀態(tài)的,那么就“先”把其關閉,“后”把新點擊的子項展開。
不過不知道為什么,如果是二次進行了點擊的子項,就不會再經(jīng)過queue 中animate結(jié)束時那個function了。這個有明白為什么的朋友可以幫忙解答一下。然而像我【一】中這個實現(xiàn),也是合乎規(guī)則的。
其實這個小功能還有點弊端,就是如果點擊過快,大家會發(fā)現(xiàn)同時展開多項子菜單,原因是動畫的過程是需要時間的,而在這段時間里我沒有禁止click事件。應該是用指派命名空間的方法就可以搞定。大家可以研究研究然后告訴我。
最后總結(jié)了一下,寫這個小功能有點慚愧的說寫了挺長時間,中間換了好多方法為解決一些問題,現(xiàn)在看來,這么簡單的東西為什么會寫這么久,還是因為最開始的時候沒有想好,邊寫邊想花費了許多時間。以后要改進這種做事方法。
新浪微博:http://weibo.com/zhouhongyu1989 歡迎圍觀~!
新聞名稱:jQuery關于點擊菜單項,使子條目"向上"展開效果的實現(xiàn)
文章出自:http://vcdvsql.cn/article32/phoppc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站建設、網(wǎng)站排名、網(wǎng)站建設、品牌網(wǎng)站制作、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)