DOM 一些邊緣但蠻好用的 API

懶人包。

element.getBoundingClientRect()

取得元素的寬高與位置資訊

1
2
3
4
5
6
7
8
<style>
div {
width: 400px;
padding: 10px;
border: 10px;
}
</style>
<div>yoyoyo</div>
1
console.log(document.querySelector('div').getBoundingClientRect())

Output:

1
2
3
4
5
6
7
8
9
10
{
x: 8
y: 8
top: 8
left: 8
right: 448
bottom: 66.4000015258789
width: 440
height: 58.400001525878906
}

此方法回傳的寬高是採用 border-box 的計算方式,意思就是算到 boder 為止。

而座標部分是相對於 viewport

  • x / left 元素的左上角與 viewport 的水平距離
  • y / top 元素的左上角與 viewport 的垂直距離
  • right / bottom 元素的右下角距離 viewport 的水平垂直距離

window.scrollTo()

設定滾軸要滾到哪裡

1
2
3
4
5
6
7
8
9
10
11
12
/* 閉包,把變數 index 藏起來 */
function scrollDown() {
let index = 1
return function callback() {
window.scrollTo({
top: index * 4000
})
index++
}
}
/* 每點一下按鈕就往下滾 4000px */
document.querySelector('button').onclick = scrollDown()

scrollTo-01

也可以設成這樣,就會有 smooth 的效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function scrollDown() {
let index = 1
return function callback() {
/*
top: y 軸
left: x 軸
behavior: smooth, instant, auto
*/
window.scrollTo({
top: 4000 * index,
behavior: 'smooth'
})
index++
}
}
document.querySelector('button').onclick = scrollDown()

scrollTo-02

offsetTop / offsetLeft

附註:如果不知道實際 parent 是誰?可以用 offsetParent 來查詢。

  1. 找到第一個 position 非 static 的 parent 並計算距離
  2. parent 的 padding 會計算進去

offset

原始碼可以到 Codepen 上參考

clientWidth / clientHeight

根據該元素的實際大小來計算寬與高,會包含 padding,但不包含 border 和 scrollbar。

client

原始碼可以到 Codepen 上參考

網址相關

  • window.location.reload() 重新整理目前的頁面
  • window.location.assign(url) 跳轉到新的頁面,會留下歷史紀錄(可以按上一頁)
  • window.location.replace(url) 更新目前的頁面,不會留下歷史紀錄(不能按上一頁)
  • window.location.search 查看網址的 query string
mentor-program-day43 善用跳脫字元,避免不合法的輸入內容
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×