*Zapiski z pamiętnika*
Możesz myśleć o mnie, co chcesz, ale niczego nie udowodnisz syknęła teściowa, patrząc zimno na synową.
No dobrze, Halinko, posłuchaj uważnie. Możesz mnie osądzać, ale dowodów nie masz. Świadków brak, a Marek ufa tylko mnie. jeżeli chcesz zostać w naszej rodzinie, musisz się pogodzić z rolą: sprzątanie, gotowanie i zamknięte usta. Jasne?
Halina wyszła za Marka kilka lat temu. Niedługo potem urodził się im syn, Jacek, który dziś ma już sześć lat. Oboje pracowali, by utrzymać dom i uniknąć biedy.
Żyli skromnie, ale zgodnie: Halina ogarniała mieszkanie, zajmowała się dzieckiem i pracowała jako księgowa w małej firmie, a Marek był inżynierem. Wszystko zdawało się układać dobrze.
Pewnego dnia u matki Marka, Bronisławy, zdiagnozowano chorob# 16 – Mouse Move Shadow
## 任務介紹
實作文字陰影隨滑鼠移動的效果
## 步驟
1. 取得目標元素
2. 監聽滑鼠移動事件
3. 計算陰影位置
4. 設定陰影效果
## 詳細步驟
### 1. 取得目標元素
„`javascript
const hero = document.querySelector(’.hero’);
const text = hero.querySelector(’h1′);
„`
### 2. 監聽滑鼠移動事件
„`javascript
hero.addEventListener(’mousemove’, shadow);
„`
### 3. 計算陰影位置
„`javascript
function shadow(e) {
const { offsetWidth: width, offsetHeight: height } = hero;
let { offsetX: x, offsetY: y } = e;
if (this !== e.target) {
x = x + e.target.offsetLeft;
y = y + e.target.offsetTop;
}
const xWalk = Math.round((x / width) * walk – walk / 2);
const yWalk = Math.round((y / height) * walk – walk / 2);
}
„`
### 4. 設定陰影效果
„`javascript
text.style.textShadow = `
${xWalk}px ${yWalk}px 0 rgba(255,0,255,0.7),
${xWalk * -1}px ${yWalk}px 0 rgba(0,255,255,0.7),
${yWalk}px ${xWalk * -1}px 0 rgba(0,255,0,0.7),
${yWalk * -1}px ${xWalk}px 0 rgba(0,0,255,0.7)
`;
„`
## 詳細說明
### 1. 取得目標元素
„`javascript
const hero = document.querySelector(’.hero’);
const text = hero.querySelector(’h1′);
„`
– `hero` 是整個滑鼠移動的區域
– `text` 是要套用陰影效果的文字
### 2. 監聽滑鼠移動事件
„`javascript
hero.addEventListener(’mousemove’, shadow);
„`
– 在 `hero` 區域監聽滑鼠移動事件,觸發 `shadow` 函式
### 3. 計算陰影位置
„`javascript
function shadow(e) {
const { offsetWidth: width, offsetHeight: height } = hero;
let { offsetX: x, offsetY: y } = e;
if (this !== e.target) {
x = x + e.target.offsetLeft;
y = y + e.target.offsetTop;
}
const xWalk = Math.round((x / width) * walk – walk / 2);
const yWalk = Math.round((y / height) * walk – walk / 2);
}
„`
– `offsetWidth` 和 `offsetHeight` 取得 `hero` 的寬高
– `offsetX` 和 `offsetY` 取得滑鼠在 `hero` 中的座標
– 如果滑鼠移動在 `h1` 上,則需要加上 `h1` 的 `offsetLeft` 和 `offsetTop`
– `walk` 是陰影的最大偏移量,預設為 100
– `xWalk` 和 `yWalk` 是根據滑鼠位置計算出的陰影偏移量
### 4. 設定陰影效果
„`javascript
text.style.textShadow = `
${xWalk}px ${yWalk}px 0 rgba(255,0,255,0.7),
${xWalk * -1}px ${yWalk}px 0 rgba(0,255,255,0.7),
${yWalk}px ${xWalk * -1}px 0 rgba(0,255,0,0.7),
${yWalk * -1}px ${xWalk}px 0 rgba(0,0,255,0.7)
`;
„`
– `textShadow` 可以設定多個陰影效果
– 每個陰影效果都有不同的偏移方向和顏色
## 總結
這個練習讓我學到如何計算滑鼠位置並套用到文字陰影效果上,也學到 `textShadow` 的用法














