!function () { const shuffleVelocityMs = 50; const shuffleElement = (element) => { const elemText = element.getAttribute("data-text"); const elemementChars = Array.from(elemText); const shuffleChars = (chars) => { for (let idx = chars.length; --idx; ) { const randomIdx = parseInt(Math.random() * idx); const cachedChar = chars[idx]; chars[idx] = chars[randomIdx]; chars[randomIdx] = cachedChar; } return chars; }; const shuffleText = (chars_no, char_idx) => { if (char_idx == chars_no) { element.textContent = elemText; return; } setTimeout(() => { const randomChars = shuffleChars(elemementChars.slice(char_idx)); element.textContent = elemementChars .slice(0, char_idx) .concat(randomChars) .join(""); shuffleText(chars_no, ++char_idx); }, shuffleVelocityMs); }; shuffleText(elemementChars.length, 0); }; setTimeout(() => { const element = document.querySelector(".shuffle"); element.setAttribute("data-text", element.textContent); shuffleElement(element); }, 100); }();