HTML ลากและวางบนอุปกรณ์มือถือ


92

เมื่อคุณเพิ่มการลากและวางลงในหน้าเว็บโดยใช้ JavaScript เช่น jQuery UI ที่ลากได้และลากเลื่อนได้คุณจะทำให้สิ่งนี้ทำงานได้อย่างไรเมื่อดูผ่านเบราว์เซอร์บนอุปกรณ์มือถือซึ่งการกระทำบนหน้าจอสัมผัสสำหรับการลากจะถูกขัดขวางโดย โทรศัพท์สำหรับเลื่อนไปรอบ ๆ หน้า ฯลฯ ?

ยินดีต้อนรับโซลูชันทั้งหมด ... ความคิดเริ่มต้นของฉันคือ:

  1. มีปุ่มสำหรับอุปกรณ์เคลื่อนที่ที่ "ยก" รายการที่จะลากจากนั้นให้พวกเขาคลิกโซนที่ต้องการวางรายการนั้น

  2. เขียนแอปที่ทำสิ่งนี้สำหรับอุปกรณ์มือถือแทนที่จะพยายามทำให้หน้าเว็บทำงานได้!

  3. ข้อเสนอแนะและความคิดเห็นของคุณโปรด


คุณกำหนดเป้าหมายอุปกรณ์ใด
Marko

23
@ Marko - ทั้งหมดนี้ ไม่ใช่เว็บถ้าฉันไม่รวมใคร
เฟนตัน

หากคุณไม่ต้องการ jQuery เลยลองดูที่github.com/capriza/mobile-touch
oriharel

ถาม 10 ปี 5 เดือนที่แล้วใช้งาน 1 ปี 2 เดือนที่แล้วดู 131k ครั้ง
Jason FB

คำตอบ:


100

jQuery UI Touch Punch แก้ปัญหาได้ทั้งหมด

เป็น Touch Event Support สำหรับ jQuery UI โดยพื้นฐานแล้วมันเพียงแค่เชื่อมต่อเหตุการณ์สัมผัสกลับไปที่ jQuery UI ทดสอบบน iPad, iPhone, Android และอุปกรณ์มือถือระบบสัมผัสอื่น ๆ ฉันใช้ jQuery UI ที่เรียงลำดับได้และมันใช้งานได้อย่างมีเสน่ห์

http://touchpunch.furf.com/


4
ไม่ทำงานบนเบราว์เซอร์ Android 4.0 ในสต็อก มันทำงานบน Chrome บนมือถือได้
Timmmm

เรากดค้างไว้ก่อนก่อนที่จะลากหรือไม่? เพราะเมื่อเราใช้ความกว้างเต็มในองค์ประกอบที่สามารถลากได้เราจึงต้องการเลื่อนไปด้านล่างมันจะลากองค์ประกอบโดยอัตโนมัติ
CaffeineShots

1
ตรวจสอบให้แน่ใจว่าได้ทำการประกาศ <script> ครั้งสุดท้ายในส่วนหัวของไฟล์ html ของคุณโดยเฉพาะ jquery-ui มิฉะนั้นจะใช้ไม่ได้
whyoz

@vichsu ขอบคุณมากสำหรับคำตอบนี้ซึ่งช่วยแก้ปัญหาของฉันได้อย่างสมบูรณ์แบบ
Brady Zhu

ใช้งานไม่ได้จริง ๆ ใน android 4.0 .. หรือมีวิธีแก้ไขหรือไม่
rashidnk

23

มีโพลีฟิลใหม่สำหรับแปลเหตุการณ์การสัมผัสเป็นลากแล้วปล่อยดังนั้น HTML5 Drag And Drop จึงใช้งานได้บนมือถือ

โพลีฟิลล์ได้รับการแนะนำโดย Bernardo Castilho ในโพสต์นี้

นี่คือตัวอย่างจากโพสต์นั้น

โพสต์ยังนำเสนอข้อควรพิจารณาหลายประการเกี่ยวกับการออกแบบ Folyfill


9

ฉันต้องการสร้างการหมุนแบบลากแล้วปล่อย + ที่ใช้งานได้บนเดสก์ท็อปมือถือแท็บเล็ตรวมถึง Windows Phone อันสุดท้ายทำให้ซับซ้อนมากขึ้น (mspointer กับ touch events)

การแก้ปัญหามาจากห้องสมุด Greensockอันยิ่งใหญ่

ต้องใช้เวลาในการกระโดดผ่านห่วงเพื่อให้วัตถุเดียวกันลากและหมุนได้ แต่ทำงานได้อย่างสมบูรณ์


ประเภทใบอนุญาต? ฟรี? ฉันตรวจสอบเว็บไซต์ แต่ดูเหมือนว่าพวกเขากำลังขายห้องสมุด
ShanerM13

เป็นเวลา 6 ปีแล้วที่ฉันตอบคำถามนี้ ฉันไม่แน่ใจว่าพวกเขาเปลี่ยนประเภทใบอนุญาตหรือไม่ เคยให้บริการฟรีในปี 2014 ...
Tomer Almog

IDK ฉันมองข้ามเรื่องนี้ไปได้อย่างไร แต่greensock.com/licensing
ShanerM13

