我正在做的是一种让它看起来像自己写的文本的效果,我拥有的代码如下:
这是一个简单<body>
的两个元素来查看示例(也在:jsfiddle)。
$("#write").click(function() {
//Es un fragmento de texto extraido del periódico "El país"
var text = "Llamada oculta. Al otro lado del teléfono suena una voz muy grave, fuerte, de un hombre con un inglés de ligero acento escandinavo. Soy Lars Hedegaard, creo que querías hablar conmigo. Verse no es posible. Ni se encuentra en Copenhague ni puede dar su paradero al estar bajo protección policial. Hedegaard, historiador y periodista danés de 74 años, es un reconocido y duro crítico del islam. Le grabaron en su casa, sin previo aviso según defiende, diciendo cosas como que en las familias musulmanas, las niñas eran violadas por padres, tíos y sobrinos. Por esto fue multado en 2011 con unos 700 euros.";
var writer = "";
writer.length = 0; //Limpiar el string
var maxLength = text.length;
var count = 0;
var speed = 5000 / maxLength; //La velocidad varía dependiendo de la cantidad de caracteres
var write = setInterval(function() {
if (count > text.length) {
clearInterval(write);
}
writer += text.charAt(count);
document.getElementById("text").innerHTML = writer;
count++;
}, speed);
$("#write").click(function() {
clearInterval(write);
}); //si se pulsa en el botón limpiar el intervalo
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="write" type="button">Write!</button>
<h1 id="text"></h1>
我的疑问是我不知道我是否使用了正确的方法来做到这一点。也就是说,我不清楚是使用循环更好for
,还是使用setInterval
(如示例中所示),以及代码是否可以简化得更多。
但是,当然,如果我使用,for
我将不得不在其中添加一个setTimeout
……这就是我正在考虑的问题。
根据您的代码。并使用
setInterval(function(){
有
setInterval
就好。我给你一个使用setInterval
和Generadores
来自 ES6 的例子。我使用生成器从给定的文本中逐行生成,原谅冗余。注意:代码只能在支持
Generators
.版
由于我已经改进了此答案的代码和功能供我个人使用,因此我将其与社区分享:
原始答案
不久前我在StackOverflow上写了一个类似的答案,它使用了 Promises。
以下示例使用来自 RxJS 库的 Observables。
正如您在问题中提到的,您可以使用
setTimeout()
在指定的时间间隔内显示每个字符。De esta forma se mostraría el efecto "typeWriter" (máquina de escribir) en tu página.