網(wǎng)站首頁 行業(yè)快訊 > 正文
什么叫事件(不為人知的秘聞懸案)
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屬性并再次按下按鈕。
事件轉(zhuǎn)發(fā)您還可以嘗試將事件名稱更改為其他名稱。例如,在Inner.svelte中將dispatch ('message')更改為dispatch ('myevent') ,并在App.svelte組件中將屬性名從on: message更改為on: myevent。
與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)系刪除!
猜你喜歡:
- 2022-09-20 男人惡心是什么病的前兆(惡心是什么病的前兆)
- 2022-09-20 山東財(cái)經(jīng)大學(xué)東方學(xué)院考研率怎么樣(山東財(cái)經(jīng)大學(xué)考研率是多少)
- 2022-09-20 廣西最早的大學(xué)叫什么大學(xué)(在桂林設(shè)立的廣西最早的大學(xué)是哪所大學(xué))
- 2022-09-20 小兒肺炎有5個(gè)常見癥狀嗎(小兒肺炎有5個(gè)常見癥狀)
- 2022-09-20 m是哪個(gè)服裝品牌的標(biāo)志(標(biāo)志為M的衣服是什么牌子的)
- 2022-09-20 什么叫正比例什么叫反比例舉例說明(什么叫反比例,舉個(gè)例子說明,)
- 2022-09-20 一包煙要多少根煙絲(一包煙要多少根)
- 2022-09-20 男人吃櫻桃對(duì)身體有什么好處(男人吃櫻桃有什么好處)
最新文章:
- 2023-07-02 怎樣挑選新鮮的豬肝?(怎么挑選新鮮豬肝 挑選新鮮豬肝的小技巧)
- 2023-07-02 木地板都有哪些種類(木地板的種類有哪些)
- 2023-07-02 白蠟?zāi)炯揖叩膬?yōu)缺點(diǎn)(松木家具的優(yōu)缺點(diǎn))
- 2023-07-02 怎么清洗窗簾布上的污垢(怎么清洗窗簾)
- 2023-07-02 世界上最可愛的小倉(cāng)鼠的樣子(可愛小倉(cāng)鼠的種類)
- 2023-07-02 小貓拉不出來屎怎么辦(小貓拉不出屎怎么辦)
- 2023-07-02 新飛小冰箱耗電量一天多少度(小冰箱耗電量一天多少度)
- 2023-07-02 公司注銷工業(yè)房產(chǎn)怎么辦手續(xù)(公司注銷工業(yè)房產(chǎn)怎么辦)
- 2023-07-02 鳳凰層到底好還是不好(鳳凰層是哪一層)
- 2023-07-02 馬桶寬度空間留多少(馬桶兩邊的空間大小是多少)
- 2023-07-02 如何訓(xùn)練貓咪小便(如何訓(xùn)練貓大小便)
- 2023-07-02 衛(wèi)生間吊頂防潮層做法圖集(衛(wèi)生間吊頂方法是什么)
- 2023-07-02 狗狗為什么總是流口水怎么辦(狗狗為什么愛流口水)
- 2023-07-02 臥室窗戶漏水由誰負(fù)責(zé)維修(臥室窗戶漏風(fēng)怎么辦)
- 2023-07-02 世界名貓大全(世界名貓你知道幾種)
- 2023-07-02 applewatchseries7和6對(duì)比(apple watch series 7和6的區(qū)別)