Наверх

Кнопка-панель «Наверх» как на Вконтакте для WordPress и других сайтов

Для длинных страниц с большим объемом информации давно уже стало стандартом наличие кнопки "Наверх", возвращающей пользователя к самому началу страницы, где обычно находятся все кнопки навигации и меню. Сделать такую кнопку можно по-разному, например ссылкой на элемент вверху страницы. У сервиса Вконтакте с его бесконечными подгружаемыми налету страницами возврат "Наверх" представлен панелью, причем если пользователь желает вернуться к тому месту, где он закончил читать, повторное нажатие на панель перенесет его вниз к точке остановки.

Рассмотрим, как реализовать подобную систему для любого сайта практически на любом движке, поддерживающем шаблоны, а также для обычных статических html-сайтов.
В качестве примера будет рассмотрен WordPress.

Как и для любой динамической фичи, нам понадобится три компонента: html, css и javascript, и одна картинка-спрайт, содержащая стрелочки вверх и вниз.

Скачайте архив и распакуйте его в папку вашей темы.

Подключение и html

Теперь подключим файл стилей и скрипт к теме. Если вы не используете jquery на вашем сайте - подключите и его тоже:

<script type="text/javascript" src="http://code.jquery.com/ui/1.11.0/jquery-ui.min.js" ></script>

Подключение css и js:

<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_directory'); ?>/up/vk_up_back.css" media="screen" />
<script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/up/vk_up_back.js"></script>

Следующий html-код вставим сразу после открывающего тега <body>. В WordPress он находится обычно в header.php

Здесь блок с id topvk - это сама панель, а внутренний блок - это текст, который показывается вверху панели. Он будет изменяться динамически, поэтому для облегчения доступа присвоим и ему id со значением nobr.

<div id="topvk"><div id="nobr">Наверх</div></div>

Настройка стиля панели

В самом css нет ничего сложного: ширину панели можно изменять на свой вкус в 7 строке файла стилей, в 17 строке задается ее цвет.

Конструкция rgba(225,231,237,0.1) означает, что панель будет цвета rgb(225,231,237) с непрозрачностью 10%. Соответственно в 21 строке указано, что при наведении непрозрачность увеличивается до 80%.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#topvk{
top:0px;
left:0px;
padding:13px 0 13px;
cursor:pointer;
display:none;
width:100px;
height:100%;
position:fixed;
cursor:pointer;
-webkit-transition-property:background;
-webkit-transition-duration:200ms;
-moz-transition-property:background;
-moz-transition-duration:200ms;
z-index:1000;
 
background:rgba(225,231,237,0.1);
}
 
#topvk:hover{
background:rgba(225,231,237,0.8);
}

Отдельного внимания заслуживает следующая конструкция в конце файла стилей:

@media screen and (max-width: 1100px){
	#topvk{
		width:40px !important;
	}
 
	#topvk #nobr, #topvk:hover #nobr{
		padding: 0px 35px !important;
		margin: 0 31px 0 12px !important;
	}
}

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

Немножко динамической магии

Теперь рассмотрим javascript, оживляющий эту панель:

var scrollto = 0;
var prevscroll = 0;
jq = jQuery.noConflict();
 
jQuery(document).ready(function ($){
	jq("#topvk").css('display','none');
});
 
jq(function(){
	jq('#topvk').click(function(){
		prevscroll = $(window).scrollTop();
		jq('html, body').stop().animate({scrollTop:scrollto},1000, function(){
		jq('#topvk #nobr').text('Назад').removeAttr('class').attr('class','back');
		scrollto = prevscroll;
		});
	})
});
 
jQuery(window).scroll(function(){
 
	if(jQuery(window).scrollTop()>100){
		jq("#topvk").show();
		jq('#topvk #nobr').text('Наверх').removeAttr('class');
		scrollto = 0;
	}
});

Зададим 2 глобальных переменных - куда подскролливать сайт и предыдущее местонахождение пользователя. Скрипт писался еще под старую версию jQuery, а затем jQuery был обновлен, поэтому добавим для совместимости jq = jQuery.noConflict();

Если у вас еще старая версия, переменную jq везде можно заменить на привычный $.

При начальной загрузке панель не показывается. Когда пользователь опускается ниже чем на 100 пикселей от верха страницы, панель показывается с текстом "Наверх" и соответствующей стрелочкой.

Что происходит при клике на панель:

  • запоминается позиция пользователя в переменную prevscroll
  • страница плавно подскролливается к желаемой позиции (изначально это 0). 1000 - это время, за которое будет совершена анимация. чем меньше, тем быстрее произойдет прокрутка.
  • текст на панельке меняется на "Назад", стрелка переворачивается
  • позиция scrollto становится равной предыдущему положению на странице.

Таким образом, если пользователь кликнет на панели и вызовет функцию еще раз, страница будет подскроллена к тому месту, где он был ранее, а кнопка опять поменяет текст на "Наверх".

Пример работающего скрипта можно посмотреть на любой странице моего сайта слева.

Скачать Архив с исходниками

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *