Сейчас: 02:02:21   24-го апреля 2024 г.
UsefulScript.ruСкриптыРазныеСпойлер с плавным открытием
466
1534

Собственный спойлер с плавным открытием и скрытием содержимого

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


Основным отличием предлагаемого в данной теме скрипта от рассмотренного ранее является плавное появление и плавное скрытие содержимого под спойлером. Для получения такого эффекта плавного появления и плавного скрытия нам потребуется использовать библиотеку jQuery, которую следует подключить следующим образом:

JavaScript код:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>

Для наглядного примера работы предлагаемого нами скрипта, обратите внимание на пару спойлеров, находящихся ниже:


Спойлер № 1 (кликните для показа/скрытия)
Текст под спойлером
плавно появляется
и плавно исчезает
при клике по спойлеру
Спойлер № 2 (кликните для показа/скрытия)
А это уже другой спойлер!
И он тоже работает!

Для получения точно таких же спойлеров, как в примере, показанном выше, добавьте на свой сайт следующий JavaScript код, отвечающий за плавное открытие и скрытие спойлеров:

JavaScript код:
<script type="text/javascript">
$(
document).ready(function(){
 $(
'.spoiler_links').click(function(){
  $(
this).parent().children('div.spoiler_body').toggle('normal');
  return 
false;
 });
});
</script>

Далее, в том месте Вашей странички, где Вы планируете использовать спойлер, необходимо добавить следующий код:

HTML код:
<div>
 <
a href="" class="spoiler_links">Спойлер № 1 (кликните для показа/скрытия)</a>
 <
div class="spoiler_body">
  
Текст под спойлером<br>
  
плавно появляется<br>
  
и плавно исчезает<br>
  
при клике по спойлеру
 
</div>
</
div>

<
div>
 <
a href="" class="spoiler_links">Спойлер № 2 (кликните для показа/скрытия)</a>
 <
div class="spoiler_body">
  
А это уже другой спойлер!<br>
  
И он тоже работает!
 </
div>
</
div>

Обращаем Ваше внимание на то, что каждый спойлер должен быть заключен между тегами <div> </div>. Это необходимо для того, чтобы каждый спойлер открывался и закрывался отдельно, а не все сразу.


Для того чтобы при загрузке странички, все спойлеры изначально были закрыты и курсор мышки изменялся при наведении на спойлеры, необходимо добавить стили в шапку сайта между тегами <head> и </head> следующим образом:

HTML код:
<style type="text/css">
 .
spoiler_body displaynone; }
 .
spoiler_links cursorpointer; }
</
style>

При необходимости можно добавить кнопки "Закрыть все" и "Открыть все" спойлеры. Для этого добавьте вот такой код:

HTML код:
<input type="button" value="Закрыть все"
    
onclick=$("div[class^='spoiler_body']").hide('normal')>
<
input type="button" value="Открыть все"
    
onclick=$("div[class^='spoiler_body']").show('normal')>

Вот и все. В результате у Вас должен получиться точно такие же спойлеры с плавным показом и скрытием, как и в примере выше.


Со временем данный скрипт спойлера был немного доработан и выложен в виде отдельной темы - Обновленный скрипт спойлера с плавным открытием и скрытием содержимого.

IP видеокамеры наблюдения

Дата создания: 17:22:25 08.05.2012 г.
Дата обновления: 19:49:18 28.11.2013 г.
Посещений: 95738 раз(а).

Комментарии посетителей (141 шт.):
Юра
30
# 195
(21:05:24  20.06.2012 г.)

А можно сделать так, чтобы при открытии второго спойлера первый закрывался автоматически?
Ответить

Administrator
29
# 312
(20:06:43  18.09.2012 г.)

