ÙØªØØ±ÙÙ Ø§ÙØ¹Ùاصر Ø ÙØ¬Ø¨ Ø£Ù ÙÙÙ٠عÙÙ Ø¯Ø±Ø§ÙØ© Ø¨Ø§ÙØ¥ØØ¯Ø§Ø«Ùات.
تتعا٠٠٠عظ٠طر٠JavaScript ٠ع Ø£ØØ¯ ÙØ¸Ø§Ù Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات:
- ** ÙØ³Ø¨Ø© Ø¥Ù٠اÙÙØ§Ùذة ** â ØªØ´Ø¨Ù âØ§ÙÙ ÙØ¶Ø¹: Ø«Ø§Ø¨Øªâ Ø Ù ØØ³Ùبة ٠٠أعÙ٠اÙÙØ§Ùذة / Ø§ÙØØ§ÙØ© اÙÙØ³Ø±Ù. Â Â Â Â â Ø³ÙØ´ÙØ± Ø¥ÙÙ ÙØ°Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات ÙÙ âclientX / clientYâ Ø ÙØ³ÙØµØ¨Ø Ø³Ø¨Ø¨ ÙØ°Ø§ Ø§ÙØ§Ø³Ù ÙØ§Ø¶ØÙا ÙØ§ØÙÙØ§ Ø Ø¹ÙØ¯Ù ا ÙØ¯Ø±Ø³ خصائص Ø§ÙØØ¯Ø«.
- ** باÙÙØ³Ø¨Ø© Ø¥Ù٠اÙÙ
Ø³ØªÙØ¯ ** â ÙØ´Ø¨Ù âØ§ÙÙ
ÙØ¶Ø¹: Ù
Ø·ÙÙâ Ù٠جذر اÙÙ
Ø³ØªÙØ¯ Ø Ù
ØØ³ÙØ¨ÙØ§ Ù
٠أعÙ٠اÙÙ
Ø³ØªÙØ¯ / Ø§ÙØØ§ÙØ© اÙÙØ³Ø±Ù.
Â Â Â Â â Ø³ÙØ´ÙØ± ÙÙÙ
pageX / pageY.
Ø¹ÙØ¯Ù ا ÙØªÙ ØªÙ Ø±ÙØ± Ø§ÙØµÙØØ© Ø¥ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ© Ø Ø¨ØÙØ« ÙÙÙÙ Ø§ÙØ±ÙÙ Ø§ÙØ¹ÙÙÙ / Ø§ÙØ£Ùسر ٠٠اÙÙØ§Ùذة ÙÙ Ø¨Ø§ÙØ¶Ø¨Ø· أعÙÙ / ÙØ³Ø§Ø± Ø§ÙØ²Ø§ÙÙØ© Ø ÙØ¥Ù ÙØ°Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات تساÙÙ Ø¨Ø¹Ø¶ÙØ§ Ø§ÙØ¨Ø¹Ø¶. ÙÙÙ٠بعد ØªØºÙØ±Ø§Øª اÙÙ Ø³ØªÙØ¯ Ø ØªØªØºÙØ± Ø§ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙØ³Ø¨ÙØ© ÙÙØ¹Ùاصر Ø ØÙØ« ØªØªØØ±Ù Ø§ÙØ¹Ùاصر عبر اÙÙØ§Ùذة Ø Ø¨ÙÙ٠ا ØªØ¸Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙØ³Ø¨ÙØ© ÙÙÙ Ø³ØªÙØ¯Ø§Øª Ù٠ا ÙÙ.
ÙÙ ÙØ°Ù Ø§ÙØµÙرة Ø ÙØ£Ø®Ø° ÙÙØ·Ø© Ù٠اÙÙ Ø³ØªÙØ¯ ÙÙØ¹Ø±Ø¶ Ø¥ØØ¯Ø§Ø«ÙØ§ØªÙØ§ ÙØ¨Ù Ø§ÙØªÙ Ø±ÙØ± (ÙØ³Ø§Ø±) ÙØ¨Ø¹Ø¯Ù (ÙÙ ÙÙ):
Ø¹ÙØ¯ ØªÙ Ø±ÙØ± اÙÙ Ø³ØªÙØ¯:
pageYâ Ø¸Ùت Ø§ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙØ³Ø¨ÙØ© ÙÙÙ Ø³ØªÙØ¯Ø§Øª Ù٠ا ÙÙ Ø ÙØªÙ ØØ³Ø§Ø¨Ùا ٠٠أعÙ٠اÙÙ Ø³ØªÙØ¯ (ØªÙ Ø§ÙØªÙ Ø±ÙØ± Ø§ÙØ¢Ù).- `Ø§ÙØ¹Ù ÙÙ '- ØªØºÙØ±Øª Ø¥ØØ¯Ø§Ø«Ùات اÙÙØ§Ùذة (Ø£ØµØ¨Ø Ø§ÙØ³ÙÙ Ø£ÙØµØ±) Ø ØÙØ« Ø§ÙØªØ±Ø¨Øª ÙÙØ³ اÙÙÙØ·Ø© ٠٠أعÙ٠اÙÙØ§Ùذة.
Ø¥ØØ¯Ø§Ø«Ùات Ø§ÙØ¹Ùصر: getBoundingClientRect
ØªÙØ±Ø¬Ø¹ Ø§ÙØ·Ø±ÙÙØ© elem.getBoundingClientRect () Ø¥ØØ¯Ø§Ø«Ùات اÙÙØ§Ùذة ÙÙ
ستطÙÙ ØµØºÙØ± ÙØ´ØªÙ
٠عÙÙ âelemâ ÙÙØ§Ø¦Ù [DOMRect] Ù
دÙ
ج (https://www.w3.org/TR/geometry-1/#domrect ) ص٠دراسÙ.
خصائص DOMRect Ø§ÙØ±Ø¦ÙØ³ÙØ©:
x / yâ Ø¥ØØ¯Ø§Ø«Ùات X / Y ÙØ£ØµÙ اÙ٠ستطÙ٠باÙÙØ³Ø¨Ø© ÙÙÙØ§Ùذة ØØ§Ùعرض / Ø§ÙØ§Ø±ØªÙØ§Ø¹â Ø¹Ø±Ø¶ / Ø§Ø±ØªÙØ§Ø¹ اÙ٠ستطÙÙ (ÙÙ Ù٠أ٠ÙÙÙÙ Ø³Ø§ÙØ¨Ùا).
Ø¨Ø§ÙØ¥Ø¶Ø§ÙØ© Ø¥Ù٠ذÙÙ Ø ÙÙØ§Ù خصائص Ù Ø´ØªÙØ©:
أعÙÙ / أسÙÙâ Ø¥ØØ¯Ø§Ø«Ù Y ÙØØ§ÙØ© اÙ٠ستطÙÙ Ø§ÙØ¹ÙÙÙ / Ø§ÙØ³ÙÙÙ Ø- âÙØ³Ø§Ø± / ÙÙ ÙÙâ â Ø¥ØØ¯Ø§Ø«Ù X ÙØØ§ÙØ© اÙ٠ستطÙÙ Ø§ÙØ£Ùسر / Ø§ÙØ£ÙÙ Ù.
عÙ٠سبÙ٠اÙÙ Ø«Ø§Ù Ø Ø§ÙÙØ± ÙÙÙ ÙØ°Ø§ Ø§ÙØ²Ø± ÙØ±Ø¤ÙØ© Ø¥ØØ¯Ø§Ø«Ùات ÙØ§ÙذتÙ:
إذا ÙÙ
ت بتÙ
Ø±ÙØ± Ø§ÙØµÙØØ© ÙØªÙØ±Ø§Ø±ÙØ§ Ø ÙØ³ØªÙØ§ØØ¸ Ø£ÙÙ Ù
ع ØªØºÙØ± Ù
ÙØ¶Ø¹ Ø§ÙØ²Ø± اÙÙØ³Ø¨Ù ÙÙÙØ§Ùذة Ø ØªØªØºÙØ± Ø¥ØØ¯Ø§Ø«Ùات ÙØ§ÙØ°ØªÙØ§ (y / top / bottom إذا ÙÙ
ت Ø¨Ø§ÙØªÙ
Ø±ÙØ± عÙ
ÙØ¯ÙÙØ§) Ø£ÙØ¶Ùا.
Ø¥ÙÙÙÙ
ØµÙØ±Ø© ÙØ§ØªØ¬ elem.getBoundingClientRect ():
ÙÙ
ا ØªØ±Ù Ø ÙØµÙ x / y Ùwidth / height اÙÙ
ستطÙ٠باÙÙØ§Ù
Ù. ÙÙ
ÙÙ ØØ³Ø§Ø¨ Ø§ÙØ®ØµØ§Ø¦Øµ اÙÙ
Ø´ØªÙØ© Ù
ÙÙØ§ بسÙÙÙØ©:
left = xtop = yright = x + widthbottom = y + height
ÙØ±Ø¬Ù اÙÙ ÙØ§ØØ¸Ø©:
- ÙØ¯ تÙÙÙ Ø§ÙØ¥ØØ¯Ø§Ø«Ùات ÙØ³Ùر Ø¹Ø´Ø±ÙØ© Ø Ù
Ø«Ù
10.5. ÙØ°Ø§ Ø·Ø¨ÙØ¹Ù Ø ÙØ³ØªØ®Ø¯Ù اÙÙ ØªØµÙØ داخÙÙÙØ§ اÙÙØ³Ùر ÙÙ Ø§ÙØØ³Ø§Ø¨Ø§Øª. ÙØ§ ÙØªØ¹Ù٠عÙÙÙØ§ ØªÙØ±ÙØ¨ÙØ§ Ø¹ÙØ¯ Ø§ÙØ¶Ø¨Ø· عÙÙstyle.left / top. - ÙØ¯ تÙÙÙ Ø§ÙØ¥ØØ¯Ø§Ø«Ùات Ø³ÙØ¨ÙØ©. عÙ٠سبÙ٠اÙÙ Ø«Ø§Ù Ø Ø¥Ø°Ø§ ØªÙ ØªÙ Ø±ÙØ± Ø§ÙØµÙØØ© بØÙØ« ÙÙÙÙ âelemâ Ø£Ø¹Ù٠اÙÙØ§Ùذة Ø§ÙØ¢Ù Ø ÙØ¥Ù âelem.getBoundingClientRect (). topâ ÙÙ Ø³ÙØ¨Ù.
Ø±ÙØ§Ø¶Ùا Ø ÙØªÙ
تعرÙ٠اÙÙ
ستطÙ٠بشÙÙ ÙØ±Ùد بÙÙØ·Ø© Ø§ÙØ¨Ø¯Ø§ÙØ© `` (س Ø Øµ) `ÙÙØ§ÙÙ Ø§ÙØ§ØªØ¬Ø§Ù` (Ø§ÙØ¹Ø±Ø¶ ÙØ§ÙØ§Ø±ØªÙØ§Ø¹) `. ÙØ°Ø§ ÙØ¥Ù Ø§ÙØ®ØµØ§Ø¦Øµ Ø§ÙØ¥Ø¶Ø§ÙÙØ© اÙÙ
Ø´ØªÙØ© ÙÙ ÙÙØ³ÙÙÙØ© ÙÙ Ø§ÙØªØ¹Ø§Ù
Ù Ø¨ÙØ§.
Ù
٠اÙÙØ§ØÙØ© اÙÙÙÙØ© Ø Ù
٠اÙÙ
Ù
Ù٠أ٠ÙÙÙÙ "Ø§ÙØ¹Ø±Ø¶ / Ø§ÙØ§Ø±ØªÙاع" Ø³Ø§ÙØ¨Ùا Ø Ù
Ù
ا ÙØ³Ù
Ø ÙÙÙ
ستطÙÙ "اÙÙ
ÙØ¬Ù" Ø Ø¹Ù٠سبÙ٠اÙÙ
Ø«Ø§Ù ÙØªÙ
Ø«ÙÙ Ø§Ø®ØªÙØ§Ø± اÙÙ
Ø§ÙØ³ Ù
ع Ø¨Ø¯Ø§ÙØ© ÙÙÙØ§ÙØ© تÙ
ÙØ¶Ø¹ Ø¹ÙØ§Ù
Ø© عÙÙÙØ§ بشÙ٠صØÙØ.
تعÙÙ ÙÙÙ
"Ø§ÙØ¹Ø±Ø¶ / Ø§ÙØ§Ø±ØªÙاع" Ø§ÙØ³ÙØ¨ÙØ© أ٠اÙÙ
ستطÙÙ ÙØ¨Ø¯Ø£ Ù
Ù Ø§ÙØ²Ø§ÙÙØ© Ø§ÙØ³ÙÙÙØ© اÙÙÙ
ÙÙ Ø«Ù
"ÙÙÙ
Ù" Ø¥Ù٠اÙÙØ³Ø§Ø±.
Ø¥ÙÙÙ Ù
ستطÙÙ ÙØØªÙ٠عÙÙ "عرض" Ù "Ø§Ø±ØªÙØ§Ø¹" Ø³Ø§ÙØ¨ (عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø "عرض = -200" Ø "Ø§Ø±ØªÙØ§Ø¹ = -100"):

