筆者有介紹過一個 Background-Position Animation Plugin,它讓 jQuery.animate 能支援原本所不支援的 background-position 屬性。所以我們就能使用它來做到更多有趣的動畫效果,像這次要教的翻選式選單也是玩玩 background-position 屬性的。
選單的部份筆者是用 ul 來做的:
1 2 3 4 5 6 7 8 9 10 11 | <body> <h3>水平選單(圖片是垂直)</h3> <ul id="hmenu"> <li><a href="#" class="v1">男丁</a></li> <li><a href="#" class="v2">jQuery</a></li> <li><a href="#" class="v3">小神童</a></li> <li><a href="#" class="v4">蠟筆小新</a></li> </ul> <br class="clear" /> </body> |
在看 CSS 設定之前先來看一下選單的背景圖片
圖片雖然有上下兩排,但一開始我們只要讓它顯示上半部,當滑鼠移到選單時再切換到顯示下半部,讓整個動作有"翻"的感覺。CSS 這邊就配合 li 裡面的連結而加上不同的背景圖片;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #hmenu { margin: 0; padding: 0; list-style: none; } #hmenu li { float: left; padding: 0 5px; } #hmenu li a { display: block; height: 16px; /* 圖片的高/2 */ line-height: 16px; /* ie suck */ text-indent: -9999px; } #hmenu a.v1 { width:68px; /* 圖片的寬 */ background:url(v1.gif) no-repeat 0 0; } #hmenu a.v2 { width:67px; /* 圖片的寬 */ background:url(v2.gif) no-repeat 0 0; } #hmenu a.v3 { width:67px; /* 圖片的寬 */ background:url(v3.gif) no-repeat 0 0; } #hmenu a.v4 { width: 67px; /* 圖片的寬 */ background:url(v4.gif) no-repeat 0 0; } |
比較麻煩的是在 IE 6 中,若超連結沒設 line-height 的話,整個超連結的 height 會超出限制範圍,因此要記得加上 line-height 喔!
做到這邊就已經有個基本的雛型了,接下來就請出我們的 jQuery.animate 來做動畫效果囉:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $(function(){ // 幫 #hmenu li a 加上 hover 事件 $("#hmenu li a").hover(function(){ // 滑鼠移進選項時.. // 把背景圖片的位置往上移動 var _this = $(this), _height = _this.height() * -1; _this.stop().animate({ backgroundPosition: "0px " + _height + "px" }, 200); }, function(){ // 滑鼠移出選項時.. // 把背景圖片的位置移回原位 $(this).stop().animate({ backgroundPosition: "0px 0px" }, 200); }); }); |
這邊用到的也是很基本的 animate 而已,只是記得要引用 Background-Position Animation Plugin 才行喔。
最後我們就能來看效果哩,試著把滑鼠移到選項上面看看:
我們的選項就會往上翻轉吧,若是要往下翻轉的話,那麼就要改一開始的 background-position 及移動的位置就可以了。這題目就當成是作業讓各位自行去練習吧!
現在除了上下翻轉之外,筆者再弄個左右翻轉的範例,因為是左右的關係,所以圖片就要變化一下樣式:
當然 CSS 及 jQuery 也需要配合修改一下,整個範例語法為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <style type="text/css"> #vmenu { margin: 0; padding: 0; list-style: none; } #vmenu li { padding: 5px 0; } #vmenu li a { display: block; height: 18px; /* 圖片的高 */ line-height: 18px; /* ie suck */ text-indent: -9999px; } #vmenu a.h1 { width:40px; /* 圖片的寬/2 */ background:url(h1.gif) no-repeat 0 0; } #vmenu a.h2 { width:58px; /* 圖片的寬/2 */ background:url(h2.gif) no-repeat 0 0; } #vmenu a.h3 { width:58px; /* 圖片的寬/2 */ background:url(h3.gif) no-repeat 0 0; } #vmenu a.h4 { width:82px; /* 圖片的寬/2 */ background:url(h4.gif) no-repeat 0 0; } </style> <script type="text/javascript"> $(function(){ // 幫 #hmenu li a 加上 hover 事件 $("#vmenu li a").hover(function(){ // 滑鼠移進選項時.. // 把背景圖片的位置往左移動 var _this = $(this), _width = _this.width() * -1; _this.stop().animate({ backgroundPosition: _width + "px 0" }, 200); }, function(){ // 滑鼠移出選項時.. // 把背景圖片的位置移回原位 $(this).stop().animate({ backgroundPosition: "0 0" }, 200); }); }); </script> <body> <h3>垂直選單(圖片是水平)</h3> <ul id="vmenu"> <li><a href="#" class="h1">男丁</a></li> <li><a href="#" class="h2">jQuery</a></li> <li><a href="#" class="h3">小神童</a></li> <li><a href="#" class="h4">蠟筆小新</a></li> </ul> </body> |
瀏覽後的效果就是改成水平的翻轉:
這樣的選單效果是不是很有趣呢?!如果再將選單做整體設計的話,那效果並不會比 Flash 差到那唷。
請問如果我想把圖片翻轉的部分,改成文字,都用程式去控制以便管理方便,這部分該怎麼改好?
有試過background-color /以及文字h1/h2等,好像都顯示不出來
謝謝
要用文字..那其實就是外層要多一個區塊包起來, 然後 overflow 設成 hidden, 並限制寬或高
老師你好,我試過了兩種方式
AA
跟
AA
都只出現背景翻轉,但字一樣保留在原位,有試過修改js,似乎都一樣,想請問我哪一步想錯了嗎?
不好意思一直打擾您,謝謝
你..你覺得這樣的字要怎樣做出像原本背景移動的方式呢XD
且若可以的話, 把你要的效果弄個圖片説明一下, 這樣我才比較好懂你是要什麼
不知道為什麼打出來的code都顯示不出來,好奇怪
已寄信給老師了
謝謝
留言時的特殊語法都會被過濾掉, 未來會提供其它方式讓留言者張貼程式碼。
信已收到且回覆囉~
老師您好~
想請問這個http://livedemo00.template-help.com/prestashop_34921/網站的按鈕該怎麼做
我照著您的這篇文章做了一晚上
發現好像不是他用的效果呢= ="""
看起來很像, 但其實差很多啊...你已經做類似它那種動物的透明圖了嗎?
男丁老師您好,之前從您這邊學了幾個Java語法,應用起來很棒,很感謝您的教學分享。只是今天發現之前製作的翻轉式選單突然失效了?而且不僅是我自己做的,連從您這邊下載回去的範例檔案、還有直接在這邊看的範例連結都失效了,讓我滿頭霧水,想請教一下這是什麼原因,我要怎麼修正這個問題呢?
這是因為我網站引用的 jQuery 都是最新版的, 所以目前 1.8 版中移除了某些功能, 所以才造成這外掛有問題。
你找到第 47 行, 把 $.curCSS 改成 $.css 就可以了
修改後恢復正常效果了,感恩。
男丁老師您好,您分享的jQuery都讓我受益不少,幫了非常大的忙,非常感謝您。我在網站include翻選式選單後,在網站首頁是正常翻選狀態,但按了選項連結後就不再是動態翻選了,請問我該如何修正呢?
老師您好~
最近要做網站遇到一個問題想請教您~
用PS切圖匯出為網站的時候都是用表格架構
我想將圖片選單的部分換成翻轉式圖片的選單
但怎麼用都不成功
不知道哪裡出問題了 ...
http://dreamerorchards.byethost9.com/
就是首頁、關於我們、最新消息....
這一導覽列想做成翻轉的效果~
麻煩老師幫忙解惑~ 感激不盡
敬祝平安順心~
老師抱歉~ 我再將問題描述清楚一點
我已經有修改您的語法做出一列的導覽列了(如下網址)
http://dreamerorchards.byethost9.com/test.htm
但要將這個功能放入網頁替換掉純圖片的導覽列的部分時
都無法成功~
不知道是哪裡出問題了
請您幫忙解惑
感恩~~