1

私はjQueryを初めて使用し、ナビゲーションの問題を解決しようとしています。多くのネストされたリストを含む垂直メニューを作成しました。これは純粋にCSSですが、私のクライアントは、現在開いているサブメニューにカーソルを合わせなくなったときに、1秒ほど開いたままにするように要求しました。

これが私が取り組んでいるサイトです:http://dev.musgraveagencies.com/

そして、これが彼らが現在持っているサイトであり、彼らがメニューをどのように遅らせることを望んでいるかです:http ://www.musgraveagencies.com/

これを実現するためにjQueryを使用できると思いますが、Javascriptが有効になっていない場合でも、サイトをそのまま機能させたいと思います。

編集:みんなの助けをありがとう!これが以下の最終的なコードです。

私のHTML:

<body class="nojs">
        <div id="nav">
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">Development Projects</a>
                <ul>
                    <li><a href="#">Design Build</a>
                        <ul>
                            <li><a href="#">Interior Design</a>
                                <ul>
                                    <li><a href="#">Project Example</a></li>
                                </ul>
                            </li>
                            <li><a href="#">Project Example 1</a></li>
                            <li><a href="#">Project Example 2</a></li>
                            <li><a href="#">Project Example 3</a></li>
                        </ul>
                    </li>
                    <li><a href="#">Industrial</a>
                        <ul>
                            <li><a href="#">Project Example 1</a></li>
                            <li><a href="#">Project Example 2</a></li>
                            <li><a href="#">Project Example 3</a></li>
                            <li><a href="#">Project Example 4</a></li>
                        </ul>
                    </li>
                    <li><a href="#">Residential</a></li>
                    <li><a href="#">Neighbourhood</a></li>
                </ul>
            </li>
            <li><a href="#">Contact</a></li>
        </ul>
        </div>
    </div>
</body>

私のCSS:

#nav {
    width: 156px;
    font: 9pt 'TeXGyreScholaRegular', Arial, sans-serif;
    text-align: left;
}

#nav ul a {
    color: #fff;
    display: block;
    overflow: auto;
    line-height: 19pt;
    text-indent: 2px;
}

#nav ul a:hover {
    color: #fff;
    text-decoration: none;
}

#nav ul li:hover {
    background: #484848;
}

#nav ul {
    width: 156px;
}

#nav ul li {
    list-style: none;
    background: #000;
    position: relative;
    z-index: 100;
}

#nav ul li ul {
    position: absolute;
    width: 156px;
    top: 0;
    left: 156px;
}

body.nojs #nav ul li ul  {
    display: none;
}

body.nojs #nav ul li:hover > ul {
    display: block;
}

私のjQuery:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.hoverIntent.minified.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#nav ul li ul').hide();
        $('body').removeClass('nojs');

        var config = {    
            sensitivity: 2, 
            interval: 200,    
            timeout: 700, 
        };

        var animating = false;

        $('#nav ul li').hoverIntent(
        function () {
                animating = true;
                $('> ul', this).fadeIn(100, function() {
                    animating = false;
                });
        },

        function () {
            animating = true;
            $('> ul', this).delay(400).fadeOut(200, function() {
                animating = false;
            });
        });
    });
</script>
4

3 に答える 3

1

jQuery HoverIntent プラグインを使用する

@ thecl.com で使用されていることがわかります。これは、親アンカーからサブナビゲーションに移動できないという ie8/7 の問題にも役立ちます。

于 2013-01-16T21:27:49.120 に答える
1

コードの問題は、jQuery でトランジション (フェード) をトリガーしているが、CSS ですぐに要素を隠していることです。したがって、これは遅延なく発生します。

transition-delayまたはプロパティを CSS3 で使用できますanimation-delayが、これらは IE ではサポートされていません。他のすべてはそれらをサポートしていますが、ほとんどのバージョンではサポートされていません。

transition-delay: 2s;
-moz-transition-delay: 2s; /* Firefox 4 */
-webkit-transition-delay: 2s; /* Safari and Chrome */
-o-transition-delay: 2s; /* Opera */ 

setTimeout()なので、CSS(ホバー疑似クラス)のほとんどをjavascript/jQueryに移行し、メソッドやjQueryのメソッドを使って遅延表示/非表示にするべきだと思いますdelay()

アップデート:

ユーザーのブラウザで JavaScript が有効になっていないと心配なので、JavaScript と CSS 遅延関連のプロパティがなければ、HTML 要素の外観の変更を遅延させることはできないと思います。

あなたができることは次のとおりです。

  1. メニューの CSS のみのバージョンを作成します (遅延が必要な場合は、transition-delay および/または animation-delay CSS3 プロパティを使用して)。これらのプロパティがブラウザでサポートされていない場合、マイナス面は「遅延」が発生しないことだけですが、メニューは引き続き機能します。
  2. メニューの JavaScript バージョンを作成します (遅延のための setTimeout などのメソッドを使用)。
  3. <noscript>JavaScript 以外のコンテンツと CSS のみのメニューのタグを使用して、その中に配置します。

このようにして、両方のユーザーを満足させることができます。

于 2013-01-16T21:49:58.713 に答える
1

このフィドルを試してください:http://jsfiddle.net/hamidlab/adadv/

トップレベルとサブレベルのクラスをすべて削除し、>直接の子をターゲットにしていました。

js にも少し変更を加えました (fadeIn 効果を気にしない場合は、js は必要ありません)。

$('#nav ul li').hover(function(){
    $(' > ul', this).stop(true, true).fadeIn();  
}, function(){
    $(' > ul', this).hide(0);
});

CSS の変更点 : http://jsfiddle.net/hamidlab/adadv/1/

注 : この小さなことについては、プラグインは必要ありません。プラグインを使用せず、できる限りシンプルでクリーンに保つ方がよいと思います。

于 2013-01-16T21:35:59.803 に答える