ÙÙ
ا ØªØ±Ù Ø `اÙÙØ³Ø§Ø± / Ø§ÙØ£Ø¹ÙÙ` ÙØ§ ÙØ³Ø§ÙÙ` x / y` ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ©.
Ù
٠اÙÙØ§ØÙØ© Ø§ÙØ¹Ù
ÙÙØ© Ø ÙÙØ±Ø¬Ø¹ `elem.getBoundingClientRect ()` دائÙ
ÙØ§ Ø§ÙØ¹Ø±Ø¶ / Ø§ÙØ§Ø±ØªÙاع اÙÙ
ÙØ¬Ø¨ Ø ÙÙÙØ§ ÙØ°Ùر `Ø§ÙØ¹Ø±Ø¶ / Ø§ÙØ§Ø±ØªÙاع` Ø§ÙØ³Ùب٠ÙÙØ· ÙÙ٠تÙÙÙ
ÙÙ
اذا ÙØ°Ù Ø§ÙØ®ØµØ§Ø¦Øµ Ø§ÙØªÙ تبد٠Ù
ÙØ±Ø±Ø© ÙÙØ³Øª Ù٠اÙÙØ§Ùع Ù
ÙØ±Ø±Ø©.
x/yÙØ°ÙÙ ÙÙ
ÙÙÙØ§ Ø¥Ù
ا Ø¥ÙØ´Ø§Ø¡ Ù
ÙÙ Ù
تعدد (Ø£Ø¶Ù ØØ±ÙÙÙØ§ ÙÙ DomRect.prototype) Ø£Ù ÙÙØ· استخداÙ
أعÙÙ / ÙØ³Ø§Ø± Ø ÙØ£ÙÙØ§ دائÙ
ÙØ§ Ù
ا تÙÙÙ Ù
ث٠x / y ÙÙØ¹Ø±Ø¶ / Ø§Ø±ØªÙØ§Ø¹ Ø¥ÙØ¬Ø§Ø¨Ù Ø Ø®Ø§ØµØ© ÙÙ ÙØªÙجة elem.getBoundingClientRect ().
ÙÙØ§Ù ØªØ´Ø§Ø¨Ù ÙØ§Ø¶Ø بÙÙ Ø§ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙØ³Ø¨ÙØ© ÙÙÙØ§Ùذة Ù "اÙÙ
ÙØ¶Ø¹: ثابت" ÙÙ CSS.
ÙÙÙÙ ÙÙ ÙØ¶Ø¹ CSS Ø ØªØ¹ÙÙ Ø®Ø§ØµÙØ© `right` اÙÙ
Ø³Ø§ÙØ© Ù
Ù Ø§ÙØØ§ÙØ© اÙÙÙ
ÙÙ Ø ÙØªØ¹ÙÙ Ø®Ø§ØµÙØ©` bottom` اÙÙ
Ø³Ø§ÙØ© Ù
Ù Ø§ÙØØ§ÙØ© Ø§ÙØ³ÙÙÙØ©.
إذا ÙØ¸Ø±Ùا ÙÙØ· Ø¥ÙÙ Ø§ÙØµÙرة Ø£Ø¹ÙØ§Ù Ø ÙÙ
ÙÙÙØ§ Ø£Ù ÙØ±Ù Ø£ÙÙ ÙÙ JavaScript ÙÙØ³ ÙØ°ÙÙ. ÙØªÙ
ØØ³Ø§Ø¨ جÙ
ÙØ¹ Ø¥ØØ¯Ø§Ø«Ùات اÙÙÙØ§Ùذ Ù
Ù Ø§ÙØ²Ø§ÙÙØ© Ø§ÙØ¹ÙÙÙØ© اÙÙØ³Ø±Ù Ø Ø¨Ù
ا Ù٠ذÙÙ ÙØ°Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات.
elementFromPoint (xØ y)
ÙØ¤Ø¯Ù استدعاء "document.elementFromPoint (xØ y)Ø¥Ù٠إرجاع Ø§ÙØ¹Ùصر Ø§ÙØ£Ùثر ØªØ¯Ø§Ø®ÙØ§Ù ÙÙ Ø¥ØØ¯Ø§Ø«Ùات اÙÙØ§Ùذة(xØ y)`.
Ø§ÙØµÙغة ÙÙ:
let elem = document.elementFromPoint(x, y);
عÙ٠سبÙ٠اÙÙ Ø«Ø§Ù Ø ÙØ¨Ø±Ø² Ø§ÙØ±Ù ز Ø£Ø¯ÙØ§Ù ÙÙØ®Ø±Ø¬ Ø¹ÙØ§Ù Ø© Ø§ÙØ¹Ùصر اÙÙ ÙØ¬Ùد Ø§ÙØ¢Ù ÙÙ Ù ÙØªØµÙ اÙÙØ§Ùذة:
let centerX = document.documentElement.clientWidth / 2;
let centerY = document.documentElement.clientHeight / 2;
let elem = document.elementFromPoint(centerX, centerY);
elem.style.background = 'red';
alert(elem.tagName);
ÙØ¸Ø±Ùا ÙØ£ÙÙ ÙØ³ØªØ®Ø¯Ù Ø¥ØØ¯Ø§Ø«Ùات اÙÙØ§Ùذة Ø ÙÙØ¯ ÙØ®ØªÙÙ Ø§ÙØ¹Ùصر Ø§Ø¹ØªÙ Ø§Ø¯ÙØ§ عÙÙ Ù ÙØ¶Ø¹ Ø§ÙØªÙ Ø±ÙØ± Ø§ÙØØ§ÙÙ.
````عÙÙØ§Ù ØªØØ°ÙرÙ="باÙÙØ³Ø¨Ø© Ø¥ÙÙ Ø¥ØØ¯Ø§Ø«Ùات خارج اÙÙØ§Ùذة Ø ÙÙØ±Ø¬Ø¹elementFromPoint اÙÙÙÙ
Ø© Ø§ÙØ®Ø§ÙÙØ©Ùا تعÙ
Ù Ø§ÙØ·Ø±ÙÙØ©document.elementFromPoint (xØ y) Ø¥ÙØ§ إذا ÙØ§Ùت "(xØ y)` داخ٠اÙÙ
ÙØ·ÙØ© اÙÙ
Ø±Ø¦ÙØ©.
إذا ÙØ§Ùت Ø£Ù Ù
Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات Ø³ÙØ¨ÙØ© Ø£Ù ØªØ¬Ø§ÙØ²Øª عرض / Ø§Ø±ØªÙØ§Ø¹ اÙÙØ§Ùذة Ø ÙØªÙرجع null.
Ø¥ÙÙ٠خطأ ÙÙ ÙØ°Ø¬Ù ÙØ¯ ÙØØ¯Ø« إذا ÙÙ ÙØªØÙÙ Ù ÙÙ:
let elem = document.elementFromPoint(x, y);
// if the coordinates happen to be out of the window, then elem = null
elem.style.background = ''; // Error!
## استخداÙ
اÙÙØ¶Ø¹ "Ø§ÙØ«Ø§Ø¨Øª"
Ù
عظÙ
اÙÙÙØª ÙØØªØ§Ø¬ Ø¥ØØ¯Ø§Ø«Ùات Ù
Ù Ø£Ø¬Ù ÙØ¶Ø¹ Ø´ÙØ¡ Ù
ا.
ÙØ¥Ø¸Ùار Ø´ÙØ¡ باÙÙØ±Ø¨ Ù
Ù Ø¹ÙØµØ± Ø ÙÙ
ÙÙÙØ§ استخداÙ
`getBoundingClientRect` ÙÙØØµÙ٠عÙÙ Ø¥ØØ¯Ø§Ø«ÙØ§ØªÙ Ø Ø«Ù
CSS` position` Ù
ع `left / top` (Ø£Ù` right / bottom`).
عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø ØªØ¹Ø±Ø¶ Ø§ÙØ¯Ø§ÙØ© `createMessageUnder (elemØ html)` Ø£Ø¯ÙØ§Ù Ø§ÙØ±Ø³Ø§ÙØ© ØªØØª `elem`:
```js
let elem = document.getElementById("coords-show-mark");
function createMessageUnder(elem, html) {
// create message element
let message = document.createElement('div');
// better to use a css class for the style here
message.style.cssText = "position:fixed; color: red";
// Ø¹ÙØ¯ تعÙÙÙ Ø¥ØØ¯Ø§Ø«Ùات Ø ÙØ§ ØªÙØ³Ù "px"!
let coords = elem.getBoundingClientRect();
message.style.left = coords.left + "px";
message.style.top = coords.bottom + "px";
message.innerHTML = html;
return message;
}
/// Ø§ÙØ§Ø³ØªØ®Ø¯Ø§Ù
:
// أضÙÙ ÙÙ
دة 5 Ø«ÙØ§ÙÙ ÙÙ document
let message = createMessageUnder(elem, 'Hello, world!');
document.body.append(message);
setTimeout(() => message.remove(), 5000);
```
```online
Click the button to run it:
<button id="coords-show-mark">Button with id="coords-show-mark", the message will appear under it</button>
```
ÙÙ
Ù٠تعدÙ٠اÙÙÙØ¯ ÙØ¥Ø¸Ùار Ø§ÙØ±Ø³Ø§ÙØ© عÙ٠اÙÙØ³Ø§Ø± Ø Ø§ÙÙÙ
ÙÙ Ø Ø£Ø¯ÙØ§Ù Ø ØªØ·Ø¨ÙÙ Ø§ÙØ±Ø³ÙÙ
اÙÙ
ØªØØ±ÙØ© CSS "ØªØªÙØ§Ø´Ù ÙÙÙ" ÙÙÙÙ
جرا. ÙØ°Ø§ سÙÙ Ø ÙØ£Ù ÙØ¯ÙÙØ§ جÙ
ÙØ¹ Ø¥ØØ¯Ø§Ø«Ùات ÙØ£ØØ¬Ø§Ù
Ø§ÙØ¹Ùصر.
ÙÙÙ ÙØ§ØØ¸ Ø§ÙØªÙاصÙ٠اÙÙ
ÙÙ
Ø©: Ø¹ÙØ¯Ù
ا ÙØªÙ
تÙ
Ø±ÙØ± Ø§ÙØµÙØØ© Ø ØªØªØ¯ÙÙ Ø§ÙØ±Ø³Ø§ÙØ© Ø¨Ø¹ÙØ¯Ùا Ø¹Ù Ø§ÙØ²Ø±.
ÙØ§Ùسبب ÙØ§Ø¶Ø: ÙØ¹ØªÙ
د Ø¹ÙØµØ± Ø§ÙØ±Ø³Ø§ÙØ© عÙÙ "اÙÙ
ÙØ¶Ø¹: ثابت" Ø ÙØ°ÙÙ ÙØ¨ÙÙ ÙÙ ÙÙØ³ Ù
ÙØ§Ù اÙÙØ§Ùذة Ø£Ø«ÙØ§Ø¡ تÙ
Ø±ÙØ± Ø§ÙØµÙØØ© Ø¨Ø¹ÙØ¯Ùا.
ÙØªØºÙÙØ± ذÙÙ Ø ÙØØªØ§Ø¬ Ø¥Ù٠استخداÙ
Ø§ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙ
Ø³ØªÙØ¯Ø© Ø¥Ù٠اÙÙ
Ø³ØªÙØ¯Ø§Øª Ù "اÙÙ
ÙØ¶Ø¹: Ù
Ø·ÙÙ".
## Ø¥ØØ¯Ø§Ø«Ùات اÙÙ
Ø³ØªÙØ¯ [#getCoords]
تبدأ Ø§ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙ
تعÙÙØ© باÙÙ
Ø³ØªÙØ¯ Ù
Ù Ø§ÙØ²Ø§ÙÙØ© Ø§ÙØ¹ÙÙÙØ© اÙÙØ³Ø±Ù Ù
٠اÙÙ
Ø³ØªÙØ¯ Ø ÙÙÙØ³ اÙÙØ§Ùذة.
ÙÙ CSS Ø ØªØªÙØ§ÙÙ Ø¥ØØ¯Ø§Ø«Ùات اÙÙØ§Ùذة Ù
ع "اÙÙ
ÙØ¶Ø¹: ثابت" Ø ÙÙ ØÙÙ Ø£Ù Ø¥ØØ¯Ø§Ø«Ùات اÙÙ
Ø³ØªÙØ¯ تشب٠"اÙÙ
ÙØ¶Ø¹: Ù
Ø·ÙÙ" ÙÙ Ø§ÙØ£Ø¹ÙÙ.
ÙÙ
ÙÙÙØ§ استخداÙ
"اÙÙ
ÙØ¶Ø¹: Ù
Ø·ÙÙ" Ù "أعÙÙ / ÙØ³Ø§Ø±" ÙÙØ¶Ø¹ Ø´ÙØ¡ Ù
ا ÙÙ Ù
ÙØ§Ù Ù
عÙÙ Ù
٠اÙÙ
Ø³ØªÙØ¯ Ø Ø¨ØÙØ« ÙØ¨ÙÙ ÙÙØ§Ù Ø£Ø«ÙØ§Ø¡ تÙ
Ø±ÙØ± Ø§ÙØµÙØØ©. ÙÙÙÙØ§ Ø¨ØØ§Ø¬Ø© Ø¥ÙÙ Ø§ÙØ¥ØØ¯Ø§Ø«Ùات Ø§ÙØµØÙØØ© Ø£ÙÙØ§Ù.
ÙØ§ ØªÙØ¬Ø¯ طرÙÙØ© ÙÙØ§Ø³ÙØ© ÙÙØØµÙ٠عÙÙ Ø¥ØØ¯Ø§Ø«Ùات اÙÙ
Ø³ØªÙØ¯ ÙØ¹Ùصر. ÙÙÙÙ Ù
Ù Ø§ÙØ³ÙÙ ÙØªØ§Ø¨ØªÙا.
ÙØªÙ
ØªÙØµÙÙ ÙØ¸Ø§Ù
Ù Ø§ÙØ¥ØØ¯Ø§Ø«Ùات Ø¨ÙØ§Ø³Ø·Ø© Ø§ÙØµÙغة:
- `pageY` =` clientY` + Ø§Ø±ØªÙØ§Ø¹ Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ±Ø£Ø³Ù اÙÙØ§Ø¨Ù ÙÙØªÙ
Ø±ÙØ± Ù
٠اÙÙ
Ø³ØªÙØ¯.
- `pageX` =` clientX` + عرض Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ£ÙÙ٠اÙÙØ§Ø¨Ù ÙÙØªÙ
Ø±ÙØ± Ù
٠اÙÙ
Ø³ØªÙØ¯.
ستأخذ Ø§ÙØ¯Ø§ÙØ© `getCoords (elem)` Ø¥ØØ¯Ø§Ø«Ùات اÙÙØ§Ùذة Ù
Ù `elem.getBoundingClientRect ()` ÙØªØ¶ÙÙ Ø§ÙØªÙ
Ø±ÙØ± Ø§ÙØØ§Ù٠إÙÙÙØ§:
```js
// get document coordinates of the element
function getCoords(elem) {
let box = elem.getBoundingClientRect();
return {
top: box.top + window.pageYOffset,
right: box.right + window.pageXOffset,
bottom: box.bottom + window.pageYOffset,
left: box.left + window.pageXOffset
};
}
```
إذا استخدÙ
ÙØ§Ùا Ù٠اÙÙ
Ø«Ø§Ù Ø£Ø¹ÙØ§Ù Ù
ع "اÙÙ
ÙØ¶Ø¹: Ù
Ø·ÙÙ" Ø ÙØ³ØªØ¸Ù Ø§ÙØ±Ø³Ø§ÙØ© باÙÙØ±Ø¨ Ù
Ù Ø§ÙØ¹Ùصر Ø¹ÙØ¯ Ø§ÙØªÙ
Ø±ÙØ±.
ÙØ¸ÙÙØ© `createMessageUnder` اÙÙ
Ø¹Ø¯ÙØ©:
```js
function createMessageUnder(elem, html) {
let message = document.createElement('div');
message.style.cssText = "position:absolute; color: red";
let coords = getCoords(elem);
message.style.left = coords.left + "px";
message.style.top = coords.bottom + "px";
message.innerHTML = html;
return message;
}
```
## Ù
ÙØ®Øµ
ØªØØªÙ٠أ٠ÙÙØ·Ø© ÙÙ Ø§ÙØµÙØØ© عÙÙ Ø¥ØØ¯Ø§Ø«Ùات:
1. باÙÙØ³Ø¨Ø© Ø¥Ù٠اÙÙØ§Ùذة - `elem.getBoundingClientRect ()`.
2. باÙÙØ³Ø¨Ø© Ø¥Ù٠اÙÙ
Ø³ØªÙØ¯ - `elem.getBoundingClientRect ()` Ø¨Ø§ÙØ¥Ø¶Ø§ÙØ© Ø¥Ù٠تÙ
Ø±ÙØ± Ø§ÙØµÙØØ© Ø§ÙØØ§ÙÙØ©.
Ø¥ØØ¯Ø§Ø«Ùات اÙÙÙØ§Ùذ رائعة ÙÙØ§Ø³ØªØ®Ø¯Ø§Ù
Ù
ع "اÙÙ
ÙØ¶Ø¹: ثابت" Ø ÙØ¥ØØ¯Ø§Ø«Ùات اÙÙ
Ø³ØªÙØ¯ Ø¬ÙØ¯Ø© Ù
ع "اÙÙ
ÙØ¶Ø¹: Ù
Ø·ÙÙ".
ÙÙØ§ اÙÙØ¸Ø§Ù
Ù٠اÙÙ
ÙØ³ÙÙÙ ÙÙÙ
ا Ø¥ÙØ¬Ø§Ø¨Ùات ÙØ³ÙØ¨ÙØ§Øª Ø ÙÙØ§Ù Ø£ÙÙØ§Øª ÙØØªØ§Ø¬ ÙÙÙØ§ Ø¥ÙÙ ÙØ§ØØ¯ Ø£Ù Ø§ÙØ¢Ø®Ø± Ø ØªÙ
اÙ
ÙØ§ Ù
ث٠CSS `position`` Ù
Ø·ÙÙ` Ù` ثابت`.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)