Drag & Drop from scratch (return)

หลายคนอาจคิดว่า Drag & Drop นั้นต้องทำยากแน่ๆ แต่ความจริงแล้วการ coding ไม่ยากเลย แต่ความยากมันอยู่ที่การนำไปใช้ บทความนี้จะบอกว่าทำอย่างไร ส่วนจะเอาไปใช้อย่างไรนั้น ต้องลองนำไปต่อยอดดูนะคับ ว่าแล้วก็มาจับกบกันเต๊อะ


Obbs & Basket

เริ่มแรกเราต้องสร้างเพจที่มีกบและตะกร้าก่อนนะคับ โดยสร้างไฟล์ html ไฟล์ obb.html ซึ่งจะทำหน้าที่เป็นหน้าเว็ปเพจของเรานะคับ และสร้าง style sheet ไฟล์ ชื่อ obb.css จากนั้นผูกทั้งสองไฟล์เข้าด้วยกัน เป็นอันเสร็จพิธี

// obb.html นะคับ
<html>

  <head>
    <link media="screen" type="text/css" href="obb.css" rel="stylesheet">
  </head>

  <body>
    <div class="obb" id="1"></div>
    <div class="obb" id="2"></div>
    <div class="basket"></div>
  </body>

</html>

จะเห็นว่าเพจของเราจะมี กบ 2 ตัว และตะกร้า 1 ใบ
<div> คือ division ปกติเราจะใช้เพื่อเป็นตัวแทนของ section ที่เราสร้างขึ้นเอง เช่นในกรณีนี้ เราอยากทำกบ เราก็จะสร้าง <div> ซึ่งมี คลาสเป็น obb ส่วน id จะใช้ในการระบุว่าเป็นกบตัวใหน ซึ่งเดี๋ยวเราจะเขียน css ขึ้นมากำหนดว่า div ที่มีคลาสเป็น obb ให้แสดงเป็นรูปกบนะ นั่นเอง

ปกติเวลาเราเขียน css มันจะแบ่งได้เป็น 2 ส่วนคือ

  • style สำหรับ standard html tag เช่น <p> เป็นต้น
  • style สำหรับ custom tag ซึ่งเราจะใช้ <div> และ <span>

ดังนั้นตัวอย่างนี้ผมก็เลยใช้ <div> คับ ส่วน <div> กับ <span> ต่างกันยังไง ลอง search ดูคับ


ต่อด้วย obb.css นะคับ

/* obb.css นะคับ */

div.obb{
background-image: url(obb.gif);
width: 40px;
height: 30px;
float: left;
margin-right: 10px;
}

div.basket{
background-image: url(basket.gif);
width: 50px;
height: 35px;
float: right;
margin-right: 300px;
}

ถ้าไม่มีอะไรผิดพลาด จะได้ผลแบบนี้คับ









Let’s move

เราจะใช้ JQuery + JQuery UI ซึ่งเป็น Java library ซึ่งจะทำให้เราเขียน Java scripts ไ้ด้ง่ายขึ้น
พอโหลด JQuery และ JQuery UI เสร็จแล้ว เอาไฟล์ไปไว้ใน folder ที่ต้องการ แล้วก็แก้ไข obb.html ดังนี้คับ

// obb.html นะคับ
<html>

  <head>
    <link media="screen" type="text/css" href="obb.css" rel="stylesheet">
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="jquery-ui.js"></script>

    <script type="text/javascript">
	$(document).ready(function() {
          $('div.obb').draggable({revert: true});
        });
    </script>

  </head>

  <body>
    <div class="obb" id="1"></div>
    <div class="obb" id="2"></div>
    <div class="basket"></div>
  </body>

</html>

บรรทัดที่ 6: ขอใช้ jQuery library
บรรทัดที่ 7: ขอใช้ JQuery UI library
บรรทัดที่ 9-13: เป็นการบอก ถ้าเพจนี้โหลดเสร็จ ให้ทำคำสั่งนี้นะ ซึ่งก็คือ บรรทัดที่ 11 นั่นเอง
บรรทัดที่ 11: $(‘div.obb’) คือ select ซึ่งหมายถึง element div ที่มี class=”obb” นั่นเอง รายละเอียด








Catch them!

ขั้นนี้เราจะกำหนดจุดปล่อยกบ ซึ่งก็คือตะกร้า เพิ่มโค้ดเข้าไปใน obb.html

// obb.html นะคับ
<html>

  <head>
    <link media="screen" type="text/css" href="obb.css" rel="stylesheet">
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="jquery-ui.js"></script>

    <script type="text/javascript">
	$(document).ready(function() {
          $('div.obb').draggable({revert: true});
          $('div.basket').droppable({
                                       accept: 'div.obb'
                                       drop: function(ev,ui){
                                               ui.drop.fadeOut();
                                             }
                                    });
        });
    </script>

  </head>

  <body>
    <div class="obb" id="1"></div>
    <div class="obb" id="2"></div>
    <div class="basket"></div>
  </body>

