Изменение css для нескольких объектов в соответствии с положением прокрутки

#jquery #html #css

#jquery #HTML #css

Вопрос:

Я пытаюсь выделить ссылку в липком заголовке, который соответствует div, который в данный момент прокручивается. Я изо всех сил старался найти решения в сети, но ничего не нашел. Возможно, я использовал неправильные ключевые слова, поэтому простите меня, если на это уже был дан ответ. Я также знаю о Scrollspy Bootstrap, однако что-то на моем веб-сайте мешает ему работать. О боже … что-то пошло не так.

В любом случае я был бы признателен, если бы вы могли взглянуть на следующую скрипку: http://jsfiddle.net/Eh5L9/9 /

     $(window).scroll(function () {
    $(".panel").each(function() {
        var eidee = this.attr('id'),
            thetop = this.offset().top,
            thebottom = this.offset.top   this.height();            
        if ($(document).scrollTop() > thetop amp;amp; $(document).scrollTop() < thebottom) {
            $('#menu link'   eidee).addClass('bla');
        }   
        else {
            $('#menu link'   eidee).removeClass('bla');
        }
    });
});
  

Комментарии:

1. знаете ли вы, что мешает Scrollspy работать? повторное изобретение колеса отстой.

2. ну, для начала, ваше $('.panel').each(function() слово написано неправильно

3. у вас много-много подсказок.. подчеркивание вместо подчеркивания, функция вместо функции, attr(‘id’) вместо id, не добавлен jquery, $(this) вместо this и многое другое.. вы можете просто удалить этот javascript..

4. @dave-briand Я думаю, что это как-то связано с этим:

5. @gulty как иронично, что ваше написание typo само по себе является опечаткой

Ответ №1:

помимо множества опечаток, здесь есть рабочая скрипка: http://jsfiddle.net/Eh5L9/6 /

Я изменил меню CSS, чтобы оно отображалось внизу, чтобы вы могли видеть, что оно работает. Тем не менее, есть лучший способ написать этот код — он все равно работает..

JS:

     $(window).scroll(function() {
    $(".panel").each(function(){ 
        var eidee = $(this).attr('id'),
            thetop = $(this).offset().top,
            thebottom = $(this).offset().top   $(this).height();    
        if ($(document).scrollTop() > thetop amp;amp; $(document).scrollTop() < thebottom) {
            $('#menu').find('#link'   eidee).addClass('bla');
        }   
        else {
            $('#menu').find('#link'   eidee).removeClass('bla');
        }
    });
});
  

Комментарии:

1. аккуратнее — это, очевидно, работает, поэтому оно горит — формулировка плохая (например, eidee) — также по соображениям совместимости было бы лучше не изобретать велосипед. это всего лишь небольшая функция, поэтому все в порядке 🙂 и кстати. вы можете пометить вопрос как отвеченный — не требуется повышение голоса 🙂

2. вот та же скрипка с позицией, установленной на фиксированную и верхнюю вместо абсолютной. jsfiddle.net/Eh5L9/10