3

ページの上部にメニューバーがあり、すでに上部にあるときに上にスクロールした場合に表示したいメニューバーがあります。上にスクロールすると、そこにいる間にもう一度上にスクロールすると、バーが表示されます。

私はjqueryを使用してこのコードを持っています

// listen for the scroll to show the top menu
var was_on_top = false;
$(function () {
    $(window).bind("scroll", function (e) {

        if ($(window).scrollTop() == 0) {
            if ($('.menu').css('display') == "none" && was_on_top) {
                $('.menu').slideDown();
            } else {
                was_on_top = true;
            }
        } else {
            was_on_top = false;
        }
    });
});

ただし、スクロールイベントは、すでに上にある間は発生しません。何か案は?

編集:ここに作業コードがあります。FF、Chrome、IE9でテスト済み

// listen for the scroll to show the top menu
var was_on_top = false;
$(function () {
    if (window.addEventListener) {
        window.addEventListener('DOMMouseScroll', onMouseWheelSpin, false); // FireFox
        window.addEventListener('mousewheel', onMouseWheelSpin, false); // Chrome
    } else {
        window.onmousewheel = onMouseWheelSpin;
    }
});

function onMouseWheelSpin(event) {

    if (!event) // IE sucks
        event = window.event;

    if ($(window).scrollTop() == 0 &&
          (
            event.detail < 0 // Firefox
            ||
            (event.wheelDelta && (
                                    (window.opera && event.wheelDelta < 0) // Opera
                                    ||
                                    event.wheelDelta > 0 // IE
                                 )
            )
          )
        ) {
        if ($('.menu').css('display') == "none" && was_on_top) {
            $('.menu').slideDown();
        } else {
            was_on_top = true;
        }
    } else {
        was_on_top = false;
    }
}
4

1 に答える 1

1

ウィンドウがスクロールしなくなったため、スクロール イベントは発生しません。

マウス ホイール自体のカスタム イベントを作成する必要があります。

これは役に立つかもしれません: Javascript: マウス ホイール イベントをキャプチャし、ページをスクロールしませんか?

于 2012-10-17T17:42:36.477 に答える