亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 JavaScript 中的條件下更改間隔時間?

如何在 JavaScript 中的條件下更改間隔時間?

一只甜甜圈 2021-12-23 19:31:46
我需要一個函數來一個一個地打印字母,但在“,”之后暫停。我試圖這樣做,但沒有奏效:var span = document.getElementById('text')function print(string){  var i = 0  var time = 50  var timer = setInterval(function(){    span.innerHTML += string[i++]    if(string[i] == ","){      time = 150    }else{      time = 50    }    },time)}
查看完整描述

3 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

我不確定您是否可以更改setTimeinterval一次定義的時間。最好使用setTimeout. 我正在使用遞歸函數來實現所需的 -


function print(string, i){

  var time = 50

  if(string[i]==",") time = 1000

  setTimeout(function(){

    span.innerHTML += string[i]

    if(i<string.length-1) print(string,++i)

  },time)


}

完整的例子可以在這里找到


查看完整回答
反對 回復 2021-12-23
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

首先,我認為setInterval這不是你要找的。由于您似乎只想延遲打印每個字符,setTimeout因此在這種情況下效果最佳。


我會將其分解,以便您可以專注于一次打印一個字符,然后您可以在主print函數中為字符串中的每個字符調用它。


這就是我將使用 Promises 做這樣的事情的方式:


const printCharacter = (ch, idx) => new Promise(resolve => {

    let time = 50 * idx;


    if(ch === ',') {

        time = 150 + time * idx;

    }


    setTimeout(() => {

        const span = document.getElementById('text');

        span.innerHTML += ch;

        resolve();

    }, time)

});


const print = async string => {

    for(let i = 0; i < string.length; i++) {

        await printCharacter(string[i], i);

    }

};

這里可能會出現一些錯誤,例如基本字符串中存在多個逗號的時間。這只是我的第一次迭代。


查看完整回答
反對 回復 2021-12-23
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

我建議使用 for 循環來迭代字符串,并使用 Promise 來根據需要暫停,而不是使用間隔。


旁注,使用textContent代替innerHTML。前者像myCar.cangeTires(); myCar.closeDoors(),后者像myCar.do('change tires'); myCar.do('close doors');。


let sleep = ms => new Promise(resolve => setTimeout(resolve, ms));


var span = document.getElementById('text');

let print = async string => {

  span.textContent = '';

  for (let c of string) {

    span.textContent += c;

    await sleep(c === ',' ? 500 : 50);

  }

};


print('my text, and a comma');

<span id="text"></span>


查看完整回答
反對 回復 2021-12-23
  • 3 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號