</html>

บรรทัดที่ 12: บอกว่า <div class=”basket”> เป็น drop zone
บรรทัดที่ 13: รับเฉพาะ <div class=”obb”>
บรรทัดที่ 14-16: เมื่อกบถูก drop ให้ทำตามนี้นะ








Conclusion

จะเห็นว่าไม่ยากเลย แต่ก็ยังเอาไปใช้จริงไม่ได้ ความยากมันอยู่ที่ว่าจะเอาไปใช้ยังไงให้เหมาะสม เพราะบางทีการใส่ลูกเล่นให้เว็ปอย่างไม่เหมาะสมมันก็เป็นผลเสียได้

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Twitter

Tags: , , ,

1.
mindmidday

ขอบคุณนะครับ พอดีกำลังดูเรื่อง drag&drop อยู่เลย

2.
zeally

ขอบคุณมากคับ ผมรอคอย comment มานานแสนนาน ในที่สุด วันนี้ก็มาถึง

3.
zar

แจ่มมาก กบน่ารัก … ต้องศึกษา jQuery เป็นเรื่องเป็นราวเลยสิเนี่ย

4.
admin

ขอบคุณคับ -/\-

5.
yoyokung

ขอบคุณนะครับ
ชอบมาก เขียน สอนมาเยอะๆนะครับ
เขียนสอนอ่านง่ายดี
นานๆจะเจอคนสอนที่เข้าใจคนอ่าน

6.
admin

ขอบคุณมากครับ จะพยายามเขียนเพิ่มเรื่อยๆ ครับ
ถ้ามีข้อสงสัยอะไร ถามได้เลยนะครับ ยินดีช่วยครับ

7.
yoyokung

รบกวนสอบถามหน่อยครับ
จะใช้ Jquery
ต้อง โหลดอะไรมาบ้าง
ไม่มั่นใจเลยมาถามครับ
เพราะทำแล้วมันลากไม่ไป
T-T

8.
admin

โหลดตัวนี้ได้เลยครับ
site url: http://blog.jqueryui.com/2009/08/jquery-ui-18a1/
file url: http://jquery-ui.googlecode.com/files/jquery-ui-1.8a1.zip

โหลดเสร็จแล้วแกะ zip แล้วดูตัวอย่างจากไฟล์ demos/index.html นะครับ
ลอง view source แล้วดูลักษณะการ include ไฟล์ ซึ่งจะแตกต่างจากตัวอย่างนี้นะครับ เพราะการจัดรูปแบบแฟ้มข้อมูลมันแตกต่างกันครับ

9.
yoyokung

ขอบคุณมากๆๆๆๆๆๆๆเลยครับ

10.
admin

ยินดีครับ -/\-

11.
GillBate

ถ้าเราต้องการจะลากกบลงไปในตาราง 2×2 แบบว่าจะลงไปในช่องไหนก็ได้ล่ะครับ พอจะบอกวิธีได้มั้ยครับ

12.
admin

@GillBate
จากตัวอย่างนี้ ให้เปลี่ยนมุมมองจากตาราง 2×2 เป็นตะกร้า 4 ใบเรียงกันแบบ 2×2 ครับ
- การทำให้ตะกร้า 4 ใบเรียงกันแบบ 2×2 ทำได้โดยการใช้ css จัดการครับ
- กำหนด id ของตะกร้าแต่ละใบให้แตกต่างกัน เวลาวางกบเราก็จะรู้ได้ว่ากบตัวใหน ถูกวางลงในตะกร้าใบใหน ครับ

ลองดูตัวอย่างเพิ่มเติมที่นี่ครับ
http://jqueryui.com/demos/droppable/#propagation

13.
GillBate

ถ้าจะให้กบสลับที่กับตะกร้านี่ทำยังไงครับ(หาฟังชั่นไม่เจอครับ ผมจะไปหาดูได้ที่ไหนล่ะครับเนี่ย)

14.
admin

@GillBate ดูตัวอย่าง obb.html ที่บรรทัดที่ 14-16 ตรงนี้แหละครับที่เป็นตัวกำหนดว่า ถ้ากบถูกวางลงในตะกร้าแล้วจะเกิดอะไรขึ้น

ถ้าคุณอยากทำให้กบสลับที่กับตะกร้า คุณต้องคิดว่าจะใช้วิธีแบบใหนเพื่อให้เกิดผลแบบนั้น ลองศึกษา JQuery – Manipulation ดูนะครับ
http://api.jquery.com/category/manipulation/

ลองดูครับ ถ้าทำได้ครั้งหนึ่งแล้ว ต่อไปถ้าอยากทำอะไร ก็จะสามารถทำได้ครับผม

Leave a Reply

Grass still Green

บริการจัดทำเว็บไซต์ครบวงจร เรียบง่าย แตกต่าง และ มีประสิทธิภาพ
โทรศัพท์ 08-3153-2190 อีเมล์ support@wegrass.com