Разработка сайта: создание плавающей панели
В разработке сайта важно учесть огромное количество нюансов, создать для посетителя удобный, красивый, интуитивно-понятный интерфейс. Некоторые элементы дизайна необходимо предусмотреть так, чтобы они были доступны посетителю даже при прокрутке страницы вниз. В этом случае наиболее очевидное решение — создание плавающей панели.
В плавающей панели вы можете разместить какой угодно контент: будь то самые популярные статьи или реклама. Кстати, кликабельность (CTR) рекламных блоков в таком случае заметно улучшается. Да и просто не лишним будет чем-то занять опустевшую при скроллинге область сайдбара.
Для плавающей панели я применяю технологию jQuery, которая часто автоматически подключается в сайтах на WordPress. Ранее я уже писал о том, как заставить панельку плавать на JS, т.е. без использования технологии, которая будет применена сейчас. Чтобы проверить, подключается ли у вас библиотека jQuery, пропишите в шаблоне дизайна, отвечающем за «подвал» страницы (в WP это footer.php) такие строки:
<script> alert(typeof(jQuery)); </script>
Если при обновлении страницы сайта увидите сообщение «undefined», значит, вам необходимо подключить библиотеку.
Для подключения библиотеки в «шапке» сайта (в WP — файл шаблона header.php) между открывающим и закрывающим тегом «head» вставляем:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
Теперь ваше сообщение должно быть «function»:
Не забудьте убрать код, отображающий сообщение, чтобы не раздражать посетителей. Да, если вы не увидели вообще никакого сообщения, прекратите читать эту статью, пока не сломали сайт!
Создание плавающей панели
А теперь непосредственно создание плавающей панели. Предположим, что панель наша будет плавать в сайдбаре. Тогда открываем файл шаблона sidebar.php (опять же, это в WP, но если вы понимаете, о чём речь, можете проделать это на любом другом движке). Пишем в нужном месте:
<div class="widget" id="poplavok"> .. ваш контент .. </div>
"ваш контент"
— это то, что вы хотите видеть в поплавке, т.е. произвольный html, javascript и т.п. Например, можно там разместить код Гугл Адсенс, социального опроса, виджет группы Вконтакте и т.д.
Здесь class="widget" я использовал для того, чтобы плавающий блок имел тот же стиль, что и остальные блоки сайдбара, ведь обычно эти блоки имеют класс widget. А вся соль именно в id="poplavok" — уникальный идентификатор «поплавка» (плавающей панели), благодаря которому мы сможем применить именно к этому блоку особые свойства. Сделаем это так. В футер (footer.php) вставляем код:
<script> if (typeof(jQuery) == 'function') { $j = jQuery.noConflict(); var $float_block = $j('#poplavok'); var $float_bottom = $j('#footer'); var sdb_float_fixtop = 5; var float_bottom_limit = $float_bottom.offset().top-20; setTimeout(function(){ float_bottom_limit = $float_bottom.offset().top-20; }, 2000); // Пересчитаем спустя время var float_top_init = $float_block.offset().top; var sdb_float_position = $float_block.position(); var float_block_height = $float_block.height()+sdb_float_fixtop; var sdb_move_last = false; var float_lift = 0; // поднимает поплавок, когда он упирается во float_bottom var float_lift_complete = false; $j(window).bind('scroll resize', function () { // Если свободное место в sdb меньше 100, нет смысла плавать if (float_bottom_limit - float_top_init - float_block_height < 100) return; var sdb_move = ($j(window).scrollTop() > float_top_init - sdb_float_fixtop); if (sdb_move) { float_lift = float_bottom_limit - $j(window).scrollTop() - (float_block_height-sdb_float_fixtop); if (float_lift < 0) { $float_block.css('top', float_lift); float_lift_complete = true; } // когда поднимать не надо, устанавливается начальное значение верхнего отступа else if (float_lift_complete) { $float_block.css('top', sdb_float_fixtop); float_lift_complete = false; } } if (sdb_move_last != sdb_move) { sdb_move_last = sdb_move; if (sdb_move) { $float_block.css({'position':'fixed', 'top':sdb_float_fixtop}); } else { $float_block.css('position', 'static'); } } }); $j(window).scroll(); // Запустим разок } </script>
Что здесь важно:
- В строке 5 скрипт ищет элемент страницы с id="footer". Это для того, чтобы поплавок не залазил на футер (там, где обычно всякие копирайты и т.п.), а толкался им вверх. При отсутствии элемента с id="footer" поведение скрипта не предсказуемо. Идентификатор «footer» для подвала является стандартом в темах WP.
- В строке 6 мы указываем, на каком расстоянии от верхней границы окна плавать поплавку. У меня это расстояние 5 пикселей.
- Да вот ещё, в стилях (style.css) обязательно задайте для #poplavok фиксированную ширину (например, width: 300px). Ведь когда позиционирование элемента меняется со «static» на «fixed», его размеры перестаёт ограничивать родительский блок, и тогда поплавок может занять всю ширину страницы.
Пользуйтесь!
5 ответов к “Разработка сайта: создание плавающей панели”
Хороший ты поплавок придумал, Кешшу))) Мне нравится!
Спасибо. Наверное, я сам этой статьёй буду пользоваться чаще, чем кто-либо из читателей.
Да, технари рулят. Всё бы им модернизировать, улучшать, настраивать...
пора и мне такое прикрутить.
Молодчина — дал идею. Буду обновлять систему -поработаю над этим вопросом!
Здравствуйте! Сделала фиксированный виджет через JavaScript по первому способу. Возникли следующие проблемы. Когда появляется примерно половина виджета, он вдруг подскакивает вверх, перекрывая предыдущий, ну а после этого уже висит на месте, как положено. Потом еще заметила, что перестали переключаться вкладки комментариев.
Может подскажете, в чем проблема? А каким способом у Вас зафиксирован виджет?
Здравствуйте, Татьяна. Вижу, сейчас у вас виджет фиксируется как надо. Вкладки комментариев не нашёл у вас. Если не трудно, сообщите, в чём была проблема и как решили