Открыть меню    

Блок, выпадающий при скроллинге страницы

На днях я читал статью в NYTimes и заметил, что у них реализован очень интересный эффект: когда пользователь доходит до конца страницы, справа плавно появляется блок с контентом. В этом блоке содержится ссылка на похожую статью, полагаю, это может быть интересно для любого блога или веб-сайта.

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

выпадающий блок при скроллинге страницы

Итак, давайте перейдем к делу.

Для начала,где-нибудь в конце статьи нам понадобится параграф с идентификатором last.

HTML

<p id="last">
    Какой-нибудь  параграф
</p>

Затем нам потребуется составить html-код для выдвигаемого блока.

HTML

<div id="slidebox">

<a class="close"></a>
<p>Integer in purus in ante.  (4 of 23 articles)</p>
<h2>Etiam quis quam eu risus congue malesuada. </h2>
<a class="more">Read More »</a>

</div>

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

Теперь давайте стилизуем наш выдвигаемый блок.

CSS

#slidebox{
    width:400px;
    height:100px;
    padding:10px;
    background-color:#fff;
    border-top:3px solid #E28409;
    position:fixed;
    bottom:0px;
    right:-430px;
    -moz-box-shadow:-2px 0px 5px #aaa;
    -webkit-box-shadow:-2px 0px 5px #aaa;
    box-shadow:-2px 0px 5px #aaa;
}

Блоку задано фиксированное позиционирование, таким образом, блок не меняет своего положения при скроллинге веб-страницы.

Изначально блок спрятан (у свойства right задано отрицательное значение, соответствующее совокупной ширине блока); выдвигать блок будем при помощи jQuery.

Текстовые элементы и ссылки имеют следующие стили:

CSS

#slidebox p, a.more{
    font-size:11px;
    text-transform:uppercase;
    font-family: Arial,Helvetica,sans-serif;
    letter-spacing:1px;
    color:#555;
}
a.more{
    cursor:pointer;
    color:#E28409;
}
a.more:hover{
    text-decoration:underline;
}
#slidebox h2{
    color:#E28409;
    font-size:18px;
    margin:10px 20px 10px 0px;
}

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

Чтобы реализовать плавное выпадение блока добавим немного Javascript.

Для начала подключите библиотеку jQuery перед закрывающим тегом body или в тег head.

<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>

Затем нам потребуется добавить две функции. Роль первой функции: если пользователь при прокрутке страницы достиг элемента-катализатора, показываем скрытый ранее блок. Вторая функция: когда пользователь жмет по маленькому крестику, блок исчезает. Эти две функции добавьте после подключенной библиотеки jQuery перед закрывающим тегом body или вставьте скрипт в тег head (или создайте и подключите отдельный js-файл):

JQuery

<script type="text/javascript">
$(function() {
// функцию скролла привязать к окну браузера
$(window).scroll(function(){
    
// distanceTop = (высота: от начала страницы до эл-та #last) -
//- высота окна браузера
var distanceTop = $('#last').offset().top - $(window).height();
// если величина прокрутки больше distanceTop 
if  ($(window).scrollTop() > distanceTop)
$('#slidebox').animate({'right':'0px'},300);
else
$('#slidebox').stop(true).animate({'right':'-430px'},100);
});
//связываем  function() с событием click для эл-та  .close 
$('#slidebox .close').bind('click',function(){
$(this).parent().remove();
});
});
</script> 

На этом все. Надеюсь, Вам пригодится.

Источник

Комментарии к статье

аватарка пользователя
2013-03-12
DrajE

Осталось только решить вопрос с самим скроллингом. Блок вылазит после id="last", а мне нужно сразу после начала прокрутки страницы. Как это сделать

аватарка пользователя
2013-03-12
dnzl

делается в 2 секунды, подумайте

аватарка пользователя
2013-08-02
Серый

в браузере Firefox 22.0 у меня деграется туда сюда этот выпадающий блок. Вчем может быть дело ?

аватарка пользователя
2013-08-02
Серый

в Демо примере в браузере Firefox 22.0 тоже самое дергается блок

аватарка пользователя
2013-11-01
Stan

Долго искал и вот нашел, то что нужно. Прописал, все работает. Спасибо!

аватарка пользователя
2014-08-17
Petu

Спасибо!

Просто и понятно!

аватарка пользователя
2017-11-11
Евгений

Здравствуйте! Спасибо большое!
Но есть вопрос: как ко всему этому делу прикрутить куки с "жизнью" в 1 час?
Чтобы пользователю показался этот блок, он его закрыл и в течении 1 часа ему больше ничего не выскакивало. А по истечению 1 часа снова вылетал блок?

аватарка пользователя
2017-11-11
dnzl

Евгений, нужно поставить куку с временной меткой (когда пользователь вошел), потом проверять эту метку на прошел час или нет. да, и если ожидается, что пользователь может торчать на странице сколько угодно времени, то, вероятно, нужно брать куку с временной меткой и делать засечку на удаление через setTimeout, это навскидку, но, конечно, проще нагуглить решение

аватарка пользователя
2017-11-11
Евгений

dnzl, я нашел решение где сделано: http://dbmast.ru/sozdaem-vsplyvayushhee-okno-pri-zagruzke-sajta-s-pomoshhyu-css3-i-nemnogo-javascript/
Но там всплывающее окно немного другого действия (по истечении 5 сек всплывает) и куки в днях задается.
Но как совместить тот код и этот, который у вас, извилин к сожалению не хватает :(

Можете пожалуйста помочь, и добавить решение в свою статью, думаю очень многим пригодится!

аватарка пользователя
2018-11-26
Артур

Здравствуйте.

На вордпресс инструкция аналогична ?

купить франшизу на производство;помпа парогенератора Philips