ตัวเลื่อน jQuery UI บนอุปกรณ์สัมผัส


96

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

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

ฉันลองดาวน์โหลดปลั๊กอิน jqtouch จากนั้นเชื่อมต่อ.touch([...])กับการโทรทั้งหมดไปยัง slider () และ rangelider () แต่ไม่ได้ผล

ขอบคุณ!

อัปเดต: ฉันพบ "แพทช์" นี้ในเว็บไซต์ jQuery UI

http://bugs.jqueryui.com/ticket/4143

ที่บอกว่ามันอำนวยความสะดวกในการเลื่อนบน iPhone แต่ตอนนี้มีคำถามโง่ ๆ อีกอย่าง: ฉันจะรวม "โปรแกรมแก้ไข" นี้เข้ากับรหัสของฉันได้อย่างไร? ฉันเพิ่งรวมไว้ที่จุดเริ่มต้นของรหัสเช่นปลั๊กอินหรือไม่?

คำตอบ:


141

ห้องสมุดนี้มีสิ่งที่คุณกำลังมองหา:

https://github.com/furf/jquery-ui-touch-punch#readme

นอกจากนี้ยังมีโค้ดตัวอย่างการใช้งาน (เพียงเพิ่มปลั๊กอิน):

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
  $('#widget').draggable();
</script>

28
หมายเหตุสำหรับฝูง: แนบเข้ากับที่จับตัวเลื่อนไม่ใช่ทั้งชิ้น (สำหรับแถบเลื่อน jQuery ที่จะเป็น$('.ui-slider-handle').draggable();
PaulSkinner

18
ตอนนี้ฉันสามารถเลื่อนที่จับตัวเลื่อนได้ทั่วหน้า !! นี่มันไร้สาระ
dezman

ฉันสามารถย้ายแฮนเดิลไปทั่วหน้าใน Firefox Mac ฉันสงสัยว่าเราจำเป็นต้องวางเงื่อนไข if (ipad | iphone) ... แล้วลากได้ ()
Joe Hyde

13
ขีดข่วนความคิดเห็นเดิมของฉันด้านบน ใช้งานได้โดยรวมปลั๊กอินนี้ไว้ใน HEAD เพิ่ม <script src> โดยอย่าเพิ่ม $ (ตัวเลือก) .draggable (); สำหรับการทำให้ที่จับตัวเลื่อนทำงาน
Joe Hyde

6
คุณต้องรวมสคริปต์การต่อยสัมผัสเท่านั้นเท่านี้ก็เสร็จเรียบร้อย เช่นเดียวกับที่ @JoeHyde กล่าวในความคิดเห็นที่สองของเขาไม่จำเป็นต้องเรียก. draggable () ในองค์ประกอบใด ๆ เพียงรวมสคริปต์และควรใช้งานได้
Jack Vial

22

แค่อยากจะเพิ่มข้อมูลใหม่เกี่ยวกับเรื่องนี้ Touch-punch จะทำงานได้ดีสำหรับ Ipads และอุปกรณ์ Android แต่แถบเลื่อนจะไม่ทำงานบนอุปกรณ์พกพา Windows เท่าที่ฉันสามารถทดสอบได้ (ด้วย jquery ui & Touch punch เวอร์ชันล่าสุด)

การแก้ไขนั้นค่อนข้างง่ายเพียงเพิ่มกฎ CSS ต่อไปนี้ใน .ui-slider-handle:

-ms-touch-action: none;
touch-action: none;

หวังว่านี่จะช่วยได้


ไม่ทำงานให้ฉัน? ลิงค์ตัวอย่างใดก็ได้ @Stijn_d
ShibinRagh

เอ่อ แต่สิ่งนี้ทำลายการทำงานของหมัดสัมผัสจริง
user151496

สิ่งนี้ช่วยแก้ปัญหาของฉันได้ ขอบคุณ!
parker_codes

หรือทำงานแบบฉันบนแล็ปท็อป Dell ที่มีหน้าจอสัมผัสjsfiddle.net/jhtcqbqo
Jean-François Beauchamp

ฉันกำลังใช้แถบเลื่อน HTML ที่เป็นมาตรฐานซึ่งล้าสมัยและขาด ๆ หาย ๆ เมื่อดูบนโทรศัพท์ Android การเพิ่มtouch-action: none;ความล่าช้านี้ออกทันที ดังนั้นนี่จึงเป็นทั้งคำขอบคุณและสำหรับทุกคนที่มีปัญหาเดียวกันในอนาคต: แถบเลื่อน HTML ที่กระตุกหรือล้าหลังด้วย CSS ที่กำหนดเองอาจได้รับประโยชน์จากแอตทริบิวต์นี้
Timmiej93

6

ตามที่ @dazbradbury แนะนำไลบรารีtouchpunchสามารถช่วยแปลเหตุการณ์ของเมาส์เพื่อสัมผัสเหตุการณ์ได้ พารามิเตอร์ใน. draggable () จำกัด การเคลื่อนที่ของแถบเลื่อนดังนั้นจึงไม่สามารถเคลื่อนย้ายเกินพาเรนต์ของตัวเลื่อนได้

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
$(".ui-slider-handle").draggable({ 
    axis: "x",
    containment: "parent"
});
</script>

แก้ไข:หากคุณใช้แถบเลื่อน Jquery UI อยู่แล้วคุณจะต้องรวมไลบรารี touchpunch เท่านั้น อย่าเรียก. draggable () สำหรับ .ui-slider-handle เพราะจะเขียนทับฟังก์ชันการทำงานที่มีอยู่


สิ่งนี้ทำให้ฉันได้ผล ปัญหาเดียวในตอนนี้คือพื้นที่พื้นหลัง (เมื่อตั้งค่าช่วง: "นาที") ไม่เป็นไปตามตำแหน่งแถบเลื่อน
ออก

5

ผมมีปัญหาเหมือนกัน. ฉันได้พัฒนาการสร้าง UI ของตัวเลื่อนที่ซับซ้อนบนแถบเลื่อนของ jQuery UI เพื่อให้รู้ว่ามันใช้ไม่ได้เลยบนมือถือ ฉันลองทำตามคำแนะนำที่ระบุไว้ที่นี่ แต่เนื่องจากฉันมีโซลูชันแบบกำหนดเองที่ใช้ jQuery UI Slider เท่านั้นจึงไม่ได้ผล

เพียงแค่ใช้noUiSlider

มันทำคุณสมบัติที่ซับซ้อนทั้งหมด (และอื่น ๆ อีกมากมาย) เหมือนกับที่ฉันสร้างไว้ด้านบนของแถบเลื่อน jQuery UI ทำงานได้อย่างสวยงามบนอุปกรณ์พกพาและยังจัดแต่งทรงผมได้ง่าย

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