Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2012, 12:15
Аспирант
Отправить личное сообщение для Freezoff Посмотреть профиль Найти все сообщения от Freezoff
 
Регистрация: 06.12.2012
Сообщений: 33

Раздвигающийся текст
Ребята! Очень надеюсь на Вашу помощь!
Имеется большой кусок текста с html-тегами. Как сделать так, чтоб была видна только его верхняя часть (в пределах 80px), а остальная часть появлялась при нажатии на кнопку "Читать далее..." (без перезагрузки страницы).
Находил несколько решений, но к сожалению не одно из них не подошло, т.к. во всех этих решениях предполагается наличие двух частей - то что должно быть отображено и то, что должно быть скрыто.
Самый подходящий вариант который был найден выглядет следующим образом:
<html>
<body>
	Тут текст<BR>
	<div style="height:'100%'">
		<div id="ta" style="height:80px;overflow:hidden">
			bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>
		</div>
		<span style="cursor:pointer;color:blue" onclick="document.getElementById('ta').style.height = '100%'">Читать далее...</span>
	</div>
	Еще какой-то текст....
</body>
</html>

Можно ли в этом примере сделать чтобы "Читать далее" Не отображалась если текст помещается в 80px, а также если он уже был раскрыт?
И самое главное как сделать автоуменьшение блока, если текст занимает меньше чем 80px?
Возможно это уже здесь где-то обсуждалось, но я к сожалению не смог найти...
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2012, 12:33
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Имеет один недостаток если высота контента равна 80 будет показываться кнопка -можно убрать подобрав размер шрифта и межстрочный интервал
1 задaть max-height =80, overflow-y =hidden;
2 при нажатии на кнопку убирать max-height
3 показывать не показывать кнопку -если высота блока меньше 80 -не показывать кнопку
по поводу не показывать -если раскрыт-скрывать \изменять при нажатии на кнопку

Последний раз редактировалось dmitriymar, 06.12.2012 в 13:07.
Ответить с цитированием
  #3 (permalink)  
Старый 06.12.2012, 13:18
Аспирант
Отправить личное сообщение для Freezoff Посмотреть профиль Найти все сообщения от Freezoff
 
Регистрация: 06.12.2012
Сообщений: 33

Алгоритм мне понятен... Но мне бы javascript наброски хотя бы, т.к. в нем я полный ноль, или какое-то другое готовое решение (наверняка оно есть)!
Подобрать размер шрифта и межстрочный интервал не получится, т.к. при этом теряется весь смысл отформатированного текста вводимого пользователем в cleditor-е...
Ответить с цитированием
  #4 (permalink)  
Старый 06.12.2012, 15:40
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

Вот пример на jQuery

<html>
<head>
    <script language="JavaScript" src="../js/jquery.min.js"></script>
</head>    
<script>
    $(function(){
        if($('#ta').length){
            blok_height = Number($('#ta').css('height').replace('px',''));
             
            if(blok_height > 80){
               $('#ta').css('max-height','80px');
               $('.read-next').show();  
            } 
       }
    });
    
    $('.read-next').live('click', function(){
        
        if($('#ta').css('max-height') != 'none'){
           $('#ta').css('max-height','');
           $(this).text('Скрыть');
        } else {
           $('#ta').css('max-height','80px');     
           $(this).text('Читать далее...');
        }
        
        return false;
    });
</script>
<body>
	<div style="height:'100%'">
		<div id="ta" style="overflow:hidden">
			Ребята! Очень надеюсь на Вашу помощь!                                 <br />
Имеется большой кусок текста с html-тегами. Как сделать так,                      <br />
чтоб была видна только его верхняя часть (в пределах 80px),                       <br />
а остальная часть появлялась при нажатии на                                       <br />
 кнопку "Ч                                                                        <br />
итать далее..." (без перезагрузки страницы).                                      <br />
Находил несколько решений, но к сожалению не                                      <br />
одно из них не подошло,                                                           <br />
т.к. во всех этих решениях предполагает                                           <br />
                                                                                  <br />
ся наличие двух частей - то что должно б                                          <br />
ыть отображено и то, что должно быть скрыто.                                      <br />
Самый подходящий вариант который был найден выглядет следующим образом:           <br />
                                                                                  <br />
Можно ли в этом примере сделать чтобы "Читать далее" Н                            <br />
е отображалась если текст помещается в 80px, а также если он уже был раскрыт?     <br />
И самое главное как сделать автоуменьшение блока, если                            <br />
 текст занимает меньше чем 80px?                                                  <br />
Возможно это уже здесь где-то обсуждалось, но я к сожалению не смог найти...      <br />
		</div>		
		<a class="read-next" style="display:none;" href="#">Читать далее...</a>
	</div>
</body>
</html>


вот без jQuery

