Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Необходимо исправить функцию печатной машинки (https://javascript.ru/forum/events/35664-neobkhodimo-ispravit-funkciyu-pechatnojj-mashinki.html)

seoinby 17.02.2013 22:58

Необходимо исправить функцию печатной машинки
 
Если не туда создал тему, пусть модеры перебросят.
------------------------------------------------------
Вот html вместе с функцией печатной машинки

<html>     
<head>     
<title>Печатная машинка</title>     
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">     
<style type="text/css">     
<!--     
.style1 {font-size: 12px}     
-->     
</style>     
<script>     
<!-- web-mastery.info -->     
var source,dest,len,now=0,delay=100,letters=1;     
function show_text()     
{     
source = document.getElementById("1");     
dest = document.getElementById("pageText");     
len = source.innerHTML.length;     
show();     
}     

function show()     
{     
dest.innerHTML += source.innerHTML.substr(now,letters);     
now+=letters;     

if(now<len)     
setTimeout("show()",delay);     
}     
</script>     
</head>     
<body bgcolor="#FAFDFF" onload="show_text();">     
<p id="1">Текст печатной машинки </p>     
<p id="2">Текст печатной машинки </p>   
<p id="3">Текст печатной машинки </p>   
...
<p id="31">Текст печатной машинки </p>  
<p id="pageText">     
</p>     

</body>     
</html>


в данной функции текст выводиться абзац только с id=1 и только один раз, а у меня их (<p>) 31 штука. И каждый раз это число меняется.

Мне необходимо организовать цикл печатной машинки так что бы число <p> бралось их php переменной как я описал ниже

for (var k = 0; k <<?php echo $i ?>; k++) {


а текст печатной машинки выводился циклом, сначала id=0, потом id=1 и т.д. в зависимости от счётчика "k"

source = document.getElementById("k"); - сдесь id элемента в цикле


в общем в мною предложенную функцию нужно добавить цикл, но так что бы следующий элемент выводился, только когда вывелся предыдущий. друг за другом. id=0, id=1, ... id=k

Спасибо за помощь!

рони 17.02.2013 23:47

seoinby,
<html>
<head>
<title>Печатная машинка</title>
<meta charset="utf-8" />
<style type="text/css">
<!--
.style1 {font-size: 12px}
-->
</style>
<script>
<!-- web-mastery.info -->
var source,dest,len,now=0,delay=100,letters=1,k = 1;
function show_text()
{
source = document.getElementById(k);
dest = document.getElementById("pageText");
len = source.innerHTML.length;
show();
}

function show()
{
dest.innerHTML += source.innerHTML.substr(now,letters);
now+=letters;

if(now<len) {setTimeout("show()",delay)}
else {k++ ;now=0;
 if (k < 5)  show_text();
}

}
</script>
</head>
<body bgcolor="#FAFDFF" onload="show_text();">
<p id="1">Текст печатной машинки 1</p>
<p id="2">Текст печатной машинки 2</p>
<p id="3">Текст печатной машинки 3</p>
<p id="4">Текст печатной машинки 4</p>
<p id="pageText">
</p>

</body>
</html>

danik.js 18.02.2013 06:30

Цитата:

Сообщение от Дзен-трансгуманист
id не должен начинаться с цифры

По стандарту да. Но ведь это не создает никаких проблем (по крайней мере на сегодняшний день) с getElementById насколько я знаю?

ksa 18.02.2013 08:46

Цитата:

Сообщение от Дзен-трансгуманист
id не должен начинаться с цифры.

В прошлом году опровергли это высказывание...

danik.js 18.02.2013 09:11

Цитата:

Сообщение от ksa
В прошлом году опровергли это высказывание...

Хватит загадками говорить. Кто опроверг? Что опроверг? Что id чего-то не должен? Он вобще никому ничего не должен, ведь так?

ksa 18.02.2013 09:17

Цитата:

Сообщение от danik.js
Кто опроверг?

Было обсуждение на тему ИД... Приводили ссылки на статьи и примеры...
Итог - ИД может быть вообще цифровым.

danik.js 18.02.2013 09:24

Итога быть не может. Все зависит от задачи.

try {
    document.querySelector('#1');
} catch(e) {
    alert(e.message);
}

ksa 18.02.2013 09:25

Цитата:

Сообщение от danik.js
Итога быть не может.

Ну итог-то есть всегда. :D

danik.js 18.02.2013 09:28

Цитата:

Сообщение от ksa
Ну итог-то есть всегда

Да, вот только он может зависить от входных параметров, например таких как условие применимости в css-селекторах

ksa 18.02.2013 09:28

Цитата:

Сообщение от danik.js
вот только он может зависить от входных параметров

Бесспорно! :yes:

danik.js 18.02.2013 09:49

Что-то мне кажется что для css-селектора эту цифру нужно эскейпить как-то. Но не могу найти информацию. ksa, а не подкинешь ссылку на ту самую тему?

ksa 18.02.2013 10:40

Цитата:

Сообщение от danik.js
ksa, а не подкинешь ссылку на ту самую тему?

Да вот х/з по каким теперь словам её искать... :(
Я просто для себя запомнил то обсуждение и все. Там и на концорциум какой-то ссылку давали, де не противоречит правилам...

cyber 18.02.2013 18:50

а если так)
модифицировал свою старую анимацию, printIn - печать , printOut -удаление.
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <div id="t"><p>asdsadasdsa</p> asdsadsadsad<div>asdasdas1</div></div>
    <script>

var Text = {
  
  printIn:function (elem,str,duration,callback){
		var i = 0, string = "", self = this;
 
    (function start(){
      
      if(i > str.length-1 )  {
        
        if(callback)callback();
        return;
      }
     
      var tag = self.Tags(str,i);
	 	
      if(tag == null) string += str[i];
      
      else {
        string+= tag.tag;
        i = tag.position;
        
      }
      
		elem.innerHTML = string;
      
       i++;
      
		setTimeout(arguments.callee,duration);  
    }());
        },
	 
	printOut:function (elem,str,duration, callback){
		
      var i = str.length, string="", self = this;
	 
      (function(){
      
      if(i < 0 ){
      
        if(callback)callback();
        return;
      }
		
        var tag = self.Tags(str,i);
	 	
      if(tag != null) i = tag.position;
     
		      elem.innerHTML = str.slice(0,i);
        i--;
      
      setTimeout(arguments.callee,duration);
		
    }());
    
    },
  
  
  Tags: function(text, num){
   
    var symb = text[num];
    var start, end, val = {}, open, close;
   
    if(symb == '<'){
    
      open = text.indexOf("<",num);
      
      start = num;
      end = text.indexOf(">",num);
      
      if(open < start) return null;
      
      val.tag = text.slice(start, end+1);
      val.position = end;
    }
    
    else if(symb == '>'){
     
       close =  text.lastIndexOf(">",num);
      
      end = text.lastIndexOf("<",num);
      
      if(end > close ) return null;
      
      val.position = end;
    
    }
    
    else return null;
  
    return val;
  }
      
     };

      
    var el = document.getElementById("t");   
    
       Text.printIn(el, el.innerHTML,50,callback);
      
      function callback(){
      Text.printOut(el, el.innerHTML,50);
      }
    </script>

  </body>
</html>


Часовой пояс GMT +3, время: 09:14.