darsga qaytish

To'pni maydon markaziga qo'ying

Manba hujjatning ko’rinishi quyidagicha:

Maydon markazining koordinatalari qanday?

Ularni hisoblang va to’pni yashil maydonning markaziga qo’yish uchun foydalaning:

  • Element CSS emas, balki JavaScript orqali ko’chirilishi kerak.
  • Kod har qanday shar o’lchami (10, 20, 30 piksel) va istalgan maydon o’lchami bilan ishlashi kerak, berilgan qiymatlarga bog`lanmasligi kerak.

P.S. Albatta, markazlashtirish CSS yordamida amalga oshirilishi mumkin, ammo bu erda biz aynan JavaScript-ni xohlaymiz. Keyinchalik JavaScript-dan foydalanish kerak bo’lgan boshqa mavzular va murakkabroq vaziyatlar bilan tanishamiz.

Vazifa uchun sandbox-ni oching.

To’p position:absolute ga ega. Bu uning left/top koordinatalari eng yaqin joylashtirilgan elementdan, ya’ni #field dan o’lchanishini anglatadi (chunki u position:relative ga ega).

Koordinatalar maydonning ichki chap-yuqori burchagidan boshlanadi:

Ichki maydon kengligi/balandligi clientWidth/clientHeight dir. Demak, maydon markazi (clientWidth/2, clientHeight/2) koordinatalariga ega.

…Ammo agar biz ball.style.left/top ni bunday qiymatlarga o’rnatdik, u holda butun to’p emas, balki to’pning chap-yuqori chegarasi markazda bo’ladi:

ball.style.left = Math.round(field.clientWidth / 2) + "px";
ball.style.top = Math.round(field.clientHeight / 2) + "px";

Qanday ko’rinishi:

To’p markazini maydon markazi bilan tekislash uchun to’pni chapga uning kengligining yarmiga va yuqoriga uning balandligining yarmiga siljitishimiz kerak:

ball.style.left =
  Math.round(field.clientWidth / 2 - ball.offsetWidth / 2) + "px";
ball.style.top =
  Math.round(field.clientHeight / 2 - ball.offsetHeight / 2) + "px";

Endi to’p nihoyat markazlashtirildi.

E’tibor: tuzoq!

<img> ning kengligi/balandligi bo’lmagan vaqtda kod ishonchli ishlamaydi:

<img src="ball.png" id="ball">

Brauzer rasm kengligi/balandligini bilmasa (teg atributlari yoki CSS dan), u rasm yuklanib bo’lgunga qadar ularni 0 ga teng deb hisoblaydi.

Shunday qilib, ball.offsetWidth qiymati rasm yuklanguncha 0 bo’ladi. Bu yuqoridagi kodda noto’g’ri koordinatalarga olib keladi.

Birinchi yuklanishdan keyin brauzer odatda rasmni keshga saqlaydi va qayta yuklashda darhol o’lchamga ega bo’ladi. Ammo birinchi yuklanishda ball.offsetWidth qiymati 0.

Buni <img> ga width/height qo’shish orqali tuzatishimiz kerak:

<img src="ball.png" width="40" height="40" id="ball">

…Yoki CSS da o’lchamni belgilang:

#ball {
  width: 40px;
  height: 40px;
}

Yechimni sandbox-da oching.