Подтвердить что ты не робот

Заголовок изменяется при прокрутке вниз (jQuery)

Недавно TechCrunch переработал свой сайт, и у них есть сладкий заголовок, который минимизирует более тонкую версию своего бренда при прокрутке вниз.

Вы можете видеть, что я имею в виду здесь: http://techcrunch.com/

Как я могу создать что-то подобное? Есть ли учебник где угодно, а если нет, можете ли вы, добрые души, дать мне несколько советов о том, с чего начать?:)

4b9b3361

Ответ 1

Это не слишком сложно, это просто .scroll() событие. Я не могу показаться, что это делается в скрипке из-за расположения панелей Проверить EDIT!. Но в основном у вас есть div сверху position: absolute, поэтому он всегда сверху, затем используйте .scroll()

$("body").scroll( function() {
    var top = $(this).scrollTop();
    // if statement to do changes
});

Метод scrollTop() используется для определения того, сколько прокручивается body.

И в зависимости от того, где вы хотите изменить свой заголовок div, вы можете заставить свой оператор if делать много вещей. В случае примера, который вы указали, это будет что-то вроде

if ( top > 147 )
    // add the TechCrunch div inside the header
else
    // hide the TechCrunch div so that space is transparent and you can see the banner

EDIT

Ура! Я смог сделать эту скрипку, чтобы продемонстрировать пример!:)

Удачи!

Ответ 2

Старый вопрос, но я недавно столкнулся с этой проблемой, и принятое решение здесь не работает, потому что высота моего div не была исправлена, поэтому, короче, это решение, с которым я столкнулся.

JSfiddle: http://jsfiddle.net/Lighty_46/27f4k/12/

$(document).ready(function () {

var bluebutton = $('#blue_link').offset().top - parseFloat($('#blue_link').css('marginBottom').replace(/auto/, 0));

var bluebuttonbottom = $('#blue_block_bottom').offset().top - $('#main_nav').height() - parseFloat($('#blue_link').css('marginBottom').replace(/auto/, 0));

$(window).scroll(function (event) {
    // what the y position of the scroll is
        var y = $(this).scrollTop();

    // whether that below the top of the div
        if (y >= bluebutton) {

    // if so, ad the fixed class
        $('.home_nav').addClass('blue_selected');

}

    // whether you have passed the bottom of the div
        if (y >= bluebuttonbottom) {

    // if so remove the selected class
        $('.home_nav').removeClass('blue_selected');

        } else {

    // otherwise remove it
        $('.home_nav').removeClass('blue_selected');
}

});
});

SO в основном,

  • $('# blue_link') был верхним div, я хотел вызвать изменение класса
  • $('# blue_block_bottom') был div, который я хотел вызвать для удаления класса
  • $('# main_nav') был мой фиксированный заголовок

Итак, когда нижняя часть моего заголовка достигает вершины div, класс "blue_selected" применяется к ".home_nav"..... тогда, если нижняя часть div передает нижнюю часть заголовка, класс "blue_selected" удаляется из ".home_nav".

Вам нужно будет повторить это для каждой из ваших кнопок с помощью соответствующих

Я тестировал его в Chrome, Firefox и IE от 10 до 8 (работает в 8, но скрипка слегка разрывается).

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

Ответ 3

Посмотрите Плавающие Divs

То, что вы ищете, - это то, что вам нужно определить Div как плавающее Div, а затем оно всегда остается на странице всякий раз, когда вы прокручиваете. В Techcrunch у них есть заголовки в верхней части Центра, поэтому он всегда остается там

Ответ 4

Здесь одна идея

  • Привязать к событию document.body.onscroll
  • onscroll проверьте положение прокрутки. если не наверху, замените изображение на панели
  • если он сверху, отобразите другое изображение

Ответ 5

Хотя ответы до этого кажутся идеальным решением, похоже, что TechCrunch использует z-index и фиксированное позиционирование для создания этого эффекта прокрутки.

Desmond on Imageshack

Как видно из изображения выше, как большой, так и малый заголовок находятся на экране, и это не произойдет без настройки события прокрутки jQuery.

Ответ 6

Используйте приведенный ниже код своей работы на моей стороне

<script src='js/jquery-1.9.1.min.js' type="text/javascript"></script>
<script>
    $(document).on("mobileinit", function() {

        $.mobile.fixedtoolbar.prototype.options.tapToggle = false;
        $.mobile.fixedtoolbar.prototype.options.hideDuringFocus = "";

    });
</script>
<script src="js/jquery.mobile-1.3.1.min.js"></script>

Ответ 7

$(window).on("scroll", function () {
    if ($(this).scrollTop() > 100) {
        $("#header").addClass("not-transparent");
    }
    else {
        $("#header").removeClass("not-transparent");
    }
});