JavaScript 下拉列表(drop-down lists)是一種常見的網頁表單元素。通過下拉列表,用戶可以在一組固定的選項中進行選擇,以達到更方便、快捷、準確地輸入數據的目的。在實際開發中,我們不僅需要熟練運用 JavaScript 制作下拉列表,還需要考慮如何控制它的位置,以達到更好的用戶體驗。
下拉列表的默認位置通常是與其所屬表單元素在同一級別,并緊貼在其下方,如下所示:
<form> <label for="fruit">請選擇一種水果:</label> <select id="fruit" name="fruit"> <option value="apple">蘋果</option> <option value="orange">橘子</option> <option value="banana">香蕉</option> </select> </form>
這時如果用戶在下拉列表中選擇了某一項,列表框就會展開,顯示所有選項。這時如果選項列的高度超過了一定的閾值,通常需要考慮調整它的位置,以避免遮擋其他重要的內容。
一種常見的調整方法是將下拉列表向上移動一定的距離。這可以通過計算選項列的高度以及其距離頁面底部的距離來實現。具體代碼如下:
// 將 option 展開位置調整到視口內 function adjustDropDownPosition () { var fruit = document.getElementById('fruit'), options = fruit.getElementsByTagName('option'), optionHeight = options[0] ? options[0].offsetHeight : 0, marginTop = 2; // 上方預留間隙 fruit.addEventListener('click', function (e) { var distance2Bottom = document.documentElement.clientHeight - (e.clientY + optionHeight * options.length), distance2Top = e.clientY - optionHeight * options.length - marginTop; if (distance2Bottom < 0 && distance2Top > 0) { fruit.style.marginTop = '-' + (optionHeight * options.length + marginTop) + 'px'; } else { fruit.style.marginTop = '0'; } }, false); } // 調用函數 adjustDropDownPosition();
代碼中我們使用了一個名為adjustDropDownPosition()
的函數來實現下拉列表位置的調整。首先我們獲取了<select>
元素以及它的<option>
元素。通過這些元素我們可以計算出每一個選項的高度,并將它們的總高度相加(注意前后都要留出一定的間隙),得到marginTop
。接著我們通過event.clientY
和瀏覽器窗口高度計算出選項列頂部距離視口底部的距離distance2Bottom
,以及選項列底部距離視口頂部的距離distance2Top
。如果選項列頂部距離視口底部的距離distance2Bottom
小于 0,并且選項列底部距離視口頂部的距離distance2Top
大于 0,那么我們就將<select>
元素的marginTop
屬性設為負值,以將其上移。如果兩個距離都不滿足條件,說明選項列可以正常展開,在這種情況下我們將marginTop
設為 0。
通過調整下拉列表位置,我們可以讓選項列始終在視口內,避免遮擋頁面其他元素。這對于網站開發來說是非常有用的技巧。