使用 Stimulus 建立可調整大小的導航
本文最初發佈於 Rails Designer——Rails 應用程式的 UI 元件庫,使用 ViewComponent 構建,使用 Tailwind CSS 設計並使用 Hotwire 增強。
如果您的應用程式有側邊欄導航(這在大多數螢幕足夠寬的情況下很常見),那麼調整其大小可能是一個很好的添加功能。進行此自訂可讓您的使用者根據手邊的任務調整畫面。也許他們想專注於編寫下一個大作品,或者也許他們分割了螢幕,使預設寬度有點太寬。
無論什麼原因,使用 JavaScript 以及 Stimulus 都可以輕鬆調整側邊欄導航(或任何其他元件)的大小。讓我們開始吧。讓我們在 HTML 中設定基礎知識:
<main data-controller="resizer" class="flex"> <nav data-resizer-target="container" class="relative w-1/6"> <!-- Imagine some nav items here --> </nav> <div class="w-5/6"> <p>Content for your app here</p> </div> </main>
上面的 HTML 使用的是 Tailwind CSS 類,但這對於這個範例來說不是必需的。當然,你可以隨心所欲地設計它。
現在是刺激控制器。正如您從上面注意到的,handler(可以拖曳調整大小的元素)沒有添加到 HTML 中,而是會注入 JS。
import { Controller } from "@hotwired/stimulus" // Connects to data-controller="resizer" export default class extends Controller { static targets = ["container"]; static values = { resizing: { type: Boolean, default: false }, maxWidth: { type: Number, default: 360 } // in px }; connect() { this.containerTarget.insertAdjacentHTML("beforeend", this.#handler); } // private get #handler() { return ` <span data-action="mousedown->resizer#setup" class="absolute top-0 w-1 h-full bg-gray-200 -right-px cursor-col-resize hover:bg-gray-300" ></span> ` } }
這將在導航元素(絕對定位)旁邊注入處理程序。它還具有在 mousedown 事件上觸發 setup() 的操作。讓我們添加它。
export default class extends Controller { // … connect() { this.containerTarget.insertAdjacentHTML("beforeend", this.#handler); this.resize = this.#resize.bind(this); this.stop = this.#stop.bind(this); } setup() { this.resizingValue = true; document.addEventListener('mousemove', this.resize); document.addEventListener('mouseup', this.stop); } // … }
這是怎麼回事?為什麼不分別在 mousemove 和 mouseup 事件上加上 #resize() 和 #stop() 呢?這是為了確保當 resize 和 stop 作為事件偵聽器呼叫時 this 引用控制器實例,保留對控制器屬性和方法的存取。
讓我們新增私有函數#resize() 和#stop()。
export default class extends Controller { // … // private #resize(event) { if (!this.resizingValue) return; const width = event.clientX - this.containerTarget.offsetLeft; if (width <= this.maxWidthValue) { this.containerTarget.style.width = `${width}px`; } else { this.containerTarget.style.width = `${this.maxWidthValue}px`; } } #stop() { this.resizingValue = false; document.removeEventListener('mousemove', this.resize); document.removeEventListener('mouseup', this.stop); } // … }
#resize() 函數根據滑鼠位置 (event.clientX) 計算容器的新寬度並更新容器的寬度,確保其不超過允許的最大寬度(在值中設定)。 #stop() 函數透過將 resizingValue 設為 false 並刪除事件偵聽器來停止調整大小程序。
如果您轉到瀏覽器,您現在可以調整瀏覽器的大小,並且不會使其比設定的 maxWidth 值(預設為 360px)更寬。
太棒了! ?這就是使用 Stimulus 調整應用程式中元素大小所需的全部內容。從這裡,您可以透過將值儲存在使用者設定中(例如透過Redis)來改進,以便在瀏覽器之間保持相同,或者將其儲存在瀏覽器的LocalStorage 中以儲存該會話(Rails Designer 透過為此提供JS 實用程式來幫助您)。
以上是使用 Stimulus 建立可調整大小的導航的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。
