Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.01.2016, 14:31
Новичок на форуме
Отправить личное сообщение для SecretBabka Посмотреть профиль Найти все сообщения от SecretBabka
 
Регистрация: 27.01.2016
Сообщений: 4

Проблема с выводом.
NextIter: function() {
		this.TextIn.innerHTML = '';
		if (this.Iter == this.endIter) { this.End(); };
		for (var abc in this.textArr[this.Iter]) {
				this.Write(this.textArr[this.Iter][abc]);//Должен вывести 1 знак из строки
                                console.log(this.textArr[this.Iter][abc]);
				sleep(100);//Работает правильно, функция отдельно
		};
		this.Iter++;
	},
Write: function(letter) {
		this.TextIn.innerHTML += letter;
	}

В идеале - должен выводить предложение по 1 знаку в 100мс, и в консоли так и есть. Однако текст на самой странице не обновляется, пока не закончится цикл for.
Как это решить?
Ответить с цитированием
  #2 (permalink)  
Старый 27.01.2016, 15:04
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

SecretBabka,
Попробуйте поменять местами функции NextIter и Write
(а вообще трудно сказать, не видя полного текста)
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2016, 15:13
Новичок на форуме
Отправить личное сообщение для SecretBabka Посмотреть профиль Найти все сообщения от SecretBabka
 
Регистрация: 27.01.2016
Сообщений: 4

Dilettante_Pro, oт перемены мест слагаемых, как говорится.
Если есть пара минут на чтение, напишите мне вк id330113396

Последний раз редактировалось SecretBabka, 27.01.2016 в 15:14. Причина: -
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2016, 16:08
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

SecretBabka,
От перемены мест зависит определенность функций в момент исполнения - я же и говорю, что трудно судить, не видя полный текст. В вк не состою, со временем туго
Вообще функции, используемые в других функциях, лучше размещать раньше
Ответить с цитированием
  #5 (permalink)  
Старый 27.01.2016, 16:21
Новичок на форуме
Отправить личное сообщение для SecretBabka Посмотреть профиль Найти все сообщения от SecretBabka
 
Регистрация: 27.01.2016
Сообщений: 4

Dilettante_Pro,
Всё это дело находится в классе, вот в более понятном виде, результат тот же:
В чистом html
<div id="text"></div>
<script>
var TextIn = document.getElementById("text");
var Iter = 0;
var textArr = ["Bla-Bla","Abl-Abl"];

function sleep(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
};
function Write (letter) {
	TextIn.innerHTML += letter;
};
function NextIter() {
		TextIn.innerHTML = '';//Обнуляем текстовое поле
		for (var abc in textArr[Iter]) {
				Write(textArr[Iter][abc]);//Выводим по 1 букве каждые 100мс
				sleep(100);
		};
		Iter++;
};
</script>

Как вариант - пробовал не просто писать текст в div, а создавать для каждой буквы span, и открыл окно разработчика(Chrome).
В итоге создаётся span во время цикла, но на самой странице отображается _после_ цикла.

Последний раз редактировалось SecretBabka, 27.01.2016 в 16:22. Причина: Забыл закрыть script
Ответить с цитированием
  #6 (permalink)  
Старый 27.01.2016, 16:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от SecretBabka
sleep
создавать такую функцию в js бесполезно, лучше изучите setTimeout https://learn.javascript.ru/settimeout-setinterval
тогда даже for не нужен будет, для выполнения вашей задачи ... увидите setInterval закройте закройте глаза и пропустите текст, вам нужен только setTimeout
Ответить с цитированием
  #7 (permalink)  
Старый 27.01.2016, 18:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

печатная машинка 2016
SecretBabka,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
	<div></div>
	<script>
	 function typeText(d, g, h, e) {
    var a, b, f = performance.now();
    requestAnimationFrame(function k(c) {
        if (!b || !b.length)
            if (b = g.shift()) a = document.createElement("br"), d.appendChild(a), a = document.createTextNode(""), d.appendChild(a), b = b.split("");
            else {
                e && e();
                return
            }
        c = (c - f) / h;
        1 < c && (c = 1);
        1 == c && (f = performance.now(), a.data += b.shift());
        requestAnimationFrame(k)
    })
};
		var div = document.getElementsByTagName("div")[0];
		typeText(div, ["ololo ololo lololo lolo","всяка фигня","Вы прочитали это важное сообщение"], 100, function() {
     alert("УРА!!!");
});
	</script>
</body>


</html>
Ответить с цитированием
  #8 (permalink)  
Старый 27.01.2016, 18:16
Новичок на форуме
Отправить личное сообщение для SecretBabka Посмотреть профиль Найти все сообщения от SecretBabka
 
Регистрация: 27.01.2016
Сообщений: 4

рони,
Функцию sleep() я задал выше, и она корректно работает сама по себе.
Но спасибо, пришлось во многом поменять код, с интервалом работает.
Ответить с цитированием
  #9 (permalink)  
Старый 27.01.2016, 18:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от SecretBabka
она корректно работает сама по себе
но эффекта от её применения не будет, бесполезная нагрузка для браузера.

Последний раз редактировалось рони, 27.01.2016 в 20:04.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом сообщений Visual Общие вопросы Javascript 0 01.02.2013 12:34
Проблема с выводом переменной. Iktash Элементы интерфейса 6 18.01.2013 12:30
Проблема с выводом массива на консоль Vempel jQuery 1 06.08.2012 15:57
Проблема с выводом скрипта на страницу Mike_S. Общие вопросы Javascript 8 14.06.2011 07:26
Проблема с выводом контента в топ-панели Slavk0 Общие вопросы Javascript 0 28.03.2011 11:39