Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.11.2014, 08:27
Интересующийся
Отправить личное сообщение для web-expanse Посмотреть профиль Найти все сообщения от web-expanse
 
Регистрация: 21.03.2014
Сообщений: 14

Плавное открытие и закрытие блока текста
Доброе утро
Есть код(нашел на этом же ресурсе), который при нажатии на ссылку открывает и при повтором нажатии закрывает скрытый текст
Что нужно добавить, что бы блок открывался/закрывался плавно?
Важно сохранить "Открыть/Скрыть"
<script>
window.onload= function() {
	document.getElementById('toggler').onclick = function() {
		openbox('box', this);
		return false;
	};
};
function openbox(id, toggler) {
	var div = document.getElementById(id);
	if(div.style.display == 'block') {
		div.style.display = 'none';
		toggler.innerHTML = 'Открыть';
	}
	else {
		div.style.display = 'block';
		toggler.innerHTML = 'Закрыть';
	}
}
</script>

<a id="toggler">Открыть</a>
<div id="box" style="display: none;">Отображаемый блок</div>
Ответить с цитированием
  #2 (permalink)  
Старый 25.11.2014, 08:31
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Нужно CSS. Или JQ. Или сами пишите плавное изменение высоты/ширины по таймеру. display="block" это самоочевидно не плавно.
Ответить с цитированием
  #3 (permalink)  
Старый 25.11.2014, 09:03
Интересующийся
Отправить личное сообщение для web-expanse Посмотреть профиль Найти все сообщения от web-expanse
 
Регистрация: 21.03.2014
Сообщений: 14

Задачу решил кустарным способом, всем спасибо
function BspoilerControl(){
            //Скрываем все спойлеры
            $("div[name='spoiler']").hide();
            //Всем кнопкам спойлеров задаем текст и картинку (удобно для многоязыковых интерфейсов)
            $("p[name='spoilerbutton']").html("ЧИТАТЬ ДАЛЕЕ");
            //Перебераем все кнопки спойлеров на странице
            $("p[name='spoilerbutton']").each(function(){
                //Если прямо перед кнопкой спойлера стоит заголовок
                if($(this).prev(this).get(0).tagName == "H1" || $(this).prev(this).get(0).tagName == "H2" || $(this).prev(this).get(0).tagName == "H3"){
                    //Текст из заголовка переносим в кнопку, а сам заголовок убераем
                    var NewSpoilerButton = "<div name='spoilerbutton' class='advSpoilerHeader'><p><b>"+$(this).prev(this).html()+"</b> <span>ЧИТАТЬ ДАЛЕЕ</span></p></div>";
                    $(this).prev(this).replaceWith("");
                    $(this).replaceWith(NewSpoilerButton);
                    //В результате кнопки спойлеров с заголовками становятся div-ами. Теперь на странице может быть 2 типа кнопок спойлеров p и div типа
                }
            });
            //Для всех div кнопок обрабатываем клик
            $("div[name='spoilerbutton']").click(function () {
                //Если спойлер видим. Дословно: если свойство display для первого DOM брата/сестры равно "block" (т.е. видим в контексте применяемого эффекта slide)
                if($(this).next(this).css("display")=="block"){
                    //Записываем "показать>>" в span, который ребенок p, который ребенок нашей кнопки this. Потом поменяем его на "<<скрыть"
                    $(this).children("p").children("span").html("ЧИТАТЬ ДАЛЕЕ");
                    //Сворачиваем открытый спойлер
                    $(this).next(this).slideUp("normal");
                } else {
                    //Если спойлер не открыт, то он закрыт и соответственно меняем надпись и разворачиваем спойлер
                    $(this).children("p").children("span").html("СКРЫТЬ");                
                    $(this).next(this).slideDown("normal");
                }
              return false;
             });        
            //Теперь клик для всех p-кнопок
            $("p[name='spoilerbutton']").click(function () {
                //По тому же принципу, что до этого, только проще
                if($(this).next(this).css("display")=="block"){
                    $(this).next(this).slideUp("normal");
                    $(this).html("ЧИТАТЬ ДАЛЕЕ");
                } else {
                    $(this).next(this).slideDown("normal");
                    $(this).html("СКРЫТЬ");
                }
              return false;
             });
        }

