• Страница 1 из 1
  • 1
Модератор форума: JonMagon  
Скрыть и Открыть блок с запоминанием
fomir
Сообщений: 40
Репутация: 20

Сообщение # 1 | 14:32:43
Есть у меня замечательный и легкий способ Скрыть или Открыть любой нужный блок...

Стили:

Код
<style type="text/css">
  .hide { visibility:hidden }
  .show { visibility:visible }
</style>


Скрипт:

Код
<script type="text/javascript">
  function show_Object1() { document.getElementById('div1').className='show'; }
  function hide_Object1() { document.getElementById('div1').className='hide'; }
</script>


Кнопки Скрыть и Открыть:

Код
<a href="javascript://" onclick="show_Object1()">Открыть</a>
<a href="javascript://" onclick="hide_Object1()">Закрыть</a>


Блок:

Код
<div id="div1" class="hide"></div>


Но Увы - я не умею работать с куки... Помогите пожалуйста реализовать запоминание действия!
На моём сайте очень нужно, чтобы блок оставался открытым, если был открыт, и оставался закрытым, если был закрыт.

Заранее благодарю!
bandjuk
Сообщений: 6816
Репутация: 2398
Уровень замечаний:

Сообщение # 2 | 09:38:08
Head-Mad
Сообщений: 378
Репутация: 129

Сообщение # 3 | 13:51:01
fomir, привет) быстренько накидал скриптик, может в будущем и пригодится. Идея та же самая что и у тебя, только немного усовершенствовал. Поехали:

Суть в том, чтоб к кнопке добавить один из атрибутов data-hide, data-show или data-toggle, значением которых будет класс или идентификатор (.class или #id) элемента на странице который нужно скрыть(data-hide), показать(data-show) или изменить его свойство в зависимости от текущего(data-toggle).

При этом можно указывать несколько значений через запятую, например data-hide=".class1, .class2, #idBlock" и все объекты имеющие class="class1", class="class2", id="idBlock" - будут скрыты.

Помимо классов и идентификаторов можно указывать селекторы тегов(например data-hide="div" скроет все теги <div></div>), мультиклассы, универсальные, контекстные соседние, дочерние селекторы и селекторы атрибутов. В общем всё как в CSS.

Ну и собственно сам скрипт. Написан с помощью jQuery:
Код
<script>
$('[data-hide]').click(function(){
var elem = $(this).attr('data-hide');
$(elem).hide();
return false
});

$('[data-show]').click(function(){
var elem = $(this).attr('data-show');
$(elem).show();
return false
});

$('[data-toggle]').click(function(){
var elem = $(this).attr('data-toggle');
if ($(elem).css('display') == 'none')
{$(elem).show()}
else
{$(elem).hide()}
return false
});
</script>


P.S: Оговорюсь, мои познания в JS весьма посредственны, но я над собой работаю. Позже возьмусь за эту идею и разовью ее чуть больше, в том числе и с запоминанием текущего положения свойств элементов.

Можешь забрать этот код и вставить его себе, сам знаешь куда.
Сообщение отредактировал Head-Mad - Четверг, 25 Июл 2013, 15:25:03
fomir
Сообщений: 40
Репутация: 20

Сообщение # 4 | 18:36:57
Цитата (Head-Mad)
Идея та же самая что и у тебя, только немного усовершенствовал.
Я совсем мало что понимаю в JS, можно сказать, что ничего вообще) Так что - я не оч понял, лишь отдаленно, но я понимаю, что одним этим скриптом можно скрывать и показывать кучу разных Слоев... Одно лишь кака - CSS перекрывает скрипт, в случае, если внутри одного дива скрываются и показывается множество других дивов... получится так, что какой-то один див будет скрываться и закрываться, а остальные нет) это из-за z-index происходит...

Иными словами:
Если у div1 - z-index: 1, а у div2 - z-index: 2, то работать будет только div2, т.к. даже если он скрыт - слой div2 - z-index: 2 остается на своём уровне и перекрывает div1, делая его недоступным к манипуляциям пользователя, разве что... если кнопки управления расположить где-то в совсем другом месте)
Head-Mad
Сообщений: 378
Репутация: 129

Сообщение # 5 | 22:27:35
Цитата (fomir)
один див будет скрываться и закрываться, а остальные нет

Будет скрываться указанный элемент, и все вложенные в него, независимо от z-index и других параметров

Можешь забрать этот код и вставить его себе, сам знаешь куда.
fomir
Сообщений: 40
Репутация: 20

Сообщение # 6 | 13:21:17
Цитата (Head-Mad)
Будет скрываться указанный элемент, и все вложенные в него, независимо от z-index и других параметров
Тогда всё шикарно)

Если я всё правильно понял, то установка скрипта:

Перед </body>

Код
<script>   
   $('[data-hide]').click(function(){   
   var elem = $(this).attr('data-hide');   
   $(elem).hide();   
   return false   
   };);   

   $('[data-show]').click(function(){   
   var elem = $(this).attr('data-show');   
   $(elem).show();   
   return false   
   };);   

   $('[data-toggle]').click(function(){   
   var elem = $(this).attr('data-toggle');   
   if ($(elem).css('display') == 'none')   
   {$(elem).show()}   
   else   
   {$(elem).hide()}   
   return false   
   };);   
   </script>


Кнопка открыть

Код
<a href="#" data-show="div1">Открыть</a>


Кнопка закрыть

Код
<a href="#" data-hide="div1">Закрыть</a>


Блок для манипуляций

Код
<div id="div1"></div>

или

<div class="div1"></div>

Остается придумать как запоминать выбор)
Сообщение отредактировал fomir - Пятница, 26 Июл 2013, 13:35:05
Head-Mad
Сообщений: 378
Репутация: 129

Сообщение # 7 | 17:33:15
fomir, не совсем так, в data-show, data-hide и data-toggle, значения нужно указывать вместе с селекторами.
В твоем варианте так:
Код
<a href="#" data-show="#div1">Открыть</a>
<a href="#" data-hide=".div1">Скрыть</a>

Кстати, совсем не обязательно для этих целей использовать тег <a></a>, атрибуты можно добавить и к любому другому элементу. Например

Код
<span data-hide="#div1, .div1">Скрываем оба блока</span>

Скроет оба блока, значения необходимо писать через запятую. Пробелы ставить не обязательно.

Можешь забрать этот код и вставить его себе, сам знаешь куда.
Сообщение отредактировал Head-Mad - Пятница, 26 Июл 2013, 17:40:45
SergeyZhuk
Сообщений: 87
Репутация: 17

Сообщение # 8 | 21:29:32
Люди добрые, подскажите, у меня имеется схожий скрипт


Код
<div class="right">
<a id="hide-but" style="position:absolute;display:block;" class="hide-block" href="javascript://" onclick="$('#r-colonka, #hide-but').fadeOut('slow'); $('#show-but').fadeIn('slow');"></a>
<a id="show-but" class="show-block" style="display:none; position:absolute;" href="javascript://" onclick="$('#r-colonka, #hide-but').fadeIn('slow'); $('#show-but').fadeOut('slow');"></a>
</div>


и есть вопрос. При открытии страницы блок по умолчанию открыт, а по клику кнопки сворачивается. Как сделать чтоб блок был закрыт, а по клику раскрывался?
Сообщение отредактировал SergeyZhuk - Вторник, 30 Июл 2013, 23:17:13
  • Страница 1 из 1
  • 1
Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!