2012.03.29 jQuery1.7に対応

カラーをアニメーションさせるナビゲーションにはjquery.color.jsプラグインを使用しています。

demo

ベースとなるhtml

今回はテキストタイプなので文字列をリストで並るだけですね。
一部spanを入れた方が動作が安定することがあったので入れてます。javascriptのコードにspanを指定していなかったら外してください。

html

  1. <ul id="nav1">
  2. <li><a href="#">HOME</a></li>
  3. <li><a href="#">ABOUT</a></li>
  4. <li><a href="#">GALLERY</a></li>
  5. <li><a href="#">LINK</a></li>
  6. </ul>

1.マウスオーバーでスライドするボタン

単純に横にスライドするアニメーションは「marginLeft」を変化させます。
テキストの色はcssで変えてます。

マウスオーバーでスライドするボタン

このナビゲーションに限ってはliにspanを入れると安定して動作するっぽいです。

html

  1. <li><a href="#"><span>HOME</span></a></li>

css

  1. #nav1 {
  2. margin-left: 20px;
  3. font-size: 100%;
  4. font-weight: bold;
  5. list-style: none;
  6. }
  7. #nav1 li {
  8. margin-bottom: 0.8em;
  9. }
  10. #nav1 li a {
  11. text-decoration: none;
  12. color: #333333;
  13. }
  14. #nav1 li a:hover {
  15. color: #FF9900;
  16. }

javascript

  1. $(function() {
  2. $('#nav1 li a').hover(
  3. function(){
  4. $(this).find('span').stop().animate({'marginLeft':'25px'},100);
  5. },
  6. function () {
  7. $(this).find('span').stop().animate({'marginLeft':'0px'},300);
  8. }
  9. );
  10. });

2.滑らかにバックグラウンドカラーが変化するボタン

「backgroundColor」をアニメーションすることでバックグラウンドカラーが変化するボタンができます。

滑らかにバックグラウンドカラーが変化するボタン

css

  1. #nav2 {
  2. font-size: 85%;
  3. font-weight: bold;
  4. list-style: none;
  5. }
  6. #nav2 li a {
  7. text-decoration: none;
  8. display: block;
  9. color: #FFFFFF;
  10. background: #999999;
  11. width: 160px;
  12. padding: 5px 10px;
  13. }

javascript

  1. $(function() {
  2. $('#nav2 li a').hover(
  3. function(){
  4. $(this).stop().animate({backgroundColor: '#FF9900'},200);
  5. },
  6. function () {
  7. $(this).stop().animate({backgroundColor: '#999999'},700);
  8. }
  9. );
  10. });

3.背景画像に指定したアイコンがアニメーションするボタン

リストに背景画像でアイコンを配置することは結構あるかと思います。
「backgroundPosition」を変化させればワンポイントになりそうです。

滑らかにバックグラウンドカラーが変化するボタン

css

  1. #nav3 {
  2. font-size: 85%;
  3. font-weight: bold;
  4. list-style: none;
  5. }
  6. #nav3 li {
  7. margin-bottom: 2px;
  8. }
  9. #nav3 li a {
  10. text-decoration: none;
  11. display: block;
  12. color: #FFFFFF;
  13. width: 160px;
  14. padding: 5px 10px 5px 35px;
  15. background: #999 url(img/allow.gif) no-repeat 3px center;
  16. }

javascript

  1. $(function() {
  2. $('#nav3 li a').hover(
  3. function(){
  4. $(this).stop().animate({ 'backgroundPosition': '15px' }, 200);
  5. },
  6. function () {
  7. $(this).stop().animate({ 'backgroundPosition': '0px' }, 200);
  8. }
  9. );
  10. });

4.ヒュンとバーが伸びてくるボタン

ヒュンとバーが伸びてくるナビゲーションです。Flashサイトでは結構見ますよね。
バーは単色なので画像を使用しないでもできそうですが、ここでは画像を使用しています。

ヒュンとバーが伸びてくるボタン

  1. #nav4 {
  2. font-size: 100%;
  3. font-weight: bold;
  4. list-style: none;
  5. }
  6. #nav4 li a {
  7. text-decoration: none;
  8. display: block;
  9. color: #333333;
  10. width: 160px;
  11. padding: 5px 10px 5px 25px;
  12. background: url(img/nav04.gif) repeat-y -300px 0;
  13. }

javascript

  1. $(function() {
  2. $('#nav4 li a').hover(
  3. function(){
  4. $(this).stop().animate({'backgroundPosition': '0px'},200);
  5. },
  6. function () {
  7. $(this).stop().animate({'backgroundPosition': '-300px'},300);
  8. }
  9. );
  10. });

やってることは3とほとんど変わりませんが、cssで背景画像を画像サイズ分だけマイナスして隠し、アニメーションでは0に向かって動かします。

5.くるっと切り替わるボタン

下にあるマウスオーバーボタンにくるっと切り替わるようなアニメーションをします。

くるっと切り替わるボタン

  1. #nav5 {
  2. margin-left: 20px;
  3. font-size: 100%;
  4. font-weight: bold;
  5. list-style: none;
  6. }
  7. #nav5 li {
  8. margin-bottom: 0.8em;
  9. overflow: hidden;
  10. height: 1em;
  11. line-height: 1;
  12. position: relative;
  13. width: 6em;
  14. }
  15. #nav5 li a {
  16. text-decoration: none;
  17. color: #333333;
  18. position: absolute;
  19. }
  20. #nav5 li span {
  21. position: absolute;
  22. left: 0;
  23. top: 1.5em;
  24. white-space: nowrap;
  25. }
  26. #nav5 li span a {
  27. color: #FF9900;
  28. }

