大香蕉综合在线观看视频-日本在线观看免费福利-欧美激情一级欧美精品性-综合激情丁香久久狠狠

好房網(wǎng)

網(wǎng)站首頁 行業(yè)快訊 > 正文

什么叫事件(不為人知的秘聞懸案)

2022-06-02 00:08:12 行業(yè)快訊 來源:
導(dǎo)讀 目前大家應(yīng)該是對(duì)什么叫事件(不為人知的秘聞懸案)比較感興趣的,所以今天好房網(wǎng)小編CC就來為大家整理了一些關(guān)于什么叫事件(不為人知的秘
目前大家應(yīng)該是對(duì)什么叫事件(不為人知的秘聞懸案)比較感興趣的,所以今天好房網(wǎng)小編CC就來為大家整理了一些關(guān)于什么叫事件(不為人知的秘聞懸案)方面的相關(guān)知識(shí)來分享給大家,希望大家會(huì)喜歡哦。

什么叫事件(不為人知的秘聞懸案)

DOM事件

在下面的事例你將看到,您可以使用on:事件名來監(jiān)聽元素上的任何事件:

<divon:mousemove={handleMousemove}>Themousepositionis{m.x}x{m.y}</div>

完整代碼:

<script>letm={x:0,y:0};functionhandleMousemove(event){m.x=event.clientX;m.y=event.clientY;}</script><divon:mousemove={handleMousemove}>Themousepositionis{m.x}x{m.y}</div><style>div{width:100%;height:100%;}</style>
內(nèi)聯(lián)處理

您還可以使用內(nèi)聯(lián)聲明事件處理程序:

<divon:mousemove="{e=>m={x:e.clientX,y:e.clientY}}">Themousepositionis{m.x}x{m.y}</div>

引號(hào)是可選的,但在某些環(huán)境中,它們有助于提高語法突顯。

在某些框架中,您可能會(huì)看到由于性能原因而避免使用內(nèi)聯(lián)事件處理程序的建議,特別是在循環(huán)中。這個(gè)建議并不適用于Svelte,編譯器總是會(huì)做正確的事情,不管你選擇哪種形式。

事件修飾符

DOM事件處理程序可以使用修飾符來改變其行為。例如,帶有once修飾符的處理程序只運(yùn)行一次:

<script>functionhandleClick(){alert('nomorealerts')}</script><buttonon:click|once={handleClick}>Clickme</button>

修飾符的完整列表:

preventDefault:在運(yùn)行處理程序之前。例如,對(duì)于客戶端窗體處理非常有用。

stopPropagation:阻止事件到達(dá)下一個(gè)元素。冒泡。

passive:提高觸摸/滾輪事件的滾動(dòng)性能(Svelte 會(huì)在安全的地方自動(dòng)添加滾動(dòng))

nonpassive:可以查看使用 passive 改善的滾屏性能

capture:添加事件監(jiān)聽器時(shí)使用事件捕獲模式,即元素自身觸發(fā)的事件先在此處理,然后才交由內(nèi)部元素進(jìn)行處理。

once:只響應(yīng)一次

self:只當(dāng)在event.target是當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù),即事件不是從內(nèi)部元素觸發(fā)的。

你可以多個(gè)修飾符同時(shí)使用,例如:on:click|once|capture={...}

組件事件

組件也可以分發(fā)事件。為此,它們必須創(chuàng)建一個(gè)事件分發(fā)器:

<script>import{createEventDispatcher}from'svelte';constdispatch=createEventDispatcher();functionsayHello(){dispatch('message',{text:'Hello!'});}</script>

當(dāng)組件首次實(shí)例化時(shí),必須調(diào)用createEventDispatcher。不可以在后續(xù)的函數(shù)中使用,例如setTimeout回調(diào)。這會(huì)使事件分發(fā)與組件實(shí)例綁定起來。

注意,由于on:message指令,App組件正在監(jiān)聽I(yíng)nner組件發(fā)送的消息。這個(gè)指令是一個(gè)前綴為on:的屬性,后面跟著我們要分發(fā)的事件名(在本例中是message)。

完整代碼:

Inner.sevlte

<script>import{createEventDispatcher}from'svelte';constdispatch=createEventDispatcher();functionsayHello(){dispatch('message',{text:'Hello!'});}</script><buttonon:click={sayHello}>Clicktosayhello</button>

App.sevlte

<script>importInnerfrom'./Inner.svelte';functionhandleMessage(event){alert(event.detail.text);}</script><Inneron:message={handleMessage}/>

如果沒有on:message這個(gè)屬性,消息仍然會(huì)被發(fā)送,但是應(yīng)用程序不會(huì)對(duì)此作出反應(yīng)。您可以嘗試刪除on: message屬性并再次按下按鈕。

您還可以嘗試將事件名稱更改為其他名稱。例如,在Inner.svelte中將dispatch ('message')更改為dispatch ('myevent') ,并在App.svelte組件中將屬性名從on: message更改為on: myevent。

事件轉(zhuǎn)發(fā)

與DOM事件不同,組件事件不會(huì)冒泡。如果希望監(jiān)聽某個(gè)嵌套深度很深的組件上的事件,則中間組件必須轉(zhuǎn)發(fā)該事件。

在本例中,我們有與前面相同的App.svelte和Inner.svelte,但是現(xiàn)在有一個(gè)Outer.svelte組件包含< inner/>。


版權(quán)說明: 本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!


標(biāo)簽: