27.01.2016, 14:31
|
Новичок на форуме
|
|
Регистрация: 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.
Как это решить?
|
|
27.01.2016, 15:04
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
SecretBabka,
Попробуйте поменять местами функции NextIter и Write
(а вообще трудно сказать, не видя полного текста)
|
|
27.01.2016, 15:13
|
Новичок на форуме
|
|
Регистрация: 27.01.2016
Сообщений: 4
|
|
Dilettante_Pro, oт перемены мест слагаемых, как говорится.
Если есть пара минут на чтение, напишите мне вк id330113396
Последний раз редактировалось SecretBabka, 27.01.2016 в 15:14.
Причина: -
|
|
27.01.2016, 16:08
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
SecretBabka,
От перемены мест зависит определенность функций в момент исполнения - я же и говорю, что трудно судить, не видя полный текст. В вк не состою, со временем туго
Вообще функции, используемые в других функциях, лучше размещать раньше
|
|
27.01.2016, 16:21
|
Новичок на форуме
|
|
Регистрация: 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
|
|
27.01.2016, 16:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от SecretBabka
|
sleep
|
создавать такую функцию в js бесполезно, лучше изучите setTimeout https://learn.javascript.ru/settimeout-setinterval
тогда даже for не нужен будет, для выполнения вашей задачи ... увидите setInterval закройте закройте глаза и пропустите текст, вам нужен только setTimeout
|
|
27.01.2016, 18:01
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
печатная машинка 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>
|
|
27.01.2016, 18:16
|
Новичок на форуме
|
|
Регистрация: 27.01.2016
Сообщений: 4
|
|
рони,
Функцию sleep() я задал выше, и она корректно работает сама по себе.
Но спасибо, пришлось во многом поменять код, с интервалом работает.
|
|
27.01.2016, 18:23
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от SecretBabka
|
она корректно работает сама по себе
|
но эффекта от её применения не будет, бесполезная нагрузка для браузера.
Последний раз редактировалось рони, 27.01.2016 в 20:04.
|
|
|
|