Q PM: Мне нужна Ваша помощь по javascript. 1) У меня есть текст, который печатается автоматически. Проблема в том, что при переносе строки появляется тэг br , но далее сам удаляется и строка переноситься. как сделать так, чтобы этот тэг не отображался? Если можно, на примере кода какого нибудь. Мой код:
Код
<script language="JavaScript"> var text = 'текст текст текст.<br> '+ ' текст'+ ' текст текст текст'+ ' текст текст текст текст'+ ' текст текст текст'+ ' текст текст текст.'; i = 0;
function type(){ i++; if( i <= text.length ) document.getElementById("type_text").innerHTML = text.substr(0, i);
setTimeout( type, 25 ); } type(); </script>
2)Так же есть вопрос, как сделать этот текст заменяющимся. Т.е. имеется кнопка, при нажатии которой этот текст меняется на другой. (как книжка). Пробовал на примере Вашего когда по смене фона на нажатие кнопки, но потерпел неудачу((( Подскажите, пожалуйста, как реализовать это всё? P.S. Z новичок и по возможности прошу более доступным языком объяснить. Спасибо.
Вариант номер 1: использовать white-space:pre; - он выводит текст так как есть, со всеми переносами. Переносы ставятся как «\n» - в первой строке видно
Код
<div id="type_text" style="white-space:pre;"></div> <script language="JavaScript"> var text = 'текст текст текст.\n'+ ' текст'+ ' текст текст текст'+ ' текст текст текст текст'+ ' текст текст текст'+ ' текст текст текст.'; i = 0;
function type(){ i++; if( i <= text.length){ document.getElementById("type_text").innerHTML = text.substr(0, i); } setTimeout( type, 25 ); } type(); </script>
Второй вариант - усложнить скрипт, что бы он искал/фильтровал ваши <br> и заменял сразу не по одному символу а по четыре, типа:
Код
<div id="type_text"></div> <script language="JavaScript"> var text = 'текст текст текст.<br>'+ ' текст'+ ' текст текст текст<br>'+ ' текст текст текст текст<br>'+ ' текст текст текст<br>'+ ' текст текст текст.'; i = 0; function type(){ i++; if( i <= text.length){ if(text.substr(i-1,1)=='<'){ document.getElementById("type_text").innerHTML +='<br>' }else{ document.getElementById("type_text").innerHTML = text.substr(0, i); } } setTimeout( type, 25 ); } type(); </script>
2)Так же есть вопрос, как сделать этот текст заменяющимся. Т.е. имеется кнопка, при нажатии которой этот текст меняется на другой. (как книжка). Пробовал на примере Вашего когда по смене фона на нажатие кнопки, но потерпел неудачу((( Подскажите, пожалуйста, как реализовать это всё?
Огромное спасибо за помощь! Насчёт 2 за деньги, я пока сам попробую реализовать, спасибо)
Добавлено (22.09.2014, 17:29) --------------------------------------------- А как тогда к 1 вопросу о переносе добавить, чтобы он не пропечатывал к примеру ? если я добавляю условие к этому, он не воспринимает код и тэги опять пропечатываются(((
Добавлено (22.09.2014, 17:44) --------------------------------------------- Так же присутствует задержка в месте тэга. при теге р - задержка около полторы секунды.
А как тогда к 1 вопросу о переносе добавить, чтобы он не пропечатывал к примеру ? если я добавляю условие к этому, он не воспринимает код и тэги опять пропечатываются(((
Добавить условие - если символ - вопросительный знак - его не печатать. Точно также и к другим символам.
Вы, видимо, невнимательно прочитали что я написал. А написал я что изначально скрипт был написан для формы - текстового опля, где работают и \n - перенос строки и \t - табуляция.
После каждого тэга, скорость печатывания уменьшается в разы и доходить чуть ли не до 1 символа в полторы секунды. Есть способы это исправить? Или же всё таки придётся от тэга br отказываться?(((
После каждого тэга, скорость печатывания уменьшается в разы и доходить чуть ли не до 1 символа в полторы секунды.
Поищите более грамотные скрипты для подобного - данный - не айс.. Но и сами понимаете, что чем больше текста, тем больше интераций цикла, следовательно и больше нагрузка на браузер... А у вас еще и проверка каждого символа на бр висит..
Честно говоря, имею общее представление только, чем отличаются эти методы...
setTimeout Метод setTimeout выполняет код (или функцию), указанный в первом аргументе, асинхронно, с задержкой в delay миллисекунд. В отличие от метода setInterval, setTimeout выполняет код только один раз. В отличие от метода setTimeout, setInterval выполняет код много раз, через равные промежутки времени, пока не будет остановлен при помощи clearInterval.
<div style="text-align:left;"> <div id="type_text" class="box"> <script language="JavaScript"> var text = ['текст текст1 текст<br> '+ ' текст текст текст<br>'+ ' текст текст текст.', 'текст2 текстк 2 текст2.<br>'+ '"текст?", 'текст3 текст3 текст3' ]; var i = 0; var target = 0; var timer;