2012-02-01 4 views
0

リンクをホバーするとリンクが前方に押し出され、マウスを動かすとリンクが後方に移動するメニューを設計したいと思います。JQueryによるパディングメニュー

私はそれを.hover関数で行うことができます。私はjQueryイベントを使用したくありません。私はhtmlタグに埋め込まれているジャバスクリプトイベントを使いたい。

<script type="text/javascript"> 
    function MIn() 
    { 
    jQuery(this).animate({paddingLeft:"20px"},500); 
    } 
    function MOut() 
    { 
    jQuery(this).animate({paddingLeft:"0px"},500); 
    }    
    </script> 
</head> 
<body> 
    <ul> 
    <li onmouseover = "MIn()" onmouseout="MOut()" ><a href="#">Home</a></li> 
    <li onmouseover = "MIn()" onmouseout="MOut()"><a href="#">Download</a></li> 
    <li onmouseover = "MIn()" onmouseout="MOut()"><a href="#">Products</a></li> 
    <li onmouseover = "MIn()" onmouseout="MOut()"> <a href="#">Register</a></li> 
    <li onmouseover = "MIn()" onmouseout="MOut()"><a href="#">About</a></li> 
    <li onmouseover = "MIn()" onmouseout="MOut()"><a href="#">Contact</a></li> 
    </ul> 
</body> 
+0

動作しませんでしょうか? – locrizak

+0

リンクは埋め込まれません! – sap

答えて

0

jQuery(this)をjavascript関数wout jQuery selectorで使用できませんでした。このような要素を送る必要があります。

<script type="text/javascript"> 
     function MIn(elm) 
     { 
     jQuery(elm).animate({paddingLeft:"20px"},500); 
     } 
     function MOut(elm) 
     { 
     jQuery(elm).animate({paddingLeft:"0px"},500); 
     }    
     </script> 
    </head> 
    <body> 
     <ul> 
     <li onmouseover = "MIn(this)" onmouseout="MOut(this)" ><a href="#">Home</a></li> 
     <li onmouseover = "MIn(this)" onmouseout="MOut(this)"><a href="#">Download</a></li> 
     <li onmouseover = "MIn(this)" onmouseout="MOut(this)"><a href="#">Products</a></li> 
     <li onmouseover = "MIn(this)" onmouseout="MOut(this)"> <a href="#">Register</a></li> 
     <li onmouseover = "MIn(this)" onmouseout="MOut(this)"><a href="#">About</a></li> 
     <li onmouseover = "MIn(this)" onmouseout="MOut(this)"><a href="#">Contact</a></li> 
     </ul> 
    </body> 
+0

素敵なこと、もっと説明できますか? – sap

+0

@ user1182970、[Gaby](http://stackoverflow.com/a/9098196/1149495)がなぜこれとあなたのものでないかを説明してください。また、バインディングを使用しない理由は何ですか? –

+0

ねえ、私にそれを打つ。 :)基本的にすべてのイベントは、それを起動したターゲットを持っています。したがって、ターゲットを関数のパラメータとして渡しています。そのようにして、関数はそれを適用する要素を知っています。私はあなたのHTMLから行動に関連する何かを削除する方が良いと言わなければならない。ベストプラクティスは、JavaScript(フレームワークを使用したくない場合)でイベントリスナーを作成することです。これにより、ビヘイビア層とプレゼンテーション層を素早く分離することができます。 –

0

あなたはA -tag、ないLI上にあるイベント利きが必要になります。

は、ここに私の試みです。また、埋め込みを使用するためにAタグdisplay:blockまたはdisplay:inline-blockを作成する必要があります。

+0

パディングをli de anchorに設定すると、親がパディングを取得するため、右側に移動します。これは正しい方法です、あなたは方法ではありません... –

+0

これは、ラッパーではなく、リンクにアニメートする意味があります。 –

+0

は機能しません。余白を左に変更しました。 – sap

0

あなたはjQueryを使用していますが、なぜイベントapiではないのですか?

$(document).ready(function() { 
    $('li').hover(function() { 
    // onmouseover 
    $(this).animate({'padding-left': '20px'}, 500); 
    }, function() { 
    // onmouseout 
    $(this).animate({'padding-left': 0}, 500); 
    }); 
}); 

このコードの仕事だけでなく、実際の例:http://jsfiddle.net/HXpPF/2/


stop()機能はカーソルがLiを行く場合は、アニメーションを停止することです。あなたのケースでは、あなたのメソッドの内部

+0

私はそれを言及しています.hoverなし – sap

+0

@Stefan、 '.hover()'は、マウスセンターとマウスの削除のショートカットです。[ソース](http://james.padolsey.com/jquery/git/jQuery.fn.hover) /)。 –

2

thisあなたは要素への呼び出しを結合していないので、あなたがそれを期待するものではありません..しかし、代わりに、直接ウィンドウのコンテキストでそれを呼び出している... this === window ...

あなたは

デモ.. jQueryの

$('li').hover(MIn, MOut); 

との結合を行い、onmouseoveronmouseout属性を削除する必要がありますhttp://jsfiddle.net/FydWH/

+0

私はバインドせずにやりたいですか?どんな方法ですか? – sap

0

今のところ、イベントバインディングを使用したくない場合は、この方法でパラメータ/引数として参照を現在の要素に渡すことができます。

HTML

<li onmouseover = "MIn(this)" onmouseout="MOut(this)" ><a href="#">Home</a></li> 

Javascriptを

function MIn(el) { 
    jQuery(el).animate({paddingLeft: "20px"}, 500); 
} 
関連する問題