Simulez l'apparence de la saisie, pas les pressions réelles, en javascript

J'essaie d'écrire une fonction simple qui fera apparaître comme si quelqu'un tape une zone de textarea

– C'est ma fonction (pardonnez-moi si c'est atroce, mais je n'utilise normalement pas javascript) — La partie console.log() fonctionne bien, mais pour une raison quelconque, je ne peux pas obtenir ce script pour mettre à jour le mode dom Je m'attends …

  function type(string) { value = ""; el = document.getElementById("typeArea"); for (var i = 0; i < string.length; i++) { value += string[i]; //$("#fbw > textarea").val(value); el.textContent = value; console.log(value); sleep(160); } sleep(2000); } 

J'apprécie toute idée que vous pouvez me donner.

jsFiddle Demo

Tout ce que vous manquiez était une construction plutôt que Sleep . L'approche js pour y parvenir consiste à utiliser un délai d'attente et un appel récursif afin d'itérer à travers votre chaîne

 function type(string,element){ (function writer(i){ if(string.length <= i++){ element.value = string; return; } element.value = string.substring(0,i); if( element.value[element.value.length-1] != " " )element.focus(); var rand = Math.floor(Math.random() * (100)) + 140; setTimeout(function(){writer(i);},rand); })(0) } 

Vous pouvez faire quelque chose comme ceci en utilisant la fonction setTimeout. Codepen

 $(function(){ simulateTyping('looks like someone is typing...', '#txt') function simulateTyping(str, textAreaId) { var textArea = $(textAreaId); var currentCharIndex = 0; function typeChar(){ if (currentCharIndex >= str.length) return; var char = str[currentCharIndex]; textArea.val(textArea.val() + char); currentCharIndex ++; setTimeout(typeChar, 500); } typeChar(); } })