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

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

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

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

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

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

<script type="text/javascript" src="https://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%.

#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 становится равной предыдущему положению на странице.

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

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

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

2 комментарий для “Кнопка-панель «Наверх» как на Вконтакте для WordPress и других сайтов”
  1. Отличная у вас кнопка наверх. Пытаюсь сделать себе такую, но не силен в кодах совсем. Можете подсказать?
    Я скачал ваш архив, распаковал его в папке своей темы (на ворпресс). Вставил после в header.php, в стилях темы подписал следом два кода: #topvk{ … и @media …
    Куда вставить javascript, оживляющий эту панель?
    Все ли я правильно делаю? Заранее благодарю, ну уж очень красивая штука и, главное, функциональная!

    1. Внешний файл JavaScript можно подключить в header или footer вашей темы. Проверьте, где у вас подключены другие скрипты, и вставляйте по такому же образцу скрипт из архива.

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

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