摘要:一個手勢庫預覽的基本邏輯添加個一個是當隱藏的時候打開隱藏的觸發開關一個是本身對把手和進行進行定位到界面的右側邊緣調整和把手的樣式這里把手主要是要設置背景色為透明具體樣式看下面代碼用分別給把手和添加拖拽手勢當隱藏時拖拽把手向右通過返回的每
any-touch 一個手勢庫
demo預覽
添加2個div, 一個是當drawer隱藏的時候打開隱藏的觸發開關, 一個是drawer本身.
對把手和drawer進行進行fixed定位到界面的右側邊緣.
調整drawer和把手的樣式, 這里把手主要是要設置背景色為透明, 具體樣式看下面代碼.
用any-touch分別給把手和drawer添加pan(拖拽)手勢.
當drawer隱藏時, 拖拽把手向右, 通過pan返回的deltaX(每次觸發拖拽的x偏移)進行drawer的拖拽, 讓其向右側移動以顯示.
向左拖拽drawer, 讓其隱藏, 當隱藏部分占drawer寬度超過一半的時候, 松開手, 那么抽屜自動隱藏到左側, 反之, drawer完全顯示.
注: 本文僅用來講解drawer的基本原理, 還有很多邊界處理的細節大家可以后續自行補充作為練習.
代碼鐵皮飯盒
github : any-touch.com-drawer-handler { height: 100vh; background: rgba(252, 252,252, 0); width: 45px; position: fixed; z-index: 2; top: 0; left: 0; } .com-drawer { padding: 30px; height: 100vh; min-width: 10vw; position: fixed; top: 0; left: 0; z-index: 3; box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.1); .avator { touch-action: none; display: block; width: 60%; border-radius: 100%; margin: 15px auto; } .github { padding: 5px 15px; background: #000; color: #fff; text-decoration: none; display: block; text-align: center; border-radius: 6px; margin-top: 60px; } } .animated { transition: all 200ms; }// 抽屜部分 let offsetX = 0; const elDrawer = document.getElementById("j-com-drawer"); const minX = 0 - elDrawer.offsetWidth; const at = new AnyTouch(elDrawer); at.on("panmove", ({ deltaX }) => { offsetX += deltaX; if (0 <= offsetX) { offsetX = 0; } elDrawer.style.transform = `translateX(${offsetX}px)`; }); at.on("panend", () => { offsetX = minX / 2 < offsetX ? 0 : minX; elDrawer.style.transform = `translateX(${offsetX}px)`; elDrawer.classList.toggle(animated, true); }); // 把手 const elHandler = document.getElementById("j-com-drawer-handler"); const atHandler = new AnyTouch(elHandler, { isPreventDefault: false }); atHandler.on("panmove", ({deltaX}) => { offsetX+= deltaX; offsetX = 0 < offsetX ? 0 : offsetX; elDrawer.style.transform = `translateX(${offsetX}px)`; });關于vue和react版本這里是用純js實現的版本, 如果用vue或者react代碼量會更少, 有興趣的同學可以自行實現或者需要的人多, 我會再寫個vue版本的例子(react我也不會, 我得找同事幫寫個demo, 嘿). 太晚了,寫的倉促, 如果錯誤請指出, 我會立即修改.
typescriptany-touch由typescript編寫, 如有興趣歡迎訪問我的其他幾篇關于代碼講解的文章:
用typescript開發手勢庫 - (1)web開發常用手勢有哪些?
用TypeScript開發手勢庫 - (2)tsconfig.json & rollup.config.js & npx
用TypeScript開發手勢庫 - (3)統一化Mouse和Touch事件文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103069.html
相關文章
用TypeScript開發手勢庫 - (2)tsconfig.json & rollup.c
摘要:一個手勢庫往期目錄用開發手勢庫開發常用手勢有哪些用開發手勢庫統一化和事件不到行用實現一個標題有點長今天的標題有點長但不難講的都是工具配置和使用就個知識點如何配置如何配置使用運行項目所在的命令注為了閱讀體驗我把為什么不用放在的本文的最 showImg(https://segmentfault.com/img/remote/1460000018610388?w=800&h=210); an...
用TypeScript開發手勢庫 - (2)tsconfig.json & rollup.c
摘要:一個手勢庫往期目錄用開發手勢庫開發常用手勢有哪些用開發手勢庫統一化和事件不到行用實現一個標題有點長今天的標題有點長但不難講的都是工具配置和使用就個知識點如何配置如何配置使用運行項目所在的命令注為了閱讀體驗我把為什么不用放在的本文的最 showImg(https://segmentfault.com/img/remote/1460000018610388?w=800&h=210); an...
用TypeScript開發手勢庫 - (3)統一化Mouse和Touch事件
摘要:一個手勢庫往期目錄用開發手勢庫開發常用手勢有哪些用開發手勢庫開發常用手勢有哪些不到行用實現一個簡單看下架構實現輸入格式統一為了同時支持鼠標和設備我們第一步把種設備產生數據統一化統一化后的數據我們統一叫他個基礎個快捷包含個字段個基礎字 showImg(https://segmentfault.com/img/remote/1460000018610388?w=800&h=210); an...
用typescript開發手勢庫 - (1)web開發常用手勢有哪些?
這只是個開頭 說在最前面,本文是一個系列文章的開頭, 這個系列里我會講如何用typescript開發一款支持pc和手機端的手勢庫any-touch, 以及通過jest讓你的代碼測試覆蓋率100%. showImg(https://segmentfault.com/img/bVbp3B0?w=936&h=246); 目錄 用TypeScript開發手勢庫 - (2)tsconfig.json & r...
發表評論
0條評論
閱讀 994·2023-04-25 15:42
閱讀 3584·2021-11-02 14:38
閱讀 2886·2021-09-30 09:48
閱讀 1419·2021-09-23 11:22
閱讀 3379·2021-09-06 15:02
閱讀 3186·2021-09-04 16:41
閱讀 607·2021-09-02 15:41
閱讀 2012·2021-08-26 14:13