<script>
    window.onload = function(){
        blok = document.getElementById('ta');
        parent = blok.parentNode;
        blok_height = blok.style.height ? blok.style.height : blok.offsetHeight;
        
        if(blok_height > 80){
            blok.style.maxHeight = '80px';
            link = parent.getElementsByClassName('read-next')[0];
            link.style.display = 'inline'; 
                        
            link.onclick = function(){
                                
                if(blok.style.maxHeight){
                   blok.style.maxHeight = ''
                   link.innerHTML = 'Скрыть';
                } else {
                   blok.style.maxHeight = '80px';
                   link.innerHTML = 'Читать далее...';                   
                }
                
                return false;
            } 
        
        }
    }
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 06.12.2012, 16:42
Аспирант
Отправить личное сообщение для Freezoff Посмотреть профиль Найти все сообщения от Freezoff
 
Регистрация: 06.12.2012
Сообщений: 33

Спасибо огромное! Работает как надо (Пробовал 1-ый вариант)! НО только работает для одного блока
Таких блоков на странице будет n-ое количество, забыл это сразу упомянуть...
Попробовал поэксперементировать с id, но я так понял Вы его в скрипте жестко привязали!?
Ответить с цитированием
  #6 (permalink)  
Старый 07.12.2012, 07:13
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

да в этом примере к id жестко привязан, для многоблочного варианта поменяйте id на класс и всё делать в цикле
Ответить с цитированием
  #7 (permalink)  
Старый 07.12.2012, 07:26
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

вот вариант для многоблочного использования на jQuery

$(function(){
        bloks_total = $('body').find('.ta');
        if(bloks_total.length){
            for(i=0; i < bloks_total.length;i++){
                blok_height = Number($(bloks_total[i]).css('height').replace('px',''));
                  
                if(blok_height > 80){
                   $(bloks_total[i]).css('max-height','80px');
                   $('.read-next').show(); 
                }
            }
       }
    });
     
    $('.read-next').live('click', function(){
        is_parent = $(this).parent(); 
        blok = is_parent.find('.ta');
        if(blok.css('max-height') != 'none'){
           blok.css('max-height','');
           $(this).text('Скрыть');
        } else {
           blok.css('max-height','80px');    
           $(this).text('Читать далее...');
        }
         
        return false;
    });
Ответить с цитированием
  #8 (permalink)  
Старый 07.12.2012, 09:21
Аспирант
Отправить личное сообщение для Freezoff Посмотреть профиль Найти все сообщения от Freezoff
 
Регистрация: 06.12.2012
Сообщений: 33

В общем ситуация получается следующая... Если блок один то все нормально работает... Но если блоков несколько то отображается ссылка "Читать далее" у тех блоков у которых она появлятся не должна...
<html>
<head>
<script language="JavaScript" src="jquery.min.js"></script>
</head> 
<script>
$(function(){
        bloks_total = $('body').find('.ta');
        if(bloks_total.length){
            for(i=0; i < bloks_total.length;i++){
                blok_height = Number($(bloks_total[i]).css('height').replace('px',''));
                   
                if(blok_height > 80){
                   $(bloks_total[i]).css('max-height','80px');
                   $('.read-next').show(); 
                }
            }
       }
    });
	      
    $('.read-next').live('click', function(){
        is_parent = $(this).parent(); 
        blok = is_parent.find('.ta');
        if(blok.css('max-height') != 'none'){
           blok.css('max-height','');
           $(this).text('Скрыть');
        } else {
           blok.css('max-height','80px');    
           $(this).text('Читать далее...');
        }
          
        return false;
    });
</script>
<body>
<div style="height:'100%'">
	<div class="ta" style="overflow:hidden">
		1-ый блок bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>
	</div> 
	<a class="read-next" href="#" style="display:none;" >Читать далее...</a>
</div>

<div style="height:'100%'">
	<div class="ta" style="overflow:hidden">
		2-ой блок bla<br>bla
	</div> 
	<a class="read-next" href="#" style="display:none;" >Читать далее...</a>
</div>

<div style="height:'100%'">
	<div class="ta" style="overflow:hidden">
		n-ый блок bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>bla<br>
	</div> 
	<a class="read-next" href="#" style="display:none;">Читать далее...</a>
</div>

</body>
</html>

Последний раз редактировалось Freezoff, 07.12.2012 в 09:29.
Ответить с цитированием
  #9 (permalink)  
Старый 07.12.2012, 09:24
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

ща поправим
Ответить с цитированием
  #10 (permalink)  
Старый 07.12.2012, 09:27
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

$(bloks_total[i]).parent().find('.read-next').show(); вот это вставь вместо записи на 14 строчке
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 18:31
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38
Выравнять три дива в одной строке debugx (X)HTML/CSS 9 06.10.2011 12:03
Вопрос по относительному позиционированию DIV XPOMOB (X)HTML/CSS 11 15.07.2009 17:02