JavaScript HTML DOM Animation การเคลื่อนย้าย element ในหน้าเว็บ

โดย SONGCHAI SAETERN

มาฝึกเขียน JavaScript กันเถอะ 

ในตัวอย่างนี้เมื่อคลิกที่ปุ่ม Click Me กรอบสี่เหลี่ยมสีแดงจะเคลื่อนจากตำแหน่งบนซ้าย ไปยังมุมล่างขวา ซึ่งถูกกำหนดพิกัดไว้ที่ 350 

if(!pX) pX=350;
if(!pY) pY=350;

ตำแหน่งกรอบสีแดงจะถูกบวกเพิ่มไปจนกระทั่งครบตามที่กำหนดไว้
      if(posY < pY) posY++;
      if(posX < pX) posX++;
      elem.style.top = posY + 'px';
      elem.style.left = posX + 'px'; 



และในพื้นที่สีเหลืองนี้ ได้กำหนดคำสั่ง OnClick เอาไว้เพื่อให้กรอบสีแดงเคลื่อนไปยังจุดที่คลิก

<div id ="container" onclick="sendPos(event)">


ในฟังก์ชั่น sendPos() จะรับค่า event ที่ได้จาก onclick และรับค่าตำแหน่ง offsetX, offsetY เพื่อส่งไปยังฟังก์ชั่น myMove() เพื่อเคลื่อนย้ายสีเหลี่ยมสีแดงไปยังตำแหน่งที่คลิก

function sendPos(event){
    myMove(event.offsetX  , event.offsetY );
}

สังเกตุว่าการเคลื่อนย้ายจะไม่เป็นเส้นตรง เพราะตำแหน่ง X และ Y ไม่เท่ากัน ดังนั้นเมื่อถึงตำแหน่งแนวไหนก่อน ก็จะเคลื่อนไปอีกแนวเท่านั้น


แนวทางการปรับปรุงโค้ดให้การเคลื่อนที่เป็นเส้นตรง

ยกตัวอย่าง x = 78 , y = 264
ให้ยึดค่าที่มากกว่าเป็นหลัก นั่นคือแกน y จะขยับอยู่ 264 ครั้ง
ดังนั้น ต้องนำค่าแกน x มาเฉลี่ยให้ได้ 264 ครั้งด้วยสูตร
 min / max  นั่นก็คือ  78 / 264 = 0.295

ซึ่งถ้าคูณกลับ 0.295 * 264 = 77.88 ซึ่งยังไม่ครบตำแหน่งจริงคือ 78
ดังนั้นจะมีการขยับอีกครั้ง 77.88 + 0.295 จะกลายเป็น 78.175

จะเห็นว่าเลยตำแหน่งจริงไป 0.175

ดังนั้น ต้องตรวจสอบว่าถ้าเลยตำแหน่งจริงเมื่อไหร่ต้องกำหนดให้เท่าตำแหน่งจริง





รายละเอียด

ตัวอย่างโค้ด JavaScript ทั้งหมด


<!DOCTYPE html>
<html>
<style>
#container {
  width: 400px;
  height: 400px;
  position: relative;
  background: yellow;
}
#animate {
  width: 50px;
  height: 50px;
  position: absolute;
  background-color: red;
}
</style>
<body>
<p>
<button onclick="myMove()">Click Me</button>
</p>
<p><span id="debug"></span> || <span id="current"></span></p>
<div id ="container" onclick="sendPos(event)">
<div id ="animate"></div>
</div>
<script>
function myMove(pX, pY) {
if(!pX) pX=350;
    if(!pY) pY=350;
document.getElementById("debug").innerHTML = pX + " : " + pY;
  var elem = document.getElementById("animate"); 
  var posX = 0;
  var posY = 0;
  var id = setInterval(frame, 5);
  function frame() {
      if (posX >= pX && posY >= pY) {
      clearInterval(id);
    } else {
      if(posY < pY) posY++;
      if(posX < pX) posX++;
      elem.style.top = posY + 'px';
      elem.style.left = posX + 'px';
      document.getElementById("current").innerHTML = posX + " : " + posY;
    }
  }
}
function sendPos(event){
    myMove(event.offsetX  , event.offsetY );
}
</script>
</body>
</html>

--------------------------

อ้างอิง

JavaScript HTML DOM Animation
https://www.w3schools.com/js/tryit.asp?filename=tryjs_dom_animate_3

How do I get the coordinates of a mouse click on a canvas element?
https://stackoverflow.com/questions/55677/how-do-i-get-the-coordinates-of-a-mouse-click-on-a-canvas-element


PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/