โดยทั่วไปฟรีหากผลิตภัณฑ์ของคุณฟรี (ยกเว้นว่าอนุญาตให้เรียกเก็บเงินครั้งเดียว) อื่น ๆ ที่ชาญฉลาดคุณต้องได้รับใบอนุญาตประกอบธุรกิจกับพวกเขา
ShanerM13

7

Sencha Touchรุ่นเบต้ามีการรองรับการลากและวาง

คุณสามารถอ้างถึงตัวอย่าง DnDของพวกเขาตัวอย่างสิ่งนี้ใช้ได้เฉพาะกับเบราว์เซอร์ webkit เท่านั้น

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

อัปเดต:ลิงก์ตัวอย่างเดิมไม่ทำงาน แต่ฉันพบทางเลือกนี้:
https://github.com/kostysh/Drag-Drop-example-for-Sencha-Touch


มันน่าสนใจมากดังนั้นฉันจะดาวน์โหลดและทดลองเล่นบน Android และส่วนใหญ่ใช้งานได้ดังนั้นต้องดูรายละเอียด - ขอบคุณ!
Fenton

6
โอเคฉันอาจจะไม่ใช้ไลบรารีนั้นโดยเฉพาะ (สิ่งที่มันเกิน 200k เมื่อลดขนาด) แต่ฉันสามารถใช้แนวคิดที่มีอยู่ในนั้นเพื่อให้ได้แนวคิด แนวคิดทั่วไปคือคุณทำให้เพจของคุณไม่สามารถตีความได้ว่าใหญ่กว่าขนาดของหน้าจอซึ่งจะหลอกเบราว์เซอร์มือถือไม่ให้ขัดขวางการปัด / ลาก!
Fenton

1
Sohnee เรากำลังเพิ่มตัวสร้างสำหรับ Touch 1.0 ที่ตัดส่วนที่ไม่ได้ใช้ออกจากไลบรารีซึ่งจะทำให้รอยเท้าลดลงอย่างมาก นอกจากนี้ gzipped ไลบรารีเต็มคือ 50-80k
Michael Mullany

3

คุณอาจลองใช้โพลีฟิลลาก n-drop ของ Tim Ruffleซึ่งคล้ายกับของBernardo Castilho (ดูคำตอบของ @remdevtec)

เพียงแค่ทำnpm install mobile-drag-drop --save(มีวิธีการติดตั้งอื่น ๆ เช่นใช้โบเวอร์)

จากนั้นอินเทอร์เฟซองค์ประกอบใด ๆ ที่อาศัยการตรวจจับการสัมผัสควรทำงานบนอุปกรณ์เคลื่อนที่ (เช่นลากเฉพาะองค์ประกอบแทนที่จะเลื่อน + ลากในเวลาเดียวกัน)


2

นี่คือทางออกของฉัน:

$(el).on('touchstart', function(e) {
    var link = $(e.target.parentNode).closest('a')  
    if(link.length > 0) {
        window.location.href = link.attr('href');
    }
});

1

Jquery Touch Punch นั้นยอดเยี่ยม แต่สิ่งที่ทำได้คือปิดการใช้งานการควบคุมทั้งหมดบน div ที่ลากได้ดังนั้นเพื่อป้องกันไม่ให้คุณต้องแก้ไขบรรทัด ... (ในขณะที่เขียน - บรรทัดที่ 75)

เปลี่ยนแปลง

if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])){

อ่าน

if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0]) || event.originalEvent.target.localName === 'textarea'
        || event.originalEvent.target.localName === 'input' || event.originalEvent.target.localName === 'button' || event.originalEvent.target.localName === 'li'
        || event.originalEvent.target.localName === 'a'
        || event.originalEvent.target.localName === 'select' || event.originalEvent.target.localName === 'img') {

เพิ่มหรือมากเท่าที่คุณต้องการสำหรับแต่ละองค์ประกอบที่คุณต้องการ 'ปลดล็อก'

หวังว่าจะช่วยใครบางคน


มันช่วยฉันได้อย่างแน่นอนที่สุดขอบคุณ ฉันกำลังสร้างรายการตรวจสอบที่จัดเรียงได้และกล่องกาเครื่องหมายไม่ได้คลิกเนื่องจาก div ที่สร้างโดย touch-punch ครอบคลุมช่องทำเครื่องหมาย สิ่งนี้แก้ไขได้และใช้งานได้ ขอบคุณ ....
Mikeys4u

1

ห้องสมุดจัดเรียง JSเข้ากันได้กับหน้าจอแบบสัมผัสและไม่ต้องใช้ jQuery

วิธีจัดการกับหน้าจอสัมผัสที่คุณต้องสัมผัสหน้าจอประมาณ 1 วินาทีเพื่อเริ่มลากรายการ

นอกจากนี้ยังนำเสนอการทดสอบวิดีโอที่แสดงว่าไลบรารีนี้ทำงานได้เร็วกว่า JQuery UI Sortable


0

สำหรับ vue 3 มีhttps://github.com/SortableJS/vue.draggable.next

สำหรับ vue 2 มันคือ https://github.com/SortableJS/Vue.Draggable

หลังคุณสามารถใช้ดังนี้:

<draggable v-model="myArray" group="people" @start="drag=true" @end="drag=false">
   <div v-for="element in myArray" :key="element.id">{{element.name}}</div>
</draggable>

โดยอ้างอิงจาก sortable.js

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.