Иногда, так или иначе, возникает необходимость скрыть часть информации со страницы. По разным причинам. Как по визуально-оформительским, так и из-за не особой важности или чисто технической стороне скрываемой информации. Сделать это можно многими способами. Давайте рассмотрим некоторые из них и научимся, если для вас это до сих пор «неизвестная» область, делать скрытые области/блоки, раскрывающиеся при клике, и, заодно, посмотрим, как можно их оформить для придания более интуитивно-понятного вида. Вот так «завернул». ヅ
Итак, задача: создать скрытый блок, который бы, при клике на управляющем элементе, плавно открывался, а при повторном - закрывался, сворачивался.
Задача ясна, я думаю, посмотрим на реализацию. Должно получится что-то вроде этого:
Использовать, как и написано в заголовке, будем известную во многих кругах, JavaScript библиотеку jQuery.
Информация:
Если у вас сайт на хостинге юКоз, и вы не совершали никаких действий по отключению скрипта - jQuery у вас есть, так как подключена «по умолчанию». Это, тот самый, скрипт «u.js» - который включает в себя эту библиотеку.
Если вы подобные (скрытые) блоки, используете не часто или очень редко, проще всего воспользоваться вот таким кодом, хотя это и не очень «правильно».
Набросаю неболшой код, для примера. Классы и прочее - произвольные.
Код HTML.
Code (HTML)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>hide_block_v0</title> <link rel="stylesheet" type="text/css" href="http://likbezz.ucoz.ru/_theme/_st/_ext/example_mini.css" media="screen" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script> <style type="text/css"> /* StartStyle */ .hideWrap{} /* Общий блок */ .hideBtn{} /* Класс для ссылки/кнопки и т.п. */ .hideCont{} /* Класс блока скрытого контента */ /* EndStyle */ </style> </head>
<body> <div class="hideWrap"> <a class="hideBtn" href="javascript://" onclick="$('#hideCont1').slideToggle('normal');return false;">Показать</a> <div style="display:none;" id="hideCont1" class="hideCont">Здесь располагается содержимое class "hideCont"</div> </div> </body> </html>
Где:
<script src="http://ajax.googleapis.com/.... - подключаем библиотеку jQuery - только для примера!!!.
<link href="http://likbezz.ucoz.ru/_theme/_st/_ext/example_mini.css".... - основные стили - только для примера!!!
onclick="$('#hideCont1') - действие при клике. Применяем к блоку с ID=hideCont1.
.slideToggle('normal'); - Функция скрывает видимые элементы и показывает скрытые (в данном случае - показывает - «div style="display:none;" id="hideCont1"») используя эффект изменения высоты. Скорость (в скобочках - speed) может быть «slow», «normal», или «fast». Либо задаваться числом в мс.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus. Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing. Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio. Donec et ipsum et sapien vehicula nonummy. Suspendisse potenti. Fusce varius urna id quam. Sed neque mi, varius eget, tincidunt nec, suscipit id, libero. In eget purus. Vestibulum ut nisl. Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque eget, cursus et, fermentum ut, sapien. Fusce metus mi, eleifend sollicitudin, molestie id, varius et, nibh. Donec nec libero.
Наведём немного лоску. И добавим интуитивности открывающей скрытый блок ссылке. ヅ Используем CSS... Как и обычно... ヅ
Стили CSS
Code (CSS)
<style type="text/css"> /* StartStyle */ .hideWrap{ text-align:left; /* Устанавливаем выравнивание по левому краю */ clear:both; } .hideBtn{ display:block; /* Дисплей блок - для ссылки - необходимо, для установки фона */ background:transparent url("/_example/_img/_lib1/_plus.gif") no-repeat left center; /* Картинка «плюс» */ font:bold 11px/15px Verdana,sans-serif; padding:1px 14px 2px; /* Отступы - для картинки ... и вообще ... */ cursor:pointer; outline:none; /* Скрываем рамочку, при нажатии */ } .hideBtn.show{ background-image: url(/_example/_img/_lib1/_minus.gif); /* картинка «минус» - для открытого блока */ } .hideCont{ display:none; /* Скрываем контент */ } /* EndStyle */ </style>
Сам код
Code (HTML)
<div class="hideWrap"> <a class="hideBtn" href="javascript://" onclick="$('#hideCont1').slideToggle('normal');$(this).toggleClass('show');return false;">Показать</a> <div id="hideCont1" class="hideCont">Здесь располагается содержимое class "hideCont"</div> </div>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus. Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing. Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio. Donec et ipsum et sapien vehicula nonummy. Suspendisse potenti. Fusce varius urna id quam. Sed neque mi, varius eget, tincidunt nec, suscipit id, libero. In eget purus. Vestibulum ut nisl. Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque eget, cursus et, fermentum ut, sapien. Fusce metus mi, eleifend sollicitudin, molestie id, varius et, nibh. Donec nec libero.
Но, еслы вы используете подобную функцию достаточно часто, да и просто - для чистоты кода, проще написать функцию, которая будет выполнять открытие/сокрытие блока без лишнего вмешательства в исходный код страницы.
Функция. Назвал просто ... «function hideShow»
Code (JavaScript)
<script type="text/javascript"> function hideShow(el){ $(el).toggleClass('show').next('div.hideCont').slideToggle('normal'); return false; }; </script>
Вот такая чистенькая и незамысловатая функция получилсь. Теперь, чтобы её вызвать, достаточно написать вот так:
Code (HTML)
<div class="hideWrap"> <a class="hideBtn" href="javascript://" onclick="hideShow(this);return false;">Показать</a> <div class="hideCont">Здесь располагается содержимое class "hideCont"</div> </div>
Пояснения, думаю, излишни. Всё и так понятно. Единственное, не забывайте, что .next(); - выбирает только непосредственно следующй далее, сразу же за элементом, элемен. Вот по такому принципу «$("#el + div")». Если предполагается наличие смежных элементов - используйте «siblings». Работает по вот такому принципу $("#el ~ div") - выбирает все элементы siblings(называемые "сестринскими", "братскими").
Собираем всё вместе ... и пример(используем вместо .next(); .siblings();):
Code (JavaScript)
function hideShow(el){ $(el).toggleClass('show').siblings('div.hideCont').slideToggle('normal');return false; };
Показать | Смежные элементы: | Ссылки
Основное содержимое скрытого блока
(Здесь располагается содержимое class "hideCont")
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus. Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing. Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio. Donec et ipsum et sapien vehicula nonummy. Suspendisse potenti. Fusce varius urna id quam. Sed neque mi, varius eget, tincidunt nec, suscipit id, libero. In eget purus. Vestibulum ut nisl. Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque eget, cursus et, fermentum ut, sapien. Fusce metus mi, eleifend sollicitudin, molestie id, varius et, nibh. Donec nec libero.
Или ещё лучше - обрабатывать все ссылки, в блоке «hideWrap»(после загрузки документа ... ヅ ) и назначать им действие при клике. Примерно вот так:
<div class="hideWrap"> <a class="hideBtn" href="javascript://" title="Показать\Скрыть блок">Показать</a> <div class="hideCont">Здесь располагается содержимое class "hideCont"</div> </div>
А саму функцию поместить в отдельный файл,и подключать к тем страницам, в которых эта функция используется. Подключать ниже $BODY$ - после контента, в самом низу... Как и рекомендуется со всеми скриптами ...
Как привязать к данному скрипту куки, чтобы у пользователя запоминалась какой блок скрыт (на его усмотрение), а какой нет... и прочие вариации на тему, описаны на форуме - Плавное сворачивание / разворачивание блока + куки(Инструкция и подробное описание привязки куки к объекту).