2015-06-23 3 views
3

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

Я нашел множество примеров перехода на определенное место прокрутки на странице, а затем анимацию div на другой размер, однако я хочу настроить максимальную высоту div в зависимости от местоположения прокрутки. Первоначально я хотел бы, чтобы максимальная высота div составляла около 150 пикселей, а затем, когда вы прокручиваете от 200 пикселей вниз по странице до 400 пикселей вниз по странице, я хочу, чтобы максимальная высота div уменьшалась до 75 пикселей. Тогда, очевидно, когда вы прокручиваете резервную копию, она становится больше.

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

Примечание: Размер должен постепенно регулироваться с помощью положения прокрутки.

ответ

7

Я не уверен, если я понял вашу проблему, но когда я сделал я вышел с этим: D

$(window).scroll(function(){ 
    var scrollTop = $(window).scrollTop(); 
    if(scrollTop < 200){ 
    maxHeight = 150; 
    }else if(scrollTop > 400){ 
    maxHeight = 75; 
    }else{ 
    maxHeight = 150 - 75 * (((scrollTop-200) * 100)/200)/100; 
    } 
    $('#thediv').stop().animate({'max-height': maxHeight+"px"}, 500); 
}) 

Здесь у вас есть образец : https://jsfiddle.net/keccs4na/

+0

Я отметил это как ответ, хотя я изменил длину анимации на 1, так что это почти достаточно моментально. https://jsfiddle.net/x5a3hyyz/2/ – BN83

+0

вы могли бы объяснить математику позади нее? Кажется, я не понимаю, как это работает? – BN83

+1

Я обновил пример без анимации и упростил математику. Математика вычисляет отношение прокрутки между 200 и 400 и применяется к 75. Пример: если scrollTop равен 245, это соотношение будет (245-200)/200 => 45/200 = 0,225. После этого мы применяем соотношение 75: 75 * 0.225 = 16.875. Это означает, что div будет с 16.875 меньше. –

2

Вы можете попробовать это:

$(window).on('scroll', function() { 
    var scrollTop = $(window).scrollTop(); 

    if (scrollTop >= 200 && scrollTop <= 400) { 
     $('#divID').stop().animate({height: "75px"}, 250); 
    } else { 
     $('#divID').stop().animate({height: "150px"}, 250); 
    } 
}); 

Примечание: Вы хотите использовать CSS, чтобы сначала установить высоту 150px.

+0

Это не постепенно регулирует его. Я видел примеры этого, но мне не нравится эффект перехода к заданной точке, а затем анимация. В идеале я хочу, чтобы он настраивался по мере прокрутки. Поэтому, если вы прокручиваете только половину пути между двумя точками, она регулирует высоту на полпути между минимальным и максимальным размерами. См. Здесь пример того, что я хотел бы попробовать и сделаю http://www.kriesi.at/themes/enfold/ – BN83

+0

Я одобрил ваше редактирование, извините, что это путало, однако я думал, что эта строка объясняет это «Я «Мы нашли множество примеров перехода на определенное место прокрутки на странице, а затем анимацию div на другой размер, однако я хочу настроить максимальную высоту div в зависимости от местоположения прокрутки». Извинения снова. – BN83

+1

Ха-ха, действительно, действительно. Я думаю, что эта заметка просто даст дополнительное разъяснение, поскольку два ответа были основаны на одной и той же логике. Вам понадобится выполнить какую-то математическую функцию для вычисления положения прокрутки с максимальным размером для этой позиции. Все еще смотрю в нее. – NightOwlPrgmr

1

Попробуйте это.

$(window).on('scroll', function() { 
    var v = $(window).scrollTop(); 
    if (v > 200) { 
     $('#id-of-div').css({"height": "75px","max-height":"75px"}); 
    } 
    else { 
     $('#id-of-div').css({"height": "150px","max-height":"150px"}); 
    } 
}); 

EDIT:

$(window).on('scroll', function() { 
     var v = $(window).scrollTop(); 
     if (v > 200) { 
      $('#id-of-div').animate({"height": "75px","max-height":"75px"},500); 
     } 
     else { 
      $('#id-of-div').animate({"height": "150px","max-height":"150px"},500); 
     } 
    }); 
+0

Это, кажется, просто перепрыгивает с одного размера на другой, а не ослабляет между ними. – BN83

+0

@ BN83 Да, я добавил редактирование, которое должно сделать его более плавным. – Varun

Смежные вопросы