摘要:最近做了一個物體可拖拽的需求,由于在手機(jī)上的支持性不是很好,就利用了系列事件,改變的進(jìn)行位移,從而達(dá)到物體跟隨手指移動的效果。但是發(fā)現(xiàn)了有以下提示雖然最終找到了原因是升級版本具體提給了,但是卻讓我陷入了思考。
最近做了一個物體可拖拽的需求,由于drag-and-drop在手機(jī)上的支持性不是很好,就利用了touch系列事件,改變transform的translate進(jìn)行位移,從而達(dá)到物體跟隨手指移動的效果。
但是發(fā)現(xiàn)了有以下提示
[Violation] Added non-passive event listener to a scroll-blocking "touchstart" event. Consider marking event handler as "passive" to make the page more responsive.
雖然最終找到了原因是升級taro1.3版本(具體提issue給taro了),但是卻讓我陷入了思考。
可滑動節(jié)點(diǎn)應(yīng)該是passive相信大家在使用react開發(fā)的時候,如果在touch事件里添加e.preventDefault(),控制臺會報以下的錯誤:
react-dom.development.js:1458 [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive
這是由于當(dāng)監(jiān)聽touch事件時,react默認(rèn)已經(jīng)將addEventListener的第三個參數(shù)加上了passive:true,為了可滑動節(jié)點(diǎn)在滑動的時候不需要等待js執(zhí)行的時候就進(jìn)行滑動的動作,可以看以下touchmove受preventDefault的影響->傳送門
從視頻里可以看出來,當(dāng)沒有加passive: true時,頁面滑動會延遲,甚至出現(xiàn)卡頓。
在可滑動節(jié)點(diǎn)上禁止touch的默認(rèn)行為因為react默認(rèn)開啟了passive,這讓我們無法去通過js層面去禁止可滑動節(jié)點(diǎn)touch的默認(rèn)行為,但是在一些場景下我們禁止掉滑動,通過自己的邏輯來實現(xiàn)“滑動效果”,這時候該怎么做呢?
這里還有一個法寶:
在css屬性中,有那么一個東西叫做touch-action。
touch-action 用于設(shè)置觸摸屏用戶如何操縱元素的區(qū)域(例如,瀏覽器內(nèi)置的縮放功能)。
當(dāng)touch-action設(shè)置為none的時候,瀏覽器將不能對該節(jié)點(diǎn)進(jìn)行任何的觸摸行為,比如說雙擊圖片放大這種行為也可以禁止。所以我們可以設(shè)置touch-action: none,代替preventDefault禁止滑動。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105839.html
摘要:先來看有贊做的類似的拖拽組件,它引用的庫封裝了拖拽的時候跟隨鼠標(biāo)的影子成為,是自動生成的。利用鼠標(biāo)事件拖拽更流暢優(yōu)化之后的拖拽顯然比示例的順暢很多,不會有種吃力拖動的感覺。拖動過程中也能很明顯地看出當(dāng)前拖拽的元素。 為什么棄用Html5 drag Api 之前我也用的Drag Api寫了一個draggable組件,使用起來總覺得體驗有點(diǎn)不好。 先來看有贊做的類似的拖拽UI組件,它引用...
摘要:發(fā)展原生拖放的發(fā)展大致可分為三個階段。在的實例基礎(chǔ)上,進(jìn)一步制定了拖放的規(guī)范。也根據(jù)規(guī)范實現(xiàn)了原生拖放功能。被拖動的元素在放置目標(biāo)范圍內(nèi)移動時,會持續(xù)觸發(fā)該事件。參考資料拖放操作拖拽操作拖拽類型列表高級程序設(shè)計第版第章腳本編程原生拖放 發(fā)展 原生拖放的發(fā)展大致可分為三個階段:IE4、IE5+、HTML5。 IE4 是最早在網(wǎng)頁中引入 JavaScript 拖放功能的,當(dāng)時只有圖像和選中...
閱讀 3758·2023-04-25 20:00
閱讀 3109·2021-09-22 15:09
閱讀 505·2021-08-25 09:40
閱讀 3412·2021-07-26 23:38
閱讀 2201·2019-08-30 15:53
閱讀 1097·2019-08-30 13:46
閱讀 2788·2019-08-29 16:44
閱讀 2043·2019-08-29 15:32