<head>
<script type="text/javascript"> 
$(document).ready(function(){
BspoilerControl();
});
</script>
</head>
<p name='spoilerbutton' style='cursor:pointer'></p>
 <DIV name='spoiler' class='spoiler'> 
содержимое блока
 </div>
Ответить с цитированием
  #4 (permalink)  
Старый 25.11.2014, 09:11
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ахренеть. Вместо 3 строк css и 2 в js - телега "выбераем и перебераем".

Все на выберы президента!
Кого выберали? - Того же!
Это - перебер!
Ответить с цитированием
  #5 (permalink)  
Старый 25.11.2014, 09:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

10000001 поиск ...
Toggle: скрыть текущий блок при открытии другого
Ответить с цитированием
  #6 (permalink)  
Старый 25.11.2014, 09:57
Интересующийся
Отправить личное сообщение для web-expanse Посмотреть профиль Найти все сообщения от web-expanse
 
Регистрация: 21.03.2014
Сообщений: 14

Сообщение от kostyanet Посмотреть сообщение
Ахренеть. Вместо 3 строк css и 2 в js - телега "выбераем и перебераем".

Все на выберы президента!
Кого выберали? - Того же!
Это - перебер!
Я не владею js вообще, не знаю язык как таковой
Можете мне написать не тяжелый код?
По вашему предыдущему комментарию я так понял, что нет
По этому я нашел рабочий вариант, главное что он удовлетворяет мои задачи с лихвой
Ответить с цитированием
  #7 (permalink)  
Старый 25.11.2014, 10:00
Интересующийся
Отправить личное сообщение для web-expanse Посмотреть профиль Найти все сообщения от web-expanse
 
Регистрация: 21.03.2014
Сообщений: 14

Сообщение от kostyanet Посмотреть сообщение
Ахренеть. Вместо 3 строк css и 2 в js - телега "выбераем и перебераем".

Все на выберы президента!
Кого выберали? - Того же!
Это - перебер!
Сообщение от рони Посмотреть сообщение
10000001 поиск ...
Toggle: скрыть текущий блок при открытии другого
Не нашел ни одного скрипта где реализовано "Показать/Скрыть"
Спасибо
Ответить с цитированием
  #8 (permalink)  
Старый 25.11.2014, 15:01
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Потому что это мегабаян в стопицотый раз показывать как воткнуть в элемент класс с transition, а потом выткнуть класс с transition.

Я как-то тоже поискал годный простой попуп и все равно написал свой. Принцип точно такой же:

var popup_message=function(title){
	if(!title)
		return;
	if(typeof pop_message === 'undefined') {
		pop_message=document.body.appendChild(document.createElement('div'));
		pop_message.className='pop_message';
	}
	pop_message.title=title;
	pop_message.classList.add('pop_message_show');
	setTimeout(function(){
		pop_message.classList.remove('pop_message_show');
	},1500);
};


div.pop_message {
	position:fixed;
	top:0;
	width:100%;
	text-align:center;
	visibility:hidden;
	opacity:0;
	transition:opacity .5s;
}
/*
*/
	div.pop_message:before{
		content:attr(title);
		display:inline-block;
		background-color:#a00c20;
		font-size:14px;
		line-height:30px;
		color:white;
		padding:0 20px;
		box-shadow:3px 3px 5px rgba(95,65,25,0.15);
	}
	
div.pop_message_show {
	visibility:visible;
	opacity:1;
	transition:opacity .5s;
}


ундерстенд?
Ответить с цитированием
  #9 (permalink)  
Старый 25.11.2014, 15:08
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

А, ну да, они все были с кликами, вспомнил, точно, поэтому пришлось свой безкличный написать.

Ну вот, а теперь если вместо события от таймера будет событие от мыши?
Ответить с цитированием
  #10 (permalink)  
Старый 25.11.2014, 15:12
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное раскрытие и сворачивание блока StyLLeR jQuery 6 07.07.2014 16:00
Нужно реализовать в JavaScript открытие скрытого текста CaptainDev Общие вопросы Javascript 7 09.01.2013 19:37
плавное изменение размера блока alexk984 jQuery 4 29.11.2010 08:46
Плавное открытие окна. Flashton Элементы интерфейса 3 20.10.2010 16:00
popup окна. Открытие и закрытие их. FullHouse Элементы интерфейса 2 30.09.2010 10:01