當前位置:首頁 » 網頁前端 » vue前端方法等待幾秒後執行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

vue前端方法等待幾秒後執行

發布時間: 2022-08-31 06:41:02

前端框架中wait用法

場景需要一次性調用多個介面或者進行多個事件同時執行。
Vue Wait是一個用於VUE、Vuex和Nuxt應用的復雜裝載器和進度管理組件。Vue Wait幫助管理頁面上的多個載入狀態(狀態之間沒有任何沖突。
在前端js 中,有些應用場景需要一次性調用多個介面或者進行多個事件同時執行 可以用promse.all 來操作,在flutter 中有類似Future.wait的用法。

⑵ vue $emit 調用父組件非同步方法,執行完畢後再執行子組件的某方法,如何實現

//可以使用回調的方法

//父頁面
//父頁面調用組件的html中添加事件@test="test"
methods:{
test(data,cab){
setTimeout(()=>{
//這里使用定時器模擬執行完方法
console.log(data)//這是傳遞過來的參數用於處理
data++
cab(data)//將處理完成的數據返回回去
},2000)
}
}

//子頁面

this.$emit('tset',1,(res)=>{
console.log(res)//2秒後會執行這一句列印2

})
//我們也可以用Promise的方法代替回調
methods:{
test(data){
returnnewPromise((resolve)=>{
setTimeout(()=>{
//這里使用定時器模擬執行完方法
console.log(data)//這是傳遞過來的參數用於處理
data++
resolve(data)//將處理完成的數據返回回去
},2000)
})
}
}

//子頁面

constres=awaitthis.$emit('tset',1)
console.log(res)//2秒後會執行這一句

⑶ 怎麽讓網頁JS等待幾秒再執行

和樓主一樣,當初也很反感setTimeout,後來搞懂原理後,用起來就舒服了。在JS中,setTimeout本來就干這事的,不用它還真不行,當然你也可以用JQuery裡面的delay方法,但它的原理也是用的setTimeout方法

方法A()
setTimeout(function(){
方法B()
},2000)

⑷ 使等待幾秒鍾前執行的代碼的應用程序嗎

第一個Show方法運行後,你的主程序還是會進行,你的代碼還是會繼續進行下去。此時,窗體還是彈出的。
第二個ShowDialog方法運行後,此時,彈出的一個窗體,你不將其關閉,那麼,主程序就會一直等待這個窗體關閉後,才執行後面的代碼。

所以,你只需要使用showdialog這個方法,即可達到你想要的結果。

那麼,如何才能讓彈出的窗體不改變呢?很簡單
你可以找到窗體的formcloseing事件,在這個事件中,有一個參數:e
這個e有一個屬性,就是e.handle,表示是否處理過這個事件了。
這個時候,如果你不想讓窗體關閉,你可以寫:
e.handle=true,那麼表示已經處理過窗體關閉的事件了。
註:有些情況,可能是:e.cancel=true

⑸ 頁面載入完成後等待一段時間在執行js的方法,時間如何設定

例如方法:
function test(){return 1;}
頁面載入完畢事件:
window.onload = function(){
setTimeout(test,1000);//1000毫秒=1秒後執行test方法
}
如果你使用jquery的話可以:
$(window).load(function(){
setTimeout(test,1000);//1000毫秒=1秒後執行test方法
});

setTimeout是只執行一次,重復執行使用setInterval

window.onload = function(){
setInterval(test,1000);//1000毫秒=1秒,每隔1秒執行一次test方法
}

⑹ c# 執行一個方法之後,等待幾秒,再執行另一個方法! 怎麼寫

用線程的話如樓上所說;也可以在你想要停頓的地方寫一個上萬次(不夠再加)的什麼都不做的循環。

⑺ Web前端如何使用Vue編寫一個長按指令

今天小編要跟大家分享的文章是關於Web前端如何使用Vue編寫一個長按指令?正在從事web前端工作的小夥伴們有沒有想過只需按住一個按鈕幾秒鍾就能在你的
Vue應用中觸發一個功能?


有沒有想過創建一個按鈕,按下一次就可以清除單次輸入(或者持續按住可以清除所有輸入)?


本文就是講解如何在按下(或者按住)一個按鈕時,既執行一個函數,又清除輸入。


首先,我會講解如何使用純JS實現。而後也會創建一個Vue指令。下面就讓我們一起來看一看吧。

一、原理


要實現長按,用戶需要按下並按住按鈕幾秒鍾。


想通過代碼模擬這一效果,我們需要在滑鼠「點擊」按下按鈕時,啟動一個計時器監聽用戶按下的時長,如果時間超過我們期望的時長,就執行相應的函數。


非常簡單!然而,我們需要知道用戶何時按住按鈕。


二、如何實現


當用戶點擊按鈕時,在點擊事件之前會觸發另外兩個事件:mousedown和mouseup。


當用戶按下按鈕時觸發mousedown事件,用戶松開按鈕時調用mouseup事件。


我們需要做的是:


1.mousedown事件觸發時,啟動計時器。


2.一旦mouseup事件在預期的2秒前被觸發,就清除計時器,不要執行相應的函數。就當作一個普通的點擊事件。


只要計時器在我們預設的時間內沒有被清除,即mouseup
事件沒有被觸發——那麼可以斷定用戶沒有釋放按鈕。因此,可以判定為一次長按,可以執行關聯的函數。


三、實踐


讓我們深入代碼,完成這一功能。


首先,我們必須定義三件事,即:


1.一個變數用於存儲計時器。


2.一個啟動功能函數,用於啟動計時器。


3.一個取消功能函數,用於取消計時器。


1、變數


這個變數主要用來保存setTimeout的值,以便當滑鼠mouseup事件觸發時我們可以取消它。


letpressTimer=null;


我們把變數值設置為null是為了在執行取消操作前,檢查這個變數的值判斷當前是否有一個正在運行的計時器。


2、啟動函數


這個函數包括一個setTimeout,它是JavaScript中的一個基本方法,允許在特定時間之後執行一個函數。


注意,click事件執行的過程中,會觸發另外兩個事件。但是我們需要啟動計時器的是mousedown
事件。如果只是點擊事件,不需要啟動計時器。//創建計時器(1s之後執行函數)

letstart=(e)=>{

//如果是點擊事件,不啟動計時器

if(e.type==='click'&&e.button!==0){

return;

}

//在啟動一個定時器之前確保沒有正在運行的計時器

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行任務!!!

},1000)

}

}

