Home > CSS | MooTools > [MooTools] SpriteNavigation Plugin

[MooTools] SpriteNavigation Plugin

MooToolsとCSSでFlashのような滑らかなマウスオーバーやカレント表示を実装するプラグイン。

spritenavigation plugin

元ネタはCreate a Sprited Navigation Menu Using CSS and MooToolsで、
よくやるコーディングに合わせて作り直しつつちょっとロジックを変えてクラス化した。
使用する際にはHTMLとCSSにいくつかルールがあります。

DEMOはこちら

Image

全部つなげて作る。順番はなんでもいいです。
デモのやつは上から、通常・マウスオーバー・クリック・カレント、になってます。

navigation

Download(psd file):SpriteNavigation Demo Base (v1.0)

Creative Commons License

(X)HTML

(X)HTMLソースはaタグにclassをつけます。

HTML:
  1. <ul id="global-navi">
  2.     <li><a href="index.html" class="home">HOME</a></li>
  3.     <li><a href="news.html" class="news">NEWS</a></li>
  4.     <li><a href="gallery.html" class="gallery">GALLERY</a></li>
  5.     <li><a href="contact.html" class="contact">CONTACT</a></li>
  6. </ul>

現在地の判定はURLとhref属性が一致するかどうかで、真の場合にcurrentというクラス名が付与されます。
URLがスラッシュで終わる場合、href属性にindexという文字が含まれていれば真としています。

プラグインにより、a要素と同じクラスを持つDIV要素が自動的に作成されます。
クリック時はクラス名+Clickというクラスになります。

CSS

いくつかポイントがあります。

  • ul要素 に background
    →a要素の背景は自動的に非表示にされるため、ナビゲーション画像を背景にしないと見えなくなる。
  • li要素 に position:relative
    →自動挿入されるdiv要素がposition:absoluteのため
  • a要素 に position:relative と z-index
    →divよりも上にするため必須
  • a要素 に height と width
    →同じサイズのDIV要素を作るため
  • li.current + a.[ClassName]
    →現在地表示はLI要素にcrrentというクラス名が付与されるのでその子要素として指定
  • div.[ClassName]Click
    →クリック時はクラス名+Clickというクラスで指定
CSS:
  1. #global-navi {
  2.     width:400px;
  3.     margin:100px auto;
  4.     background:url(nav.png) no-repeat left top;/*メニュー通常表示*/
  5.     overflow:hidden;
  6.     zoom:1
  7. }
  8. #global-navi li {
  9.     position:relative;/*必須*/
  10.     float:left;
  11. }
  12. #global-navi a {
  13.     position:relative;
  14.     display:block;
  15.     height:50px;
  16.     width:100px;
  17.     text-indent:-9898px;
  18.     line-height:0;
  19.     overflow: hidden;
  20.     z-index: 10;/*divより上にする*/
  21. }
  22. #global-navi .home {background-image:url(nav.png);}
  23. #global-navi .home:hover,
  24. #global-navi .home:focus,
  25. #global-navi div.home {background-position:left -50px;}/*マウスオーバー*/
  26. #global-navi div.homeClick {background-position:left -100px;}/*クリック時*/
  27. #global-navi .current .home {background-position:left -150px;}/*カレント*/
  28.  
  29. #global-navi .news {background-image:url(nav.png)}
  30. #global-navi .news:hover,
  31. #global-navi .news:focus,
  32. #global-navi div.news {background-position:-100px -50px;}
  33. #global-navi div.newsClick {background-position:-100px -100px;}
  34. #global-navi .current .news {background-position:-100px -150px;}
  35.  
  36. #global-navi .gallery {background-image:url(nav.png)}
  37. #global-navi .gallery:hover,
  38. #global-navi .gallery:focus,
  39. #global-navi div.gallery {background-position:-200px -50px;}
  40. #global-navi div.galleryClick {background-position:-200px -100px;}
  41. #global-navi .current .gallery {background-position:-200px -150px;}
  42.  
  43. #global-navi .contact {background-image:url(nav.png)}
  44. #global-navi .contact:hover,
  45. #global-navi .contact:focus,
  46. #global-navi div.contact {background-position:-300px -50px;}
  47. #global-navi div.contactClick {background-position:-300px -100px;}
  48. #global-navi .current .contact {background-position:-300px -150px;}

JavaScript

呼び出し側はdomreadyで。

JavaScript:
  1. window.addEvent("domready",function(){
  2.     new SpriteNavigation({id:"global-navi"});
  3. });

MooTools Class

JavaScript:
  1. /**
  2. * SpriteNavigation
  3. * @ver 1.1
  4. */
  5. var SpriteNavigation = new Class({
  6.    
  7.     Implements: [Options],
  8.  
  9.     options: {
  10.         id:'',
  11.         el:'a',
  12.         current:true,
  13.         duration:300
  14.     },
  15.     initialize: function(options){
  16.         this.setOptions(options);
  17.         this.target= (this.options.id)? $(this.options.id) : $(document.body);
  18.         this.navi = this.target.getElements(this.options.el);
  19.        
  20.         $each(this.navi,function(a,i){
  21.             var c= a.get("class");
  22.             var div = new Element("div",{ "class":c,"opacity":0,"styles":{"position":"absolute","top":0,"left":0,"z-index":0,"width":a.getStyle("width"),"height":a.getStyle("height")}});
  23.             if(a.get("tag")==="a"&&this.is_current(a.href)&&this.options.current === true){
  24.                     div.fade("show");
  25.                     a.getParent().addClass("current");
  26.                     div.inject(a.getParent(),"top");
  27.                     a.setStyle("visibility","hidden");
  28.             }else{
  29.                 a.setStyle("background","none");
  30.                 div.inject(a.getParent());
  31.                 div.set("tween",{duration:this.options.duration});
  32.                 a.addEvents({
  33.                     mouseenter: function() { div.tween("opacity", 1); },
  34.                     mouseleave: function() { div.tween("opacity", 0); },
  35.                     mousedown:  function() { div.addClass(c + 'Click'); },
  36.                     mouseup:    function() { div.removeClass(c + 'Click'); }
  37.                 });
  38.             }
  39.         }.bind(this));
  40.     },
  41.     is_current:function(str){
  42.         return document.location.href.test(str);
  43.     }
  44. });

Option

(タイプ/デフォルト)

id
(string/"") 要素を広う範囲のID。デフォルトはbody全体
el
(string/"a") 適用する要素
current
(bool/true) 現在地用クラス(current)を追加するかどうか
duration
(number/300) エフェクトの遅延

オプションの追加と変更した

DEMOはこちら

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://tenderfeel.xsrv.jp/css/683/trackback/
Listed below are links to weblogs that reference
[MooTools] SpriteNavigation Plugin from WebTecNote

Home > CSS | MooTools > [MooTools] SpriteNavigation Plugin

最近の投稿
最近の修正
  • そしてこのSQLはわれながらよく書いたと思う 2010-11-15
  • CSVの列っていう方がいいのかな…118項目だった 2010-11-15
  • 楽天のCSVの項目が116個もあった衝撃 2010-11-15
  • オフィスで香水臭振りまくのは迷惑だと知れ 2010-11-15
  • ぐあー フレグランステロやー 2010-11-15
  • More updates...

Powered by Twitter Tools

Tag Cloud
おすすめサーバー・他
メタ情報

Return to page top