- @stanko/dual-range-input เป็นไลบรารีอินพุตช่วงคู่แบบเนทีฟที่ใช้ HTML range input แบบเนทีฟสองตัว
- ใช้อินพุตแบบเนทีฟ จึงคงการโต้ตอบพื้นฐานและความสามารถด้านการเข้าถึงทั้งหมดไว้
- สร้างขึ้นด้วย JavaScript และ CSS ราว 50 บรรทัด
- ทำไมจึงจำเป็น
- ใช้ UI สำหรับปรับพารามิเตอร์ในเครื่องมือวาดภาพเชิงกำเนิด และต้องการสไลเดอร์ค่าต่ำสุดและค่าสูงสุด
- โซลูชันที่มีอยู่เดิมพึ่งพา JavaScript และต้องสร้างความสามารถการลากและการเข้าถึงขึ้นมาใหม่
- ต้องการใช้ HTML range input แบบเนทีฟ และเมื่อคลิกแทร็ก นิ้วจับที่อยู่ใกล้ที่สุดควรย้ายไปยังค่านั้น
- หลักการทำงาน
- อินพุตสองตัวถูกวางไว้เคียงกัน และเมื่ออินพุตเปลี่ยนแปลง จะคำนวณจุดกึ่งกลางของสองค่า
- ตั้งค่าแอตทริบิวต์ต่ำสุดและสูงสุดเป็นจุดกึ่งกลาง และอัปเดตความกว้างของอินพุต
- การปรับขนาดอินพุต
- ตอนคำนวณความกว้างของอินพุต ต้องคำนึงว่าแทร็กสั้นกว่าความกว้างจริงของอินพุต
- คำนวณอย่างง่ายโดยเพิ่มความกว้างของนิ้วจับเข้าไปในความกว้างของอินพุต
- เพิ่ม padding ให้ตัวห่ออินพุตเพื่อรองรับความกว้างเพิ่มเติมของนิ้วจับ
- ย้ายนิ้วจับเมื่อคลิก
- อินพุตจะถูกปรับขนาดให้มาบรรจบกันที่จุดกึ่งกลาง และเมื่อคลิก นิ้วจับที่อยู่ใกล้ที่สุดจะย้ายไปยังค่านั้น
- หากเปิดโหมดดีบัก จะเห็นจุดกึ่งกลางได้ง่าย
- การจัดสไตล์
- สามารถใช้ CSS เพื่อจัดสไตล์ให้ range input ได้
- การจัดสไตล์แทร็กและนิ้วจับทำได้ง่าย และลบรัศมีขอบที่ส่วนเชื่อมตรงกลางของแทร็ก
- ธีม
- เปิดเผยตัวแปรหลายตัวเพื่อให้เปลี่ยนธีมได้ง่าย
- มีค่าเริ่มต้นให้ และสามารถสร้างธีมได้ด้วยการ override ตัวแปร
- กราเดียนต์
- ใช้ CSS gradient เพื่อระบายช่วงที่ถูกเลือก
- ใช้ตัวแปร
--dri-gradient-position เพื่อตั้งค่ากราเดียนต์ และอัปเดตร่วมกับความกว้างในโค้ด
- สรุป
- โพสต์นี้มีไว้เพื่อจัดระเบียบความคิด และหวังว่าจะช่วยสร้างแรงบันดาลใจให้ลองใช้องค์ประกอบแบบเนทีฟ
1 ความคิดเห็น
ความเห็นจาก Hacker News
<input type=range>ควรมีการรองรับค่าคู่โดยตรง และใน Firefox ก็มีบั๊กที่เมื่อคลิกแฮนเดิลแล้วค่าจะเปลี่ยนทีละหนึ่งขั้น