I am trying to create a typing effect using vanilla JS, but for some reason I keep getting a TypeError: Cannot read property 'length' of undefined error. I don't understand why though, as 'word' is defined. It's been bugging me for a while and I'm the type of person who likes to try to get the answer right on my own, but I'm completely stuck.
var sentence = document.getElementsByClassName('sentence')[0];
var words = ['websites', 'apps', 'games'];
var speed = 100;
var i = 0;
var j = 0;
function type(word) {
if(i<word.length) {
sentence.innerHTML += word.charAt(i);
i++;
setTimeout(function() { type(word); }, speed);
}
}
function backspace(word) {
if(j<word.length) {
sentence.innerHTML = sentence.innerHTML.slice(0, -1);
j++;
setTimeout(function() { backspace(word); }, speed);
}
}
function check() {
if(j < words.length) {
setTimeout(function() { type(words[j]); }, 1000);
j++;
check();
}
}
check();
* {
font-family: Arial;
}
.container {
display: flex;
align-items: center;
justify-content: center;
}
.cursor {
background: #000;
width: 2px;
height: 15px;
animation: blink 1s steps(5, start) infinite;
}
@keyframes blink {
to { visibility: hidden; }
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="styles.css">
<title>Typing Effect Example</title>
</head>
<body>
<div class="container">
<div class="sentence">We make </div>
<div class="cursor"></div>
</div>
<script src="scripts.js"></script>
</body>
</html>
iandjglobal variables are the culprit. But we might be able to help better if you describe what you're actually trying to do.j <= words.length-1on thecheck()