Извините за поздний ответ (проглядел сообщение).
После $('.spoiler_links').click(function(){ добавьте строчку:
$("div[class^='spoiler_body']").hide('normal');
Ответить

Михаил
-1
# 313
(13:29:38  19.09.2012 г.)

Спасибо огромное за код, всё очень красиво, но вот вопрос! Как сделать, чтобы один спойлер закрывался при повторном клике на него, а не только когда кликаешь на другой спойлер?
Ответить

Илья
12
# 643
(01:16:23  24.02.2013 г.)

Вопрос Михаила актуален:
Как сделать, чтобы один спойлер закрывался при повторном клике на него, а не только когда кликаешь на другой спойлер?
Ответить

Administrator
5
# 645
(17:49:34  24.02.2013 г.)

Замените из JavaScript кода статьи строчку:
$(this).parent().children('div.spoiler_body').toggle('normal');
на такие:
if ($(this).parent().children('div.spoiler_body').css("display")=="none") {
$("div[class^='spoiler_body']").hide('normal');
$(this).parent().children('div.spoiler_body').toggle('normal');
}
else $("div[class^='spoiler_body']").hide('normal');
Ответить

Виктор
10
# 227
(21:45:05  21.07.2012 г.)

Здравствуйте. Как поправить код, чтоб на хроме видео не запускалось в закрытых спойлерах?
Ответить

Виталий
1
# 309
(18:16:04  18.09.2012 г.)

Очень интересная ситуация. Примеры на вашем сайте при клике открываются и сразу же закрываются. Этот же код у меня работает по-другому. Вот теперь думаю, один и тот же код по-разному себя проявляет, стоит ли его воплощать в жизнь.
Ответить

Administrator
10
# 311
(19:57:05  18.09.2012 г.)

Виталий, спасибо за найденную недоработку. Спойлер сразу закрывался потому, что приведенный код использовался на данный страничке дважды (в приведенном выше примере и в комментариях). Таким образом, клик обрабатывался сразу двумя скриптами - один открывал, а другой закрывал. Уже исправил путем переименования класса для спойлера.
А код конечно стоящий, так что не бойтесь его использовать.
Ответить

Дарий
0
# 368
(12:49:02  01.11.2012 г.)

А можно подробнее что нужно переименовать?
Ответить

Administrator
4
# 371
(13:38:03  01.11.2012 г.)

Дарий, Вам ничего переименовывать не нужно. Код в теме рабочий. Проблема была в конфликте данного кода с нашим внутренним кодом сайта.
Ответить

Илья
-1
# 323
(14:57:18  27.09.2012 г.)

Однако, при отработке в FF 14.0.1 получаем: "Неизвестный тип адреса. Firefox не может определить, как открыть данный адрес, так как протокол (javscript) не связан ни с одним приложением.", если подготавливаем страничку в UTF-8.
Если страничку подготавливаем, допустим, в cp 1251, то всё работает нормально.
Ответить

Дмитрий
1
# 345
(14:37:01  13.10.2012 г.)

А как реализовать кнопки "Раскрыть все" и "Скрыть все" спойлеры?
Ответить

Administrator
0
# 346
(17:29:01  13.10.2012 г.)

Дмитрий, статью обновил и в самом ее конце написал, как реализовать данные кнопки.
Ответить

Дарий
2
# 373
(10:56:03  02.11.2012 г.)

Дело в том, что когда я помещаю Ваш код на свой форум в виде BBCODE и если использовать в одном сообщение больше одного раза, они начинают автоматически закрываться. Можно ли как-то написать условие если один раз был использован код, то второй раз не использовать?
Ответить

Administrator
1
# 374
(11:19:45  02.11.2012 г.)

Дарий, в Вашем случае нужно просто правильно разместить код. Попробуйте JavaScript код вынести в footer (низ форума), таким образом, он будет загружаться только один раз.
Подробнее попытался изложить на форуме - http://usefulscript.ru/forum/showthread.php?tid=180
Ответить

Сергей
3
# 391
(19:57:03  12.11.2012 г.)

Спасибо за универсальный код, который легко применяется под любую верстку. Я, например, использовал class="spoiler_links" для тега <label>, а class="spoiler_body" для тега <ul>.
Можно ли модифицировать данный код, для того чтобы список открывался автоматически, если в списке <ul class="spoiler_body"> есть теги <li><input checked="checked">. Т.е. пользователь проставил на одной странице свои "checked" нажал на кнопку поиск и перешел на др. страницу, мы с помощью php эти checked отловили то ли с помощью POST то ли сессий, а с помощью javascript развернули бы списки с помеченными checked="checked"?
Ответить

Administrator
0
# 421
(20:58:56  25.11.2012 г.)

А зачем использовать JavaScript? Не проще ли на PHP, как Вы говорите, отловить списки с помеченными checked и в зависимости от их значения добавлять или нет свойство display: none.
Ответить

Сергей
0
# 559
(15:42:10  21.01.2013 г.)

Можно и при помощи jquery.
Нужно добавить события:
$('input:checked');
$('input:not(:checked)'));
Ответить

Никита
2
# 400
(18:07:31  19.11.2012 г.)

Можно сделать, что при открытом спойлере был текст "закрыть" а при закрытом "открыть"?
Ответить

Administrator
1
# 401
(19:21:34  19.11.2012 г.)

Никита, легко. Добавьте перед строчкой return false; следующие строки:
if ($(this).text()=='Закрыть') $(this).text('Открыть');
else $(this).text('Закрыть');
Ответить

Евгений
-2
# 677
(14:23:25  12.03.2013 г.)

А тоже самое, но только с картинками?
Ответить

Administrator
1
# 680
(20:26:34  12.03.2013 г.)

Евгений, по аналогии, как и с текстом:
if ($(this).attr('src')=='img_1.png') $(this).attr('src', 'img_2.png');
else $(this).attr('src', 'img_1.png');
Ответить

Оля
-1
# 2262
(03:24:36  12.02.2015 г.)

У меня данный скрипт не заработал. Подгрузилась только первая картинка, а вторая не отображается при закрытии.
Вы не подскажете, как можно решить данную проблему? Заранее благодарна.
Ответить

Administrator
-2
# 2263
(22:10:01  12.02.2015 г.)

Проверьте правильность имен картинок и путь к ним т.к. мы привели пример для относительных URL адресов.
Ответить

Sergey1917
-1
# 771
(14:46:55  07.04.2013 г.)

В Опере спойлеры не открываются. В IE7 пытаются открыться, но лучше бы они не открылись, съезжает вся страница и получается кошмар.
Что можно исправить?
Ответить

Administrator
0
# 773
(15:10:36  07.04.2013 г.)

Скопируйте код заново, только что проверял и в IE8 и в Опере - все работает в штатном режиме.
Ответить

Владимир
0
# 594
(15:55:00  09.02.2013 г.)

А поисковики на данный подход скрытия текста реагируют нормально?
А как прикрутить css стили к этим двум кнопкам?
Ответить

Administrator
1
# 596
(13:14:09  10.02.2013 г.)

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

reddy
0
# 731
(18:55:37  01.04.2013 г.)

Спасибо!
У меня вопрос: как сделать, чтобы блок закрывался, при клике на любую свободную область, а не только на ссылку? Так будет намного юзабельней.
Ответить

Administrator
-1
# 732
(21:52:06  01.04.2013 г.)

Это можно сделать по аналогии с кнопкой "Закрыть все". Для этого добавьте следующий скрипт:
$(document).click(function(){
$("div[class^='spoiler_body']").hide('normal');
});
Ответить

Sergey1917
0
# 777
(22:10:16  07.04.2013 г.)

Куда добавить? В какое место?
Ответить

Administrator
1
# 791
(20:40:56  12.04.2013 г.)

Добавить выше приведенный код следует сразу после функции
$(document).ready(function(){
. . .
});
перед тегом </script>.
Ответить

reddy
0
# 802
(19:29:00  17.04.2013 г.)

А как реализовать вместо клика разворачивание блока при наведении курсора, и сворачивание при убранном с блока курсоре?
Ответить

Administrator
0
# 808
(23:19:53  18.04.2013 г.)

Кстати отличная идея для реализации спойлера.
$(document).ready(function(){
$('.spoiler_links').bind("mouseenter mouseleave", (function(){
$(this).parent().children('div.spoiler_body').toggle('normal');
return false;
}));
});
Ответить

reddy
-1
# 905
(00:37:58  31.05.2013 г.)

Замечательно, но как быть в случае, когда блок находится ниже кнопки пикселей на 10? Пользователь не успевает подвести курсор к блоку, т.к. он сразу сворачивается. Может задержку установить для сворачивания? Или область между кнопкой и блоком сделать активной?
Ответить

Administrator
0
# 906
(15:32:13  31.05.2013 г.)

Ответил на форуме - http://usefulscript.ru/forum/showthread.php?tid=212
Ответить

Вадим
0
# 1585
(16:11:05  12.04.2014 г.)

Здравствуйте!
Добавил "закрыть/открыть" как вы писали в сообщении #401, а также закрытие блока при клике в любую часть экрана по сообщению #732. Но возникла проблема: когда один блок развернут (отображается ссылка "закрыть"), если свернуть этот блок кликом в любую часть экрана, то надпись "закрыть" так и останется, хотя должна отображаться надпись "открыть". Можно ли с этим что-то сделать?
Ответить

Administrator
1
# 1586
(17:28:15  12.04.2014 г.)

Добавьте после строчки $("div[class^='spoiler_body']").hide('normal');
$(".spoiler_links").text('Открыть');
Ответить

Sergey1917
2
# 778
(14:45:02  08.04.2013 г.)

Есть подобный спойлер на jquery, с псевдографикой блока - pcvector.net/scripts/accordion/284-spoyler-spoiler.html
Уже подогнал стиль под себя. Осталось только добавить две функции, но сам не смогу. Помогите, пожалуйста.
1. Как сделать открывание не только кликом по кнопке, а по всему блоку?
2. Как сделать, чтобы блок закрывался, при клике на любую свободную область, а не только на ссылку?
Вы здесь выкладывали ответы на подобные вопросы, но к этому коду не подошло (у меня).
Ответить

Administrator
-2
# 794
(00:50:16  13.04.2013 г.)

В связи с длинным кодом, ответил Вам на форуме - http://usefulscript.ru/forum/showthread.php?tid=199
Ответить

Иван
0
# 862
(20:12:02  18.05.2013 г.)

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

Administrator
0
# 863
(21:08:16  18.05.2013 г.)

На страничке должен быть только один JavaScript код. Подробнее можно посмотреть на нашем форуме (сообщение №75) - http://usefulscript.ru/forum/showthread.php?tid=199
Ответить

Дмитрий
-1
# 1097
(12:29:32  06.09.2013 г.)

Есть несколько таких спойлеров, которые открываются и закрываются попеременно (как в комментарии # 645). Справа будет изображение. Как сделать, чтобы оно исчезало при открытии одного из спойлеров (чтоб было больше места для появляющегося текста), и появлялось при закрытии всех? Заранее огромное спасибо!
Ответить

Administrator
0
# 1099
(20:44:14  06.09.2013 г.)

Добавьте изображению id="spoiler_img". Скрипт измените на такой:
$(document).ready(function(){
$('.spoiler_links').click(function(){
if ($(this).parent().children('div.spoiler_body').css("display")=="none") {
$("div[class^='spoiler_body'], #spoiler_img").hide('normal');
$(this).parent().children('div.spoiler_body').toggle('normal');
}
else {
$("div[class^='spoiler_body']").hide('normal');
$("#spoiler_img").toggle('normal');
}
return false;
});
});
Ответить

Надежда
-1
# 1245
(14:19:40  30.10.2013 г.)

Уточните, а что нужно изменить в скрипте, что бы по умолчанию первая запись была открыта при заходе или обновлении страницы?
А далее скрипт работал так же.
Ответить

Administrator
1
# 1246
(20:07:22  30.10.2013 г.)

Добавьте еще один стиль: .spoiler_open { display: block; }
Теперь блоку, который должен быть изначально открыт, добавьте этот самый второй стиль:
<div class="spoiler_body spoiler_open">
Ответить

Виктор
0
# 1413
(20:44:10  17.01.2014 г.)

Подскажите, пожалуйста, дело в том, что Вы дали код "Закрыть все" и "Открыть все" спойлеры.
Как сделать так, что бы были не просто надписи в маленьких белых окошках, а моя картинка?
Ответить

Administrator
0
# 1414
(21:48:17  17.01.2014 г.)

Просто замените элементы input на img, оставив событие onclick:
<img src="url_картинки" onclick=$("div[class^='spoiler_body']").hide('normal')>
<img src="url_картинки" onclick=$("div[class^='spoiler_body']").show('normal')>
Ответить

Ахат
0
# 1429
(05:51:10  23.01.2014 г.)

А скажите, пожалуйста, как сделать так, чтобы спойлер можно было открывать в двух местах? Т.е. чтобы он реагировал как на одну, так и на вторую кнопку?
Ответить

Феофан
0
# 1475
(02:29:17  12.02.2014 г.)

Валидатор ругается на:
onclick=$("div[class^='spoiler_body']").hide('normal')>
onclick=$("div[class^='spoiler_body']").show('normal')>
Ответить

Иван
3
# 1489
(21:59:26  20.02.2014 г.)

Никто не подскажет, как заставить загружаться изображение внутри такого спойлера только тогда, когда откроют спойлер (просто на экономию трафика то рассчитано, оптимизировать хотелось бы не только внешне). Спасибо!
Ответить

Administrator
0
# 4863
(14:23:22  30.09.2021 г.)

Лучше поздно, чем никогда. Для тех, кого интересует точно такой же вопрос, обратите внимание на тему Скрипт спойлера с динамической загрузкой изображений
Ответить

Иракли
0
# 1499
(20:40:50  02.03.2014 г.)

У меня проблема с этим скриптом.
Поначалу он работал идеально, а теперь он по умолчанию открытый (при нажатии он закрывается).
Самое интересное то, что мне нужно наоборот.
Пробовал добавить строчки в css .spoiler_body { display: none; }
.spoiler_links { cursor: pointer; } , но после добавления скрипт скрывает и не реагирует на клик мыши....
Ответить

Administrator
0
# 1500
(21:55:10  02.03.2014 г.)

Странная у Вас ситуация... Т.к. Вы не предоставили ни код, ни ссылку, где он установлен, то могу только посоветовать скопировать код заново.
Ответить

Иракли
0
# 1501
(09:57:41  03.03.2014 г.)

Ок, спасибо, разобрался.
Код работает отлично, и я добавил мод "$("div[class^='spoiler_body']").hide('normal');"
Однако тут столкнулся с новой задачей...
Вот скажем, заходит абонент на страничку, открывает спойлер, а над ним другой.
Первый закрывается, второй открывается (классно).
Однако, если надумал закрыть и второй спойлер, то он закрывается и опять вылетает (и так без конца).
Как можно сделать, чтобы при клике он закрывался с концом?

Вот код:
<script type="text/javascript">
$(document).ready(function(){
$('.spoiler_links').click(function(){ $("div[class^='spoiler_body']").hide('normal');

$(this).parent().children('div.spoiler_body').toggle('normal');
return false;
});
});
</script>
Ответить

Administrator
0
# 1507
(20:59:30  03.03.2014 г.)

Попробуйте произвести изменения, как сказано в сообщении # 645.
Ответить

Arteyom
2
# 1504
(13:55:01  03.03.2014 г.)

Скажите, пожалуйста, как сделать так чтобы блоки были в строчку, а при открытии одного из них текст открывался снизу на всю ширину?
Ответить

Богдан
0
# 1531
(20:49:01  18.03.2014 г.)

Задаю псевдокласс .spoiler_links:active { color: gray; }
однако это работает только в момент нажатия на ссылку и остается прежней.
Прошу просветить для тех, кто в танке...
Ответить

Богдан
0
# 1532
(22:10:13  18.03.2014 г.)

Возможно, непонятно объяснил.
Грубо говоря, нужно, чтобы при нажатии на спойлер, ссылка меняла вид, допустим окрашивалась в серый цвет.
Псевдокласс :active срабатывает только в момент нажатия, но сама ссылка остается той же: с подчеркиванием, синим цветом...
Ответить

Administrator
3
# 1533
(22:26:56  18.03.2014 г.)

Добавьте новый класс .spoiler_gray { color: gray; } и после строки
$(this).parent().children('div.spoiler_body').toggle('normal');
добавьте $(this).toggleClass('spoiler_gray');
Если необходимо, чтобы ссылка меняла цвет только один раз и не возвращалась в исходное состояние, то используйте $(this).addClass('spoiler_gray');
Ответить

Ринат
0
# 1535
(13:35:30  19.03.2014 г.)

Я рад, что вас нашел! Пользуясь случаем, хочу спросить, как этим скриптом реализовать такое: при входе на сайт спойлер скрыт, спустя скажем 10 секунд он открывается, как бы давая знать посетителю о том, что там есть какая-нибудь инфа, и если посетитель не реагирует на эту инфу около 20 секунд она снова сворачивается? Был бы очень признателен за ответ.
Ответить

Administrator
5
# 1536
(20:03:49  19.03.2014 г.)

Добавьте после строчки $(document).ready(function(){
такую: $('div.spoiler_body').delay(10000).slideDown('normal').delay(20000).slideUp('normal');
Ответить

Ринат
0
# 1537
(12:09:03  20.03.2014 г.)

Огромное спасибо! За столь быстрый ответ. Тут еще один вопрос, как можно сделать так, чтобы таймер срабатывал только один раз. Т.е. к примеру, посетитель зашел на какую-нибудь страницу, сработал таймер, открыл и закрыл спойлер, затем посетитель перешел на другую страницу, и там опять срабатывает таймер. Как сделать так, чтобы таймер срабатывал всего лишь один раз за все пребывание посетителем на сайте?
Ответить

Administrator
2
# 1538
(20:54:26  20.03.2014 г.)

Для этого можно использовать сессии.
Первой строчкой сайта должен быть код: <?php if (session_id()=='') session_start();?>
$('div.spoiler_body').delay(10000).slideDown('normal').delay(20000).slideUp('normal'); меняем на
<?php if ($_SESSION["spoiler"]=='') {
echo "$('div.spoiler_body').delay(10000).slideDown('normal').delay(20000).slideUp('normal')";
$_SESSION["spoiler"]=1;
}?>
Ответить

Ринат
0
# 1558
(11:35:21  31.03.2014 г.)

Спасибо за ваше старание, скажите, как сделать так, чтобы при открытии каждого спойлера сопровождался заданным звуком, хочу сделать пособие для обучения.
Ответить

Виталий
0
# 1612
(17:34:57  20.04.2014 г.)

Пытаясь сделать спойлеры под спойлером, все они открываются разом, а не по одному:
<div><a href="" class="spoiler_links" ID="asdadad">Спойлер 1 <br></a>
<div class="spoiler_body">
<a href="" class="spoiler_links">подспойлер 1 <br></a>
<div class="spoiler_body">подспойлер 11 <br></div>
<a href="" class="spoiler_links">подспойлер 2 <br></a>
<div class="spoiler_body">подспойлер 22 <br></div>
</div></div>
Ответить

Administrator
1
# 1613
(18:21:40  20.04.2014 г.)

<div><a href="" class="spoiler_links">Спойлер 1</a><div class="spoiler_body">
<div><a href="" class="spoiler_links">подспойлер 1</a><div class="spoiler_body">подспойлер 11</div></div>
<div><a href="" class="spoiler_links">подспойлер 2</a><div class="spoiler_body">подспойлер 22</div></div>
</div></div>
Ответить

Павел
0
# 1760
(02:06:58  23.07.2014 г.)

Как сделать, чтобы при нажатии по ссылке после открытия блока, эта ссылка становилась некликабельной. Заранее спасибо!
Ответить

Administrator
0
# 1764
(23:15:25  23.07.2014 г.)

Нужно добавить разовый обработчик событий. Или вместо строчки $('.spoiler_links').click(function(){
используйте $('.spoiler_links').one('click', function(){
Ответить

Евгений
0
# 1762
(19:16:30  23.07.2014 г.)

Здравствуйте, решил вот сделать форум на dle, как бы из новостей. Проблема в том, что у меня пять новостей на страницу, и код делает "телодвижения" пять раз. Если возможно помогите, пожалуйста. Заранее извиняюсь за столь большой код, но по-другому никак...
Ответить

Administrator
0
# 1763
(22:10:01  23.07.2014 г.)

Скорее всего, это происходит из-за того, что Вы к каждой новости скопировали наш JavaScript код, хотя достаточно всего одного раза независимо от количества спойлеров! Если не поможет, то скиньте ссылку на проблемную страничку или обратитесь с этим вопросом на наш форум.
P.S. Код удалил, т.к. вставил его на пустую страничку, и он работает как надо.
Ответить

Валерий
0
# 1798
(23:01:53  11.08.2014 г.)

Доброго времени суток! Вопрос примерно такой же, как был у Arteyom:
Как сделать два блока со спойлерами в строку, и чтобы при их открытии они открывались на всю ширину?
Т.е. грубо говоря, мне нужно шесть спойлеров небольших. Располагать в столбик не красиво, а вот по два в строку в самый раз, но реализовать никак не получается. Заранее спасибо!
Ответить

Administrator
0
# 1799
(23:47:43  11.08.2014 г.)

Думаю, такой скрипт Вам подойдет - http://usefulscript.ru/forum/showthread.php?tid=294
Ответить

Василий
0
# 1803
(15:32:27  15.08.2014 г.)

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

Administrator
0
# 1807
(22:46:40  15.08.2014 г.)

Для этого замените JavaScript код на такой:
$(document).ready(function(){
$('.spoiler_links').mouseenter(function(){ $(this).next('.spoiler_body').show('normal');});
$(document).click(function(){ $('.spoiler_body').hide('normal');});
});
Ответить

vabank
0
# 1815
(22:31:19  19.08.2014 г.)

Не получается вместо текста открыть – закрыть вставить изображения:
if ($(this).attr('src')=='img_1.png') $(this).attr('src', 'img_2.png');
else $(this).attr('src', 'img_1.png');
Уже все перепробовал. С уважением к вам и вашим ответам.
Ответить

Administrator
0
# 1816
(22:54:31  19.08.2014 г.)

У Вас код рабочий, вот только "if" потеряли (я его уже добавил в Ваш комментарий). Попробуйте указать относительный путь к изображениям (например, "image/spoiler/img_1.png").
Ответить

vabank
0
# 1819
(07:23:59  21.08.2014 г.)

А как сделать, чтобы спойлер при нажатии выезжал бы не сверху вниз, а наоборот, открывался бы вверх?
Ответить

Administrator
0
# 1820
(20:34:39  21.08.2014 г.)

Без сторонних плагинов думаю тут не обойтись, т.к. jQuery не богат настройками функций для анимации.
Ответить

opiums
0
# 1821
(06:09:00  22.08.2014 г.)

Здравствуйте, спасибо за спойлер, мне он очень понравился, но проблема в том, что на этой страничке перестаёт работать выплывающее меню, не подскажите, в чём может быть причина?
Ответить

Administrator
0
# 1822
(22:53:28  22.08.2014 г.)

Для начала удалите повторное подключение библиотеки jQuery перед добавлением скрипта, т.к. Вы уже подключили ее раннее. Т.к. Вы используете jQuery.noConflict();, то замените в скрипте знак "$" на "jQuery" по аналогии с другими имеющимися у Вас скриптами.
P.S. Ссылку на сайт удалил.
Ответить

opiums
0
# 1823
(09:39:06  23.08.2014 г.)

Благодарю, за помощь, действительно теперь работаю и меню, и спойлер. Даже в мобильной версии стало всё удобно отображаться, без ошибок.
Ответить

Кирилл
0
# 1847
(22:07:04  31.08.2014 г.)

Будьте так любезны ответить на один вопрос, а этот джава код будет пропускать индексацию?
Ответить

Administrator
1
# 1848
(22:11:08  31.08.2014 г.)

Индексируются странички с данным кодом отлично. Данный JavaScript код лишь меняет стили блоков, а сам текст в исходном коде странички не меняется и доступен всем поисковым роботам.
Ответить

Елена
0
# 1854
(16:59:50  01.09.2014 г.)

Здравствуйте, спасибо огромное за скрипт, работает отменно! Но есть одна проблема. У меня спойлер размещен в тексте, и есть необходимость сразу после него ниже разместить текст, но размещается он как продолжение этого спойлера - появляется и исчезает вместе с ним. Может надо тегом закрыть каким-то... Удалось сделать так, чтобы следующий текст не встраивался в спойлер, но перестал работать спойлер, проверила написание, изменяется строка <a href="" class="spoiler_links"> на <a class="spoiler_links">. Вставляю спойлер в статью в редакторе WP. Подскажите, пожалуйста, что нужно сделать, чтобы все работало и отображалось адекватно. Спасибо!
Ответить

Administrator
0
# 1859
(20:44:55  01.09.2014 г.)

Думаю это связано с движком редактора WordPress (режет теги). Если я не ошибаюсь, то надо включить функцию "исполнять HTML коды". А еще лучше Вам это спросить у людей, работающих с WordPress.
Ответить

Елена
1
# 1856
(20:04:44  01.09.2014 г.)

Еще раз приветствую уважаемого админа! У меня есть еще один интересный вопрос про стилизацию спойлера. Одному спойлеру я стили прописала без труда, просто используя уже назначенный в нем класс spoiler_links, проблема в том, что другому спойлеру необходимо задать другие стили, я меняю класс spoiler_links на, к примеру, price, к которому прописываю стили в style.css, но ничего не меняется и даже текст перестает разворачиваться. Подскажите, будьте так добры, как задать разным спойлерам на одной странице разные стили? Я Вам буду очень благодарна!!! :)
Ответить

Administrator
0
# 1860
(20:48:27  01.09.2014 г.)

Скоро выложу обновленный код с описанием, потерпите немного.
P.S. Дошли оба комментария, но второй публиковать не стал, т.к. он другими словами повторяет первый.
P.P.S. Держите - Обновленный скрипт спойлера.
Ответить

Ринат
17
# 1884
(23:30:52  15.09.2014 г.)

Добрый час! Можно ли сделать со спойлером такое, что бы при открытии проигрывалась аудио дорожка?
Ответить

Мурат
0
# 1908
(17:09:15  25.09.2014 г.)

Здравствуйте! У меня два сайта, на одном скрипт работает, а на другом нет. В чем может быть проблема?
Ответить

Administrator
0
# 1909
(17:17:53  25.09.2014 г.)

Это может быть из-за конфликта с другими скриптами, имеющимися на сайте.
Ответить

Богдан
0
# 1960
(15:17:11  14.10.2014 г.)

Добавьте "http:" в
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
а то я долго не мог понять, почему не работает спойлер.
Ответить

Administrator
0
# 1962
(22:08:04  14.10.2014 г.)

Давайте обратимся к первоисточнику - https://developers.google.com/speed/libraries/devguide#jquery
Там нет "http:" в адресе, следовательно, у нас все указано правильно.
Ответить

Xapek
0
# 1980
(14:01:34  21.10.2014 г.)

Добрый день! Спасибо большое за спойлер почти все работает без проблем!
Основные проблемы с данным спойлером это то, что почти во всех браузерах страница дрожит (дергается) при открытии и закрытии спойлера. В mozila все работает замечательно, а в других браузерах (chrome, safari uran и т.д.) это дерганье заметно видно.
Подключаюсь к файлу скрипта в html-файле через строку <!--#include virtual="spol.html"-->
Ответить

Administrator
1
# 1982
(22:19:12  21.10.2014 г.)

Странно, ведь мы используем простую функцию анимации на jQuery. Проверял в IE, Опере и Гугл Хроме - все нормально. Данная страничка тоже дрожит или это только у Вас на сайте? Возможно, это происходит из-за каких-нибудь элементов странички, расположенных ниже спойлера, которые при смещении "тормозят". Либо дерганье происходит из-за другого "тяжелого" скрипта, который тормозит всю страничку.
Ответить

Xapek
0
# 1984
(08:32:41  22.10.2014 г.)

Данная страница не дрожит, также данный код спойлера проверял на другом проекте там также все хорошо. Но вот на другом сайте это сильно заметно и ладно бы, если бы был один спойлер, а там их около 9 + внутренних спойлеров около 20.
В основном все страницы на сайте шаблонного вида, т.е. основное окно страницы сайта всегда одно и тоже: со всеми скриптами формами, картинками.
Т.е. вы считаете, что виновата нижняя часть моего сайта и надо работать с ней?
Так же напоминаю, что подключаюсь к файлу скрипта в html-странице через строку <!--#include virtual="spol.html"--> данная строка помещается мной над первым вызовом скрипта и больше нигде не дублируется.
Ответить

Administrator
0
# 1985
(21:12:18  22.10.2014 г.)

Тут надо попробовать сделать тестовую страничку и постепенно удалять ее содержимое, т.к. может дело в какой-нибудь большой картинке, либо другом скрипте. Пока могу только предполагать, т.к. первый раз сталкиваюсь с подобной проблемой. Способ подключения скрипта роли играть не должен, т.к. тут либо он подключился, либо нет, а обрабатывается все равно на стороне пользователя браузером.
Ответить

Xapek
0
# 2344
(20:11:55  18.03.2015 г.)

Не знаю что произошло, но страничка со спойлером перестала дрожать, единственное, что сделал - это изменил общую ширину сайта на чуть поменьше.
Ответить

Alex
0
# 1993
(01:11:49  26.10.2014 г.)

Спасибо за скрипт. Работает хорошо.
Можно ли решить следующую задачку?
На странице, скажем, 10 статей, каждая из них под спойлером и со своим уникальным id. Нужно добиться того, чтобы при переходе на этот самый id (якорь) с другой страницы (оглавления на том же сайте) спойлер, скрывающий под собой статью с этим id (и только он), открывался автоматом без клика, т.е. страничка выходила бы с 9-ю статьями под спойлерами и с одной открытой.
Ответить

Administrator
0
# 1998
(17:26:24  26.10.2014 г.)

После $(document).ready(function(){ добавьте строчку $(window.location.hash).show();
Ответить

Alex
0
# 2000
(23:44:50  26.10.2014 г.)

К сожалению, данная конструкция не работает.
Может, попробовать каким-либо образом в css добавить параметр "id" для привязки якорей к спойлерам?
Проблема решилась :)))
document.getElementById(window.location.hash.substring(1)).show();
Ответить

Кирилл
0
# 2328
(16:40:55  13.03.2015 г.)

Alex, а в какое именно место кода добавлять эту строку?
Ответить

dmitriy
0
# 2008
(09:20:29  29.10.2014 г.)

Добрый день! Как в данном случае регулировать тайминг открытия и скрытия блока? Т.е. тут где-то 0.7 с. стоит я думаю, как менять это значение?
Ответить

Administrator
0
# 2012
(22:10:27  29.10.2014 г.)

Скорость можно указать явно в миллисекундах, заменив 'normal', например, на 500.
Ответить

dmitriy
0
# 2017
(09:55:07  30.10.2014 г.)

Ещё вопрос, а разве здесь не нужно объявлять переменные? У меня к примеру отладчик ругается. И странное дело, при клике ничего не происходит, что я сломал?
Ответить

Administrator
0
# 2018
(21:36:39  30.10.2014 г.)

А зачем Вам переменные на jQuery нужны и на что ругается отладчик? Может дело в редакторе кода? Приведенный Вами код прекрасно работает в разных браузерах. Сам код я удалил из Вашего комментария, т.к. он повторяет тот, что имеется в данной теме.
Ответить

dmitriy
0
# 2019
(09:35:42  31.10.2014 г.)

Да, вроде бы заработал код, где-то ошибся, но изменение скорости не как не реагирует на вносимые изменения. Т.е. если указываю в миллисекундах, ничего не происходит, поставил slow, стало чуть медленнее появление. Ошибка говорила, что не может определить $. Вставил код с тестовой страницы в основную и там почему то всё заработало, причём там подключается гугл библиотека 1.7.0.
Ответить

Мишка=)
0
# 2065
(19:19:25  26.11.2014 г.)

Доброе времени суток вот хотел спросить, как бы решить проблему... Вот у меня находиться сверху заголовок спойлера (Спойлер №1 (кликните для показа/скрытия), а под ним таблица и текст. Я хочу сделать, чтобы содержимое спойллера открывалось снизу, ну или в любом угодном для меня месте... Как бы мне это сделать, а то стоит все ступором и все.
Ответить

Administrator
0
# 2066
(20:30:05  26.11.2014 г.)

Максим
0
# 2256
(14:32:22  09.02.2015 г.)

Добрый день!
Хотел поблагодарить Администратора за данный прекрасный код.
Возник вопрос, а можно ли сделать так, чтобы после нажатия на ссылку, текст открывался не со следующей строки, а был продолжением текущей?
Заранее Спасибо!
Ответить

Елена
0
# 2491
(08:55:46  21.05.2015 г.)

Здравствуйте!
Я хотела спросить, как бы решить следующую проблему: у меня есть списки (Заголовок1, Заголовок2 и т.д.) со скрытыми подпунктами (П1.1, П1.2 и т д П2.1, П2.2 и т.д.), работающий как приведено в статье. Мне нужно, чтоб при переходе по ссылке подпункта (например, П1.1) список (Заголовок 1.1) на открытой страницей был уже открыт.
Ответить

Василий
0
# 2512
(11:38:45  06.06.2015 г.)

Здравствуйте, а как можно сделать так, чтобы спойлер открывался и закрывался не по двум кнопкам, а по одной, т.е. при закрытых спойлерах была кнопка или ссылка открыть (это нужно сделать отдельно от заголовка спойлера), а при открытии она заменялась на закрыть.
Ответить

Administrator
0
# 2514
(19:52:11  06.06.2015 г.)

Если я Вас правильно понял, то используйте скрипт из сообщения номер 9 одной из тем нашего форума.
Ответить

Женек
0
# 2605
(10:11:56  04.08.2015 г.)

Доброго времени суток!
Уже наверно тысячу сайтов протыкал, и везде отдельные реализации на разных движках вывода спойлера. Дело в том, что сам спойлер вывести то не проблема, а вот как вывести его в bbcode?
Автор статьи, будь добр, реализуй пожалуйста спойлер в bbcode [spoiler=название]текст[/spoiler]
Ответить

Administrator
2
# 2606
(21:54:08  04.08.2015 г.)

Так уже давно сделано - Встраиваем спойлер на форум
Ответить

Юлия
0
# 2685
(21:27:48  07.09.2015 г.)

Здравствуйте.
Надеюсь, вы поможете решить такую задачу. Есть очень длинная таблица. На устройствах с размером экрана меньше 550px таблицы первоначально видно быть не должно. Должна быть кнопка, при нажатии на которую должна раскрываться таблица...
Ответить

Administrator
0
# 2686
(23:17:02  07.09.2015 г.)

Полный текст комментария и ответ на него были перенесены на форум в тему Спойлер на чистом JavaScript.
Ответить

Сергей
0
# 2861
(01:46:02  03.12.2015 г.)

Прочитал всю ветку, спасибо админу за этот скрипт! И есть вопрос, я засунул в этот скрипт форму авторизации/регистрации, после входа пользователя на сайт под этим же спойлером оказывается личный кабинет. Так вот вопрос, как сменить "Спойлер №1 (кликните для показа/скрытия)" на другой, после авторизации пользователя?
Ответить

Сергей
0
# 2874
(20:53:05  05.12.2015 г.)

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

Administrator
0
# 2875
(22:05:53  05.12.2015 г.)

Так после авторизации у Вас наверняка происходит перезагрузка странички, так почему бы для авторизированных пользователей не делать проверку и выводить нужную надпись при помощи PHP.
Ответить

Сергей
0
# 2876
(11:18:32  06.12.2015 г.)

Да, оно так и есть и проверка есть. Под спойлером я могу писать что хочу, т.е. вошедшему пользователю под спойлером вывести "личный кабинет", а как сменить имя спойлера, не представляю.
Ответить

Сергей
0
# 2877
(11:55:55  06.12.2015 г.)

Извиняюсь, я ошибся. Нет перезагрузки, ведь под спойлером php код, который не вошедшим выводит форму авторизации и ссылку регистрации, а вошедшим ссылки на лк, список пользователей, аватарку...
Ответить

Administrator
2
# 2878
(14:14:00  06.12.2015 г.)

Так я же и говорю, что при помощи PHP делать проверку на то зарегистрирован пользователь или нет, и в зависимости от результата выводить текст. Вы же делаете подобную проверку и вывод нужного содержимого внутри спойлера, так почему бы точно так же не поступить и с заголовком:
if ($_SESSION['login']!='') echo '<a href="" class="spoiler_links">Для зарегистрированных</a>';
else echo '<a href="" class="spoiler_links">Для не зарегистрированных</a>';
Ответить

Сергей
0
# 2879
(14:50:48  06.12.2015 г.)

Все получилось! Я просто поместил код спойлера в нужные места php кода! Если интересно, могу выложить код, но он большой и в эти комментарии не уместиться.
Ответить

Алексей
0
# 2974
(16:35:54  15.01.2016 г.)

Возникла проблема со скриптом. Я использую данный скрипт в 8 блоках в различных разделах лендинг страницы. Когда открываю какой-нибудь блок - все блоки закрываются, которые по умолчанию открыты. Можно ли как-нибудь сделать так чтобы открытие блока в своем разделе не закрывало все блоки в других разделах на всей странице.
Ответить

Administrator
0
# 2977
(23:24:42  15.01.2016 г.)

Если Вы используете код из комментария # 645 (чтобы при открытии второго спойлера первый закрывался автоматически), то добавьте всем 8 блокам один и тот же класс (например, qqq) замените код:
$("div[class^='spoiler_body']").hide('normal');
на такой: $(this).parents(".qqq").find(".spoiler_body").hide('normal');
Ответить

Евгений
1
# 3032
(13:49:54  09.02.2016 г.)

А как сделать так чтобы в целом в стилях для всего сайта все спойлеры были закрыты, но вот для ОДНОЙ страницы хотелось бы при загрузке открыть один спойлер, ну и при нажатии на другой спойлер чтобы этот закрывался и на его месте открывался другой и т.д.
Ответить

Administrator
1
# 3033
(20:17:30  09.02.2016 г.)

Добавьте в CSS новый стиль: .spoiler_open { display: block; }
Теперь нужному блоку дополнительно добавьте этот новый стиль: <div class="spoiler_body spoiler_open">
Ответить

Татьяна
-1
# 3138
(18:18:33  30.03.2016 г.)

Вечер добрый.
У меня такая проблема. Я хочу сделать трехуровневый спойлер:
Спойлер 1 (активная ссылка раскрывается списком):
- спойлер 1.1 (активная ссылка, раскрывается текстом по клику)
- спойлер 1.1.1 (текст)
- спойлер 1.2 (активная ссылка, раскрывается текстом по клику)
- спойлер 1.2.1 (текст)
При этом при открытии страницы видно спойлер 1, при нажатии на него видно список из подспойлеров ссылок 1.1, 1.2., 1.3 и т.д. При нажатии на каждую ссылку спойлера должен открываться текст.
Можно ли реализовать такое?
Ответить

Administrator
0
# 3326
(20:21:53  11.07.2016 г.)

Как вариант, попробуйте использовать спойлер с отдельным размещением заголовка и содержимого.
Ответить

Андрей
0
# 3716
(17:00:33  03.02.2017 г.)

Добрый день. Спойлер отличный. Но не могу решить проблемку.
Использую спойлер для вертикального меню при контрольной точке просмотра 768px, кликаю открыть затем закрываю меню И ПРИ изменении просмотра 992px меню не появляется до обновления страницы. Подскажите, что можно сделать? Спасибо.
Ответить

Маруся
0
# 3750
(14:12:39  25.02.2017 г.)

Скрипт просто 10/10! На тамблере очень пригодился. Почему-то тамошние разработчики считают, что разворачивать/сворачивать свои посты можно только автоматически и только на dashboard, а возможности добавить эту функцию самому в свой пост, когда он находится в блоге, никак нельзя. Можно сделать только read more, но это совсем гадость! Эта штука переносит вас на страницу поста в блоге, а это очень неудобно, если читаешь пост в dashboard, а в блог заходить не собирался.
Ответить

Александр
0
# 4074
(11:23:35  20.09.2017 г.)

Огромная благодарность Автору за бескорыстность и задающим вопросы! Я решил все свои проблемы со спойлерами на своём сайте.
Ответить

Михаил
0
# 4159
(15:06:47  01.12.2017 г.)

<a class="default-btn">Текст</a>
Хочу сделать вместо текста (Спойлер №1) свою кнопку что-то не получается, подскажите как.
Ответить

Administrator
0
# 4166
(20:50:37  04.12.2017 г.)

А что не получается? Создайте кнопку и добавьте ей класс spoiler_links.
Ответить

Михаил
0
# 4173
(12:22:24  05.12.2017 г.)

Да. Кнопка не отображается.
Ответить

Administrator
0
# 4175
(21:30:41  05.12.2017 г.)

Возможно, дело в Ваших стилях, т.к. если заменить
<a href="" class="spoiler_links">Спойлер №1 (кликните для показа/скрытия)</a>
на <input type="button" class="spoiler_links" value="Спойлер №1 (кликните для показа/скрытия)">
то все отображается и работает.
Ответить

Eugene
0
# 4238
(11:48:01  31.01.2018 г.)

Здравствуйте.
Такой вопрос: сделал спойлер с кнопкой внутри, которая сворачивает его.
Но если много текста, то спойлер сворачивается, а сайт остаётся растянутым вниз и медленно уменьшается.
Можно как-то сделать что бы при нажатии свернуть спойлер нас кидало к его заголовку сразу?
Ответить

Ewan
0
# 4289
(18:56:15  01.05.2018 г.)

Здравствуйте. Подскажите, как сделать так, чтобы при загрузке страницы, все спойлеры изначально были закрыты, а первый был открыт/видим?
Ответить

Edward
0
# 4920
(15:56:02  16.05.2022 г.)

Есть кнопка внутри спойлера, можно ли сделать так чтобы при нажатии на эту кнопку внутри спойлера, открывался второй спойлер, а во втором спойлере при нажатии на кнопку открывался третий?
Ответить

Administrator
0
# 4922
(20:21:25  17.05.2022 г.)

Попробуйте использовать скрипт из другой нашей темы: спойлер с отдельным заголовком и содержимым.
Ответить

Закрыть
Ваше имя:
890 + 13 =
Добавить комментарий:
Ваше имя:
890 + 13 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 9

Какие темы необходимо добавлять на сайт?