javascript

  1. $(function() {
  2. $('#nav5 li')
  3. .each(function(){
  4. $(this).append('<span>'+$(this).html()+'</span>')
  5. })
  6. .hover(
  7. function(){
  8. $('a', this).stop().animate({
  9. marginTop:'-1.5em'
  10. },200);
  11. },
  12. function () {
  13. $('a', this).stop().animate({
  14. marginTop:'0em'
  15. },300);
  16. }
  17. );
  18. });

最初にリストの数だけテキスト情報をコピーしています。別のスタイルを適用するために複製された要素にspanを追加しています。
「overflow: hidden」でリストの範囲を指定しておけば複製したテキストは隠れます。あとは上にスライドするだけですね。
※これはIE6だとおかしな動作をするっぽいです。

6.マウスオーバーすると文字が拡大する。

文字サイズ(fontSize)をアニメーションするだけですね。

マウスオーバーすると文字が拡大する

javascript

  1. $(function() {
  2. $('#nav6 li a').hover(
  3. function(){
  4. $(this).stop().animate({fontSize : '260%'},200);
  5. },
  6. function () {
  7. $(this).stop().animate({fontSize: '100%'},300);
  8. }
  9. );
  10. });

7.マウスオーバーしたボタンに何かが追尾する。

マウスオーバーしたボタンに何かが追尾する。
ここでは何かはspanになっていますが画像とかの方がいいかもしれません。

マウスオーバーしたボタンに何かが追尾する

jQueryでspanを作成するのでこのナビゲーションではulをdivで囲んでいます。

html

  1. <div id="nav7">
  2. <ul>
  3. <li><a href="#">HOME</a></li>
  4. <li><a href="#">ABOUT</a></li>
  5. <li><a href="#">GALLERY</a></li>
  6. <li><a href="#">LINK</a></li>
  7. </ul>
  8. </div>

css

  1. #nav7 {
  2. position: relative;
  3. height: 100px;
  4. }
  5. #nav7 ul {
  6. margin-left: 20px;
  7. font-size: 100%;
  8. font-weight: bold;
  9. position: absolute;
  10. top: 20px;
  11. z-index: 2;
  12. list-style: none;
  13. }
  14. #nav7 ul li {
  15. margin-bottom: 0.8em;
  16. height: 1em;
  17. }
  18. #nav7 ul li a {
  19. text-decoration: none;
  20. color: #333333;
  21. }
  22. #nav7 span {
  23. width: 100%;
  24. height: 1em;
  25. display: block;
  26. background: #FFCC00;
  27. position: absolute;
  28. top: 20px;
  29. }

javascript

  1. $(function() {
  2. var nav = $('#nav7');
  3. nav.append('<span></span>');
  4. //原点の位置
  5. var contY = nav.offset().top;
  6. $('li a', nav).mouseover(function(){
  7. //移動先の位置を取得
  8. var thisOffset = $(this).offset().top - contY;
  9. $('span', nav).stop().animate({
  10. top : thisOffset +'px'
  11. },200);
  12. });
  13. });

「nav.offset().top」ulのY座標がわかりますので、そこからマウスオーバーされたliのY座標の値を引けば移動する位置がわかりますね。
またマウスアウトの動作がない場合は「hover」ではなくて「mouseover」の方がいいようです。

8.マウスオーバー以外のボタンを薄くする。

マウスオーバーしたボタンを変化させるのが王道ですが、逆をついて他を目立たせなくすることでマースオーバーしたボタンを目立たせるナビゲーションです。

マウスオーバー以外のボタンを薄くする

javascript

  1. $(function() {
  2. var nav = $('#nav8 li a');
  3. nav.hover(
  4. function(){
  5. nav.not(this).stop().animate({color : '#D8D8D8'},700);
  6. },
  7. function () {
  8. nav.not(this).stop().animate({color : '#333333'},700);
  9. }
  10. );
  11. });

「not(this)」とすることでマウスオーバー以外にアニメーションをつけることができます。

9.スライドしてから戻ってくるボタン

1はマウスオーバーでスライドして、マウスアウトで戻ってきましたが、このナビゲーションではスライドしてから戻ってくるまでがマウスオーバーアクションになっています。

右にスライドしてから戻ってくるボタン

javascript

  1. $(function() {
  2. $('#nav9 li a').mouseover(
  3. function(){
  4. $(this).stop()
  5. .animate({marginLeft:'20px'},{duration:150, queue: true})
  6. .animate({marginLeft:'0px'},{duration:150, queue: true});
  7. }
  8. );
  9. });

一つのアニメーションが終わってから、次のアニメーションを実行するような場合「queue: true」を指定します。

10.ピカッと光ってだんだん元の色に戻るボタン

9のものをcolorに指定することでピカッと光るようなボタンを作成できます。

ピカッと光ってだんだん元の色に戻るボタン

javascript

  1. $(function() {
  2. $('#nav10 li a').mouseover(
  3. function(){
  4. $(this).stop()
  5. .animate({color : '#FF9900'},{duration:150, queue: true})
  6. .animate({color : '#333333'},{duration:1500, queue: true});
  7. }
  8. );
  9. });
なるべくシンプルなコードでいろいろなバリエーションを作成したつもりですが、10個というのがきりがよかったので最後の方は穴埋め感が高くなってますね。
面白いマウスオーバーアニメーションを見かけたらぜひ教えてください。