Android觸摸事件和mousedown、mouseup、click事件之間的關(guān)系
一、移動(dòng)端 觸摸事件
ontouchstart、ontouchmove、ontouchend、ontouchcancel
1、Touch事件簡(jiǎn)介
pc上的web頁(yè)面鼠 標(biāo)會(huì)產(chǎn)生onmousedown、onmouseup、onmouseout、onmouseover、onmousemove的事件,但是在移動(dòng)終端如iphone、ipod Touch、ipad上的web頁(yè)面觸屏?xí)r會(huì)產(chǎn)生ontouchstart、ontouchmove、ontouchend、ontouchcancel事件,分別對(duì)應(yīng)了觸屏開(kāi)始、拖拽及完成觸屏事件和取消。
- 當(dāng)按下手指時(shí),觸發(fā)ontouchstart;
- 當(dāng)移動(dòng)手指時(shí),觸發(fā)ontouchmove;
- 當(dāng)移走手指時(shí),觸發(fā)ontouchend。
- 當(dāng)一些更高級(jí)別的事件發(fā)生的時(shí)候(如電話接入或者彈出信息)會(huì)取消當(dāng)前的touch操作,即觸發(fā)ontouchcancel。一般會(huì)在ontouchcancel時(shí)暫停游戲、存檔等操作。
2、Touch事件與Mouse事件的出發(fā)關(guān)系
在觸屏操作后,手指提起的一剎那(即發(fā)生ontouchend后),系統(tǒng)會(huì)判斷接收到事件的element的內(nèi)容是否被改變,如果內(nèi)容被改變,接下來(lái)的事 件都不會(huì)觸發(fā),如果沒(méi)有改變,會(huì)按照mousedown,mouseup,click的順序觸發(fā)事件。特別需要提到的是,只有再觸發(fā)一個(gè)觸屏事件時(shí),才會(huì) 觸發(fā)上一個(gè)事件的mouseout事件。
二、mousedown、mouseup、click事件之間的關(guān)系
點(diǎn)擊select標(biāo)簽元素的時(shí)候,會(huì)彈出下拉。然而當(dāng)option中沒(méi)有元素時(shí),就不希望彈出下拉(比如在某些瀏覽器中,點(diǎn)擊select會(huì)默認(rèn)出一個(gè)罩層效果,而此時(shí)沒(méi)有數(shù)據(jù)選擇的話,彈出比較不友好)。
首先想到是利用click事件控制,發(fā)現(xiàn)仍然會(huì)有下拉出現(xiàn)...實(shí)際這個(gè)是mousedown事件控制的。
這里就說(shuō)明下click和mousedown、mouseup。規(guī)范要求,只有在同一個(gè)元素上相繼觸發(fā) mousedown 和 mouseup 事件,才會(huì)觸發(fā) click 事件;如果 mousedown 或 mouseup 中的一個(gè)被取消,就不會(huì)觸發(fā) click 事件。
這句話也很好理解,有時(shí)候我們?cè)跒g覽網(wǎng)頁(yè)時(shí),鼠標(biāo)在一個(gè)按鈕或者鏈接上按下了,但是突然卻又改了主意,此時(shí)我們一般會(huì)移開(kāi)鼠標(biāo),在另一個(gè)空白處松開(kāi)鼠標(biāo)哈哈~相信這個(gè)大家經(jīng)常上網(wǎng)都有經(jīng)驗(yàn)。實(shí)際這個(gè)就利用了click事件要求在同一個(gè)元素相繼觸發(fā)mousedown 和 mouseup 事件。
<script type="text/javascript"> var len = 0; $('#sel').mousedown(function(){ if(len == 0){// 模擬一下select標(biāo)簽沒(méi)數(shù)據(jù)的標(biāo)志 console.log('mousedown'); return false; } }).mouseup(function(){ console.log('mouseup'); }).click(function(){ console.log('click'); }); </script>
點(diǎn)擊后發(fā)現(xiàn),log的順序是:mousedown-->mouseup-->click
當(dāng)在mousedown中return false后,就不會(huì)彈出下拉或者罩層了...
這里再介紹下鼠標(biāo)的各個(gè)事件:
DOM3 級(jí)事件中定義了9個(gè)鼠標(biāo)事件,簡(jiǎn)介如下。
click:在用戶單擊主鼠標(biāo)按鈕(一般是左邊的按鈕)或者按下回車(chē)鍵時(shí)觸發(fā)。這一點(diǎn)對(duì)確保易訪問(wèn)性很重要,意味著onclick事件處理程序既可以通過(guò)鍵盤(pán)也可以通過(guò)鼠標(biāo)執(zhí)行。
dblclick:在用戶雙擊主鼠標(biāo)按鈕(一般是左邊的按鈕)時(shí)觸發(fā)。從技術(shù)上說(shuō),這個(gè)事件并不是DOM2級(jí)事件規(guī)范中規(guī)定的,但鑒于它得到了廣泛支持,所以DOM3 級(jí)事件將其納入了標(biāo)準(zhǔn)。
mousedown:在用戶按下了任意鼠標(biāo)按鈕時(shí)觸發(fā)。不能通過(guò)鍵盤(pán)觸發(fā)這個(gè)事件。
mouseenter:在鼠標(biāo)光標(biāo)從元素外部首次移動(dòng)到元素范圍之內(nèi)時(shí)觸發(fā)。這個(gè)事件不冒泡,而且在光標(biāo)移動(dòng)到后代元素上不會(huì)觸發(fā)。DOM2級(jí)事件并沒(méi)有定義這個(gè)事件,但 DOM3級(jí)事件將它納入了規(guī)范。IE、Firefox 9+和 Opera支持這個(gè)事件。
mouseleave:在位于元素上方的鼠標(biāo)光標(biāo)移動(dòng)到元素范圍之外時(shí)觸發(fā)。這個(gè)事件不冒泡,而且在光標(biāo)移動(dòng)到后代元素上不會(huì)觸發(fā)。DOM2級(jí)事件并沒(méi)有定義這個(gè)事件,但 DOM3級(jí)事件將它 納入了規(guī)范。IE、Firefox 9+和 Opera支持這個(gè)事件。
mousemove:當(dāng)鼠標(biāo)指針在元素內(nèi)部移動(dòng)時(shí)重復(fù)地觸發(fā)。不能通過(guò)鍵盤(pán)觸發(fā)這個(gè)事件。
mouseout:在鼠標(biāo)指針位于一個(gè)元素上方,然后用戶將其移入另一個(gè)元素時(shí)觸發(fā)。又移入的另一個(gè)元素可能位于前一個(gè)元素的外部,也可能是這個(gè)元素的子元素。不能通過(guò)鍵盤(pán)觸發(fā)這個(gè)事件。
mouseover:在鼠標(biāo)指針位于一個(gè)元素外部,然后用戶將其首次移入另一個(gè)元素邊界之內(nèi)時(shí)觸 發(fā)。不能通過(guò)鍵盤(pán)觸發(fā)這個(gè)事件。
mouseup:在用戶釋放鼠標(biāo)按鈕時(shí)觸發(fā)。不能通過(guò)鍵盤(pán)觸發(fā)這個(gè)事件。 頁(yè)面上的所有元素都支持鼠標(biāo)事件。除了 mouseenter 和 mouseleave,所有鼠標(biāo)事件都會(huì)冒泡, 也可以被取消,而取消鼠標(biāo)事件將會(huì)影響瀏覽器的默認(rèn)行為。取消鼠標(biāo)事件的默認(rèn)行為還會(huì)影響其他事 件,因?yàn)槭髽?biāo)事件與其他事件是密不可分的關(guān)系。
若有不足請(qǐng)多多指教!希望給您帶來(lái)幫助!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Android開(kāi)發(fā)入門(mén)之Appwidget用法分析
這篇文章主要介紹了Android開(kāi)發(fā)入門(mén)之Appwidget用法,較為詳細(xì)的分析了App Widget的概念、功能、創(chuàng)建、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-07-07Android NDK開(kāi)發(fā)簡(jiǎn)單程序分享(Hello Word!)
本文主要對(duì)Android NDK開(kāi)發(fā)簡(jiǎn)單程序(Hello Word!)的實(shí)現(xiàn)步驟及方法進(jìn)行詳細(xì)介紹。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12RecycleView實(shí)現(xiàn)item側(cè)滑刪除與拖拽
這篇文章主要為大家詳細(xì)介紹了RecycleView實(shí)現(xiàn)item側(cè)滑刪除與拖拽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11Android利用Chronometer實(shí)現(xiàn)倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了Android利用Chronometer實(shí)現(xiàn)倒計(jì)時(shí)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android App中ViewPager與Fragment結(jié)合的一些問(wèn)題解決
這篇文章主要介紹了Android App中ViewPager與Fragment結(jié)合的一些問(wèn)題解決,重點(diǎn)講解了如何更新及替換ViewPager中的Fragment,需要的朋友可以參考下2016-03-03android底部彈出iOS7風(fēng)格對(duì)話選項(xiàng)框(QQ對(duì)話框)--第三方開(kāi)源之IOS_Dialog_Library
這篇文章主要介紹了android底部彈出iOS7風(fēng)格對(duì)話選項(xiàng)框(QQ對(duì)話框)--第三方開(kāi)源--IOS_Dialog_Library的相關(guān)資料,需要的朋友可以參考下2015-11-11Android5.0以上版本錄屏實(shí)現(xiàn)代碼(完整代碼)
這篇文章主要介紹了Android5.0以上版本錄屏實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01Kotlin示例講解標(biāo)準(zhǔn)函數(shù)with與run和apply的使用
Kotlin的標(biāo)準(zhǔn)函數(shù)是指 Standard.kt 文件中定義的函數(shù),任何Kotlin代碼都可以自由地調(diào)用所有的標(biāo)準(zhǔn)函數(shù)。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-08-08