$ (this) .offset () равно нулю - PullRequest
       29

$ (this) .offset () равно нулю

1 голос
/ 05 марта 2012

У меня проблема здесь, я хочу, чтобы левое боковое меню скользило вниз, когда оно достигает определенной точки на странице, и всегда оставалось наверху, пытаясь сделать это с помощью jQuery.Фиксированная позиция в css работает, но она не остается в верхней части окна при скольжении по странице, оставляет большой белый пробел.jQuery новичок здесь ...

Я получаю эту ошибку;

$(this).offset() is null

Полный код здесь

$(document).ready(function () {

$(window).scroll(function (event) {

    var container = this;

    var msie7 = $.browser.msie && $.browser.version < 8;

    if (!msie7) {
        var top = $(this).offset().top - parseFloat($(this).css('margin-top').replace(/auto/, 0));

        $(window).scroll(function (event) {

            var y = $(this).scrollTop() + 10;

            if (y >= top) {
                $(container).find("#dvContentAlpha").addClass('LeftMenuFixed');
            } else {
                $(container).find("#dvContentAlpha").removeClass('LeftMenuFixed');
            }
        });
    }
});
});

CSS

#dvContentAlpha
{
width: 145px;
float: left;
margin-right: 35px;
position:fixed;
}

.LeftMenuFixed {
float: left;
font-weight: bold;
position: fixed;
top: 10px;
width: 145px;
}

Невозможно прочитать правильное начало нуля << сообщение об ошибке в элементе проверки Google Chrome </p>

тогда мне нужно установить значение для top?запутался здесьнашел гораздо более простое решение моей проблемы, почему это решение не вышло, прежде чем я разместил здесь Grrrr!Для тех, у кого есть похожие проблемы, это то, что я использовал;

<script type="text/javascript">
$(function () {
    var offset = $("#dvContentAlpha").offset();
    var topPadding = 15;
    $(window).scroll(function () {
        if ($(window).scrollTop() > offset.top) {
            $("#dvContentAlpha").stop().animate({
                marginTop: $(window).scrollTop() - offset.top + topPadding
            });
        } else {
            $("#dvContentAlpha").stop().animate({
                marginTop: 0
            });
        };
    });
});
</script>

Работает как шарм!

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

В вашем коде $(this) относится к window, которые не имеют значения смещения.Я думаю, вам нужно заменить $(this) на селектор, соответствующий вашему меню, например $('.LeftMenuFixed').

1 голос
/ 05 марта 2012

$(window).offset() не будет работать, так как элемент окна - это весь ваш видовой экран ... Вероятно, вы должны выполнить этот тест для вашего элемента nav.

Я думаю, вы можете попытаться добавить событие прокрутки к элементу окна (как вы делаете), но затем просто установить смещение для элемента nav вместо $(this), который является просто вашим элементом окна.

...