Итак, для этого проще всего (imo) создать контейнер для вашей кнопки + блока (который вы хотите скрыть). Ваша кнопка останется на месте, всегда. Когда страница загружается, мы прикрепляем к вашей кнопке событие, которое будет показывать и скрывать ваш ящик в зависимости от текущего состояния блока (если он скрыт, показать его и, если он видим, скрыть).
Достаточно просто.
Теперь вы также хотите сохранить это видимое / скрытое состояние между загрузками страниц / посещениями страниц. Для этого вам понадобится файл cookie в браузере пользователя (примечание: если ваш пользователь вошел в систему или что-то в этом роде, вы можете сделать это другим способом - но файл cookie - это самый легкий способ сделать это и не Для сохранения данных в вашей базе данных требуется двусторонняя передача на сервер).
Чтобы сделать это, я предлагаю пойти и получить плагин jQuery Cookie , который очень прост в использовании (как вы увидите ниже) и избавляет от головной боли при работе с cookie. Каждый раз, когда ваш пользователь нажимает на вашу кнопку и вы меняете состояние окна, вы собираетесь записать cookie в браузер пользователя и сохранить текущее состояние окна. Таким образом, когда пользователь перезагружает страницу, вы узнаете, каково текущее состояние (из-за файла cookie). В приведенном ниже примере я установил срок действия файла cookie через год, но вы можете изменить его, если хотите.
<div id="ShowHideContainer">
<p><a id="ShowHideButton">Click Here To Hide!</a></p>
<div id="ShowHideBox">text that gets shown and hidden, woo</div>
</div>
<script>
$(document).ready(function()
{
var $ShowHideBox = $('#ShowHideBox').hide(),
$ShowHideButton = $('#ShowHideButton');
/* Initialize the box based on the state of the cookie in the user's browser*/
initBox();
$('#ShowHideButton').click(function() {
if (boxVisible())
{
//the box is visible. lets hide it.
hideBox();
}
else
{
//the box is invisible. show it.
showBox();
}
});
function initBox()
{
//if the cookie says this is visible, and it's not...show it
if ( $.cookie('BoxVisible') && ! boxVisible() )
{
showBox();
}
//if the cookie says this is not visible, and it is...hide it
else if ( ! $.cookie('BoxVisible') && boxVisible() )
{
hideBox();
}
}
//check to see if the box is visible or not, currently
function boxVisible()
{
return $ShowHideBox.hasClass('hidden')? false : true;
}
//show the box, change the button text, and set the cookie
function showBox()
{
$ShowHideBox.slideUp(250).removeClass('hidden');
$ShowHideButton.html("Click Here to Hide!");
$.cookie('BoxVisible', 1, {expires: 365});
}
//hide the box, change the button text, and set the cookie
function hideBox()
{
$ShowHideBox.slideDown(250).addClass('hidden');
$ShowHideButton.html("Click Here to Show!");
$.cookie('BoxVisible', 0, {expires: 365});
}
});
</script>