將球移動到球場上
重要性:5
將球移動到球場上,並點選。如下所示
需求
- 球的中心應在點選時出現在指標下方(如果可能,不要超出球場邊緣)。
- 歡迎使用 CSS 動畫。
- 球不得超出球場界線。
- 當頁面捲動時,任何東西都不應該中斷。
註解
- 程式碼也應該適用於不同的球和場地大小,不受任何固定值約束。
- 使用屬性
event.clientX/event.clientY
來取得點擊座標。
首先,我們需要選擇一個定位球的方法。
我們無法對它使用 position:fixed
,因為捲動頁面會將球從場地移開。
所以我們應該使用 position:absolute
,並讓 field
本身定位,以使定位真正穩固。
然後,球將相對於場地定位
#field {
width: 200px;
height: 150px;
position: relative;
}
#ball {
position: absolute;
left: 0; /* relative to the closest positioned ancestor (field) */
top: 0;
transition: 1s all; /* CSS animation for left/top makes the ball fly */
}
接下來,我們需要指定正確的 ball.style.left/top
。它們現在包含相對於場地的座標。
以下是圖片
我們有 event.clientX/clientY
– 點擊的相對於視窗的座標。
若要取得點擊的相對於場地的 left
座標,我們可以減去場地的左邊緣和邊框寬度
let left = event.clientX - fieldCoords.left - field.clientLeft;
通常,ball.style.left
表示「元素(球)的左邊緣」。因此,如果我們指定該 left
,則球的邊緣(而非中心)會在滑鼠游標下方。
我們需要將球向左移動一半寬度,向上移動一半高度,才能使其置中。
因此,最後的 left
會是
let left = event.clientX - fieldCoords.left - field.clientLeft - ball.offsetWidth/2;
垂直座標使用相同的邏輯計算。
請注意,當我們存取 ball.offsetWidth
時,必須知道球的寬度/高度。應該在 HTML 或 CSS 中指定。