第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在JavaScript中設(shè)置時(shí)間延遲

如何在JavaScript中設(shè)置時(shí)間延遲

MYYA 2019-10-16 14:40:05
我的網(wǎng)站上有這片js可以切換圖像,但是第二次單擊圖像時(shí)需要延遲。延遲應(yīng)為1000ms。因此,您將單擊img.jpg,然后將出現(xiàn)img_onclick.jpg。然后,您將單擊img_onclick.jpg圖像,然后應(yīng)該有1000ms的延遲,然后才能再次顯示img.jpg。這是代碼:jQuery(document).ready(function($) {    $(".toggle-container").hide();    $(".trigger").toggle(function () {        $(this).addClass("active");        $(".trigger").find('img').prop('src', 'http://localhost:8888/images/img_onclick.jpg');    }, function () {        $(this).removeClass("active");        $(".trigger").find('img').prop('src', 'http://localhost:8888/images/img.jpg');    });    $(".trigger").click(function () {        $(this).next(".toggle-container").slideToggle();    });});
查看完整描述

3 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

用途setTimeout():


var delayInMilliseconds = 1000; //1 second


setTimeout(function() {

  //your code to be executed after 1 second

}, delayInMilliseconds);


查看完整回答
反對(duì) 回復(fù) 2019-10-16
?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊

javascript setTimeout和setInterval(other)中有兩種(最常用的)計(jì)時(shí)器函數(shù)類型


這兩種方法都具有相同的簽名。他們以回調(diào)函數(shù)和延遲時(shí)間為參數(shù)。


setTimeout在延遲之后僅執(zhí)行一次,而setInterval在每個(gè)延遲毫秒后繼續(xù)調(diào)用回調(diào)函數(shù)。


這兩種方法都返回一個(gè)整數(shù)標(biāo)識(shí)符,可用于在計(jì)時(shí)器到期之前清除它們。


clearTimeout和clearInterval這兩種方法采取從上面函數(shù)返回一個(gè)整數(shù)標(biāo)識(shí)符setTimeout和setInterval


例:


setTimeout


alert("before setTimeout");


setTimeout(function(){

        alert("I am setTimeout");

   },1000); //delay is in milliseconds 


  alert("after setTimeout");

如果運(yùn)行上面的代碼,您將看到它發(fā)出警報(bào)before setTimeout,然后after setTimeout最終I am setTimeout在1秒(1000毫秒)后發(fā)出警報(bào)


您可以從示例中注意到,setTimeout(...)異步是異步的,這意味著在等待下一個(gè)語(yǔ)句之前,它不會(huì)等待計(jì)時(shí)器過去alert("after setTimeout");


例:


setInterval


alert("before setInterval"); //called first


 var tid = setInterval(function(){

        //called 5 times each time after one second  

      //before getting cleared by below timeout. 

        alert("I am setInterval");

   },1000); //delay is in milliseconds 


  alert("after setInterval"); //called second


setTimeout(function(){

     clearInterval(tid); //clear above interval after 5 seconds

},5000);

如果運(yùn)行上面的代碼,您將看到它發(fā)出警報(bào)before setInterval,然后after setInterval最終I am setInterval 在1秒(1000毫秒)后發(fā)出5次警報(bào),因?yàn)閟etTimeout在5秒鐘后清除了計(jì)時(shí)器,否則每1秒鐘您將收到I am setInterval無限次警報(bào)。


瀏覽器內(nèi)部如何運(yùn)作?


我將簡(jiǎn)要解釋。


要了解您必須了解JavaScript中的事件隊(duì)列。在瀏覽器中實(shí)現(xiàn)了一個(gè)事件隊(duì)列。每當(dāng)js中觸發(fā)一個(gè)事件時(shí),所有這些事件(例如click等)都會(huì)添加到此隊(duì)列中。當(dāng)您的瀏覽器沒有什么要執(zhí)行時(shí),它將從隊(duì)列中獲取一個(gè)事件并逐一執(zhí)行它們。


現(xiàn)在,當(dāng)您調(diào)用setTimeout或setInterval您的回調(diào)在瀏覽器中注冊(cè)一個(gè)計(jì)時(shí)器,并在給定時(shí)間到期后將其添加到事件隊(duì)列中,并最終javascript從隊(duì)列中獲取事件并執(zhí)行該事件。


發(fā)生這種情況是因?yàn)閖avascript引擎是單線程的,并且它們一次只能執(zhí)行一件事。因此,他們無法執(zhí)行其他javascript并跟蹤您的計(jì)時(shí)器。這就是為什么這些計(jì)時(shí)器是在瀏覽器中注冊(cè)的(瀏覽器不是單線程的),并且它可以跟蹤計(jì)時(shí)器并在計(jì)時(shí)器到期后在隊(duì)列中添加事件。


setInterval僅在這種情況下,會(huì)發(fā)生同樣的情況,即在指定的時(shí)間間隔后將事件一次又一次地添加到隊(duì)列中,直到事件被清除或刷新瀏覽器頁(yè)面。


注意


傳遞給這些函數(shù)的delay參數(shù)是執(zhí)行回調(diào)的最短延遲時(shí)間。這是因?yàn)樵谟?jì)時(shí)器到期后,瀏覽器將事件添加到要由JavaScript引擎執(zhí)行的隊(duì)列中,但是回調(diào)的執(zhí)行取決于您事件在隊(duì)列中的位置,并且由于引擎是單線程的,因此它將在其中執(zhí)行所有事件。隊(duì)列一個(gè)接一個(gè)。


因此,當(dāng)您的其他代碼阻塞線程并且沒有給它時(shí)間來處理隊(duì)列中的內(nèi)容時(shí),回調(diào)可能需要比指定的延遲時(shí)間更多的時(shí)間來專門調(diào)用。


正如我提到的,javascript是單線程。因此,如果您長(zhǎng)時(shí)間阻塞線程。


像這樣的代碼


while(true) { //infinite loop 

}

您的用戶可能會(huì)收到一條消息,指出頁(yè)面沒有響應(yīng)。


查看完整回答
反對(duì) 回復(fù) 2019-10-16
  • 3 回答
  • 0 關(guān)注
  • 1239 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)