3、取消函數


這個函數見名知意,用來取消啟動函數創建的setTimeout。


要取消setTimeout,可以使用JavaScript中的clearTimeout方法,它主要用來清除setTimeout()
方法設置的計時器。


在使用clearTimeout之前,需要檢查pressTimer變數是否為null。如果沒有為
ull,意味著有一個正在運行的計時器。因此,我們需要先清除它,並且將pressTimer變數設置為null。letcancel=(e)=>{

//檢查pressTimer的值是否為null

if(pressTimer!==null){

clearTimeout(pressTimer)

pressTimer=null

}

}

一旦mouseup事件觸發,這個函數就會被調用。


4、設置觸發器


剩下的就是將事件監聽器添加到想要長按效果的按鈕上。


addEventListener("mousedown",start);


addEventListener("click",cancel);


以上代碼合到一起是這樣://定義變數

letpressTimer=null;

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行任務!!!

},1000)

}

}

//停止計時器

letcancel=(e)=>{

//檢查是否有正在運行的計時器

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//選擇id為longPressButton的元素

letel=document.getElementById('longPressButton');

//添加事件監聽器

el.addEventListener("mousedown",start);

//長按事件取消,取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

5、用Vue指令包裝


創建Vue指令時,可以創建全局或局部指令,本文中,我們採用全局指令。


首先,我們必須聲明自定義指令的名稱。


Vue.diective('longpress',{


})


這就注冊了一個名為v-longpress的全局自定義指令。


接下來,我們添加帶參數的bind鉤子函數,它允許我們引用指令綁定的元素,獲取傳遞給指令的值,並標識指令使用的組件。Vue.directive('longpress',{

bind:function(el,binding,vNode){

}

})

接下來,我們在bind函數中添加長按功能的代碼。Vue.directive('longpress',{

bind:function(el,binding,vNode){

//定義變數

letpressTimer=null;

//定義函數處理程序

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行任務!!!

},1000)

}

}

//取消計時器

letcancel=(e)=>{

//檢查是否有正在運行的計時器

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//添加事件監聽器

el.addEventListener("mousedown",start);

//取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

}

})

接下來,我們需要添加一個函數來運行傳遞給longpress指令的方法。Vue.directive('longpress',{

bind:function(el,binding,vNode){

//定義變數

letpressTimer=null;

//定義函數處理程序

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行函數

handler();

},1000)

}

}

//停止計時器

letcancel=(e)=>{

//檢查是否有正在運行的計時器

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//運行函數

consthandler=(e)=>{

//執行傳遞給指令的方法

binding.value(e)

}

//添加事件監聽器

el.addEventListener("mousedown",start);

//取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

}

})

現在,可以在Vue應用中使用這個指令了,除非使用者給指令傳入的值不是一個函數。因此,我們需要通過警告反饋給使用者。


為了反饋給使用者,我們在bind函數中添加了以下內容://確保提供的表達式是函數

if(typeofbinding.value!=='function'){

//獲取組件名稱

constcompName=vNode.context.name;

//將警告傳遞給控制台

letwarn=`[longpress:]providedexpression'${binding.expression}'isnotafunction,buthastobe`;

if(compName){warn+=`Foundincomponent'${compName}'`}

console.warn(warn);

}

最後,如果這個指令也適用於觸屏設備,那會是極好的。因此,我們添加了touchstart、touchend和touchcancel
事件監聽器。


最終代碼如下:Vue.directive('longpress',{

bind:function(el,binding,vNode){

//確保提供的表達式是函數

if(typeofbinding.value!=='function'){

//獲取組件名稱

constcompName=vNode.context.name;

//將警告傳遞給控制台

letwarn=`[longpress:]providedexpression'${binding.expression}'isnotafunction,buthastobe`;

if(compName){warn+=`Foundincomponent'${compName}'`}

console.warn(warn);

}

//定義變數

letpressTimer=null;

//定義函數處理程序

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行函數

handler();

},1000)

}

}

//取消計時器

letcancel=(e)=>{

//檢查計時器是否有值

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//運行函數

consthandler=(e)=>{

//執行傳遞給指令的方法

binding.value(e)

}

//添加事件監聽器

el.addEventListener("mousedown",start);

el.addEventListener("touchstart",start);

//取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

el.addEventListener("touchend",cancel);

el.addEventListener("touchcancel",cancel);

}

})

現在可以在Vue組件里使用了: