バックスペース付きの単純なJavaScript/jQueryタイプライターを作成しました。これはいくつかのメッセージ(背景画像&)をループします。Javascriptのタイプライターが適切に書き込んでバックスペースしない
私が直面している問題は、関数ループとして、正しく書かれていないことです。いくつかの文字が欠落しています。
私の配列は[誰もが、犬の所有者、ダイエット意識の高い、労働者、家族]ですが、順番に書かれているものは:ryone、g所有者、ダイエット意識、(空白)、家族です。
私は、変数がどこか適切にリセットされていないことや、長さが以前のメッセージ(有効なスコープの問題)から解決されている可能性があると思います。 Codepenで
:https://codepen.io/nathankeenmelb/pen/MOovXJ?editors=0010
関連するHTMLは、jQueryの
let messages = [
" everyone.",
" dog owners.",
" the diet-conscious.",
" workers.",
" families."
];
let images = [
"url(https://via.placeholder.com/200x100)",
"url(https://via.placeholder.com/400x100)",
"url(https://via.placeholder.com/400x200)",
"url(https://via.placeholder.com/400x300)",
"url(https://via.placeholder.com/400x400)"
];
let loopDuration = 3000;
function displayImages(arr){
//Loop through other images, but start at second item
let j = 1;
setInterval(//evaluates every x ms
function(){
$('body').css("background-image",arr[j]);
j++;
console.log('j in image = ' + j);
//Reset loop after been through them all to repeat
if(j >= images.length) j = 0;
//Interval length in ms
}, loopDuration);
}
function displayMessages() {
//CHANGE THE MESSAGE -starting the loop
let i = 0;
setInterval(//evaluates every x ms
function(){
//TYPEWRITE MESSAGE
let char = 0;
function typeWriter() {
//for as long as the current character length is less than the full character length
if (char < messages[i].length) {
//Add the next character to the html
document.getElementById("message").innerHTML += messages[i].charAt(char);
//Go to next character
char++;
//Wait x ms to write next character
setTimeout(typeWriter, 50);
}
} //end typewriter()
//Run the function
typeWriter();
//START BACKSPACE
let theMessage = document.getElementById("message").innerHTML;
let bchar = theMessage.length;
function backSpacer() {
if (bchar > 0) {
theMessage = theMessage.slice(0,-1);
document.getElementById("message").innerHTML = theMessage;
bchar--;
//Run the function again, after x m
setTimeout(backSpacer, 25);
}
}
//Run the function
backSpacer();
//If instead of using backspacer() I deleted the text as follows, that worked fine
//$('#message').text('');
//document.getElementById("message").innerHTML = "";
//Having typed it all out, backspaced it, go to the next message
i++;
//Having gone through each message, reset loop to repeat, to 0 to include the original
if(i >= messages.length) i = 0;
//Interval length in ms
}, loopDuration);
}
//Wait till the whole page loads
window.onload = function loadChanges() {
setTimeout(function() {
//Run whatever after time elapses
displayImages(images);
displayMessages();
//Wait x ms after page loads
}, 1000)
};
トラブルシューティングのヒント#1:簡略化。これは大きくて難しいコードセットです。可能な限り小さな部分に分解し、それをテストし、それを働かせて(あるいは何が間違っているのか把握して)、それを構築します。非常に多くのコードと再帰とタイムアウトで一瞬に何かに取り組もうとしています - それはあなたが必要とする以上に多くの作業です。 –