EyeDropper API ช่วยให้ผู้เขียนใช้เครื่องมือดูดสีที่เบราว์เซอร์มีให้ในการสร้างตัวเลือกสีที่กำหนดเอง
EyeDropper API คืออะไร
แอปพลิเคชันที่สร้างสรรค์จำนวนมากช่วยให้ผู้ใช้เลือกสีจากส่วนต่างๆ ของหน้าต่างแอป หรือแม้กระทั่งจากทั้งหน้าจอ ซึ่งโดยทั่วไปจะใช้การเปรียบเทียบกับหลอดดูดสี
ตัวอย่างเช่น Photoshop ช่วยให้ผู้ใช้ดูตัวอย่างสีจากภาพพิมพ์แคนวาสได้ จะได้ไม่ต้องเดาสี และเสี่ยงต่อความผิดพลาด PowerPoint ยังมีเครื่องมือดูดสี ซึ่งมีประโยชน์เมื่อตั้งค่าโครงร่างหรือสีเติมของรูปร่าง แม้แต่เครื่องมือสำหรับนักพัฒนาเว็บใน Chromium ก็มีหลอดดูดสี ซึ่งคุณสามารถใช้เมื่อแก้ไขสีในแผงรูปแบบ CSS คุณจึงไม่ต้องจำหรือคัดลอกโค้ดสีจากที่อื่น
หากคุณกำลังสร้างแอปพลิเคชันครีเอทีฟโฆษณาที่มีเทคโนโลยีเว็บ คุณอาจต้องการมอบฟีเจอร์ที่คล้ายกันให้แก่ผู้ใช้ อย่างไรก็ตาม การดำเนินการบนเว็บเป็นเรื่องยาก หากทำได้ โดยเฉพาะเมื่อคุณต้องการเปลี่ยนสีของหน้าจออุปกรณ์ทั้งหน้าจอ (เช่น จากแอปพลิเคชันอื่น) ไม่ใช่แค่จากแท็บเบราว์เซอร์ปัจจุบัน ไม่มีเครื่องมือดูดสีที่เบราว์เซอร์มีซึ่งเว็บแอปสามารถนำไปใช้ตามความต้องการของตนเองได้
องค์ประกอบ <input type="color">
จะเข้าใกล้ขึ้นมา ในเบราว์เซอร์แบบ Chromium ที่ทำงานบนอุปกรณ์เดสก์ท็อป จะมีเครื่องมือดูดสีที่มีประโยชน์ในเมนูแบบเลื่อนลงของตัวเลือกสี อย่างไรก็ตาม การใช้วิธีนี้หมายความว่าแอปจะต้องปรับแต่งแอปด้วย CSS และรวม JavaScript เล็กน้อยเพื่อให้พร้อมใช้งานในส่วนอื่นๆ ของแอป
การใช้ตัวเลือกนี้ยังหมายความว่าเบราว์เซอร์อื่นๆ จะไม่มีสิทธิ์เข้าถึงฟีเจอร์นี้
EyeDropper API เติมเต็มช่องว่างนี้โดยมอบวิธีคัดลอกสีจากหน้าจอ
วิธีใช้ EyeDropper API
การสนับสนุนเบราว์เซอร์
การตรวจหาฟีเจอร์และการรองรับเบราว์เซอร์
ก่อนอื่นให้ตรวจสอบว่า API พร้อมใช้งานก่อนใช้งาน
if ('EyeDropper' in window) {
// The API is available!
}
EyeDropper API รองรับในเบราว์เซอร์ที่ใช้ Chromium เช่น Edge หรือ Chrome ตั้งแต่เวอร์ชัน 95
การใช้ API
หากต้องการใช้ API ให้สร้างออบเจ็กต์ EyeDropper
แล้วเรียกใช้เมธอด open()
const eyeDropper = new EyeDropper();
เมธอด open()
จะแสดงสัญญาที่แก้ไขแล้วหลังจากผู้ใช้เลือกพิกเซลบนหน้าจอ และค่าที่แก้ไขแล้วจะให้สิทธิ์เข้าถึงสีของพิกเซลในรูปแบบ sRGBHex (#RRGGBB
)
ระบบจะปฏิเสธคําสัญญาหากผู้ใช้ออกจากโหมดหลอดดูดสีโดยกดปุ่ม Esc
try {
const result = await eyeDropper.open();
// The user selected a pixel, here is its color:
const colorHexValue = result.sRGBHex;
} catch (err) {
// The user escaped the eyedropper mode.
}
โค้ดของแอปยังยกเลิกโหมดหลอดดูดสีได้ด้วย ซึ่งมีประโยชน์หากสถานะของแอปมีการเปลี่ยนแปลงอย่างมาก บางทีกล่องโต้ตอบป๊อปอัปจะปรากฏขึ้น และผู้ใช้ต้องป้อนข้อมูล และควรหยุดโหมดหลอดดูดสี ณ จุดนั้น
หากต้องการยกเลิกเครื่องมือดูดสี คุณสามารถใช้สัญญาณของออบเจ็กต์ AbortController และส่งไปยังเมธอด open()
const abortController = new AbortController();
try {
const result = await eyeDropper.open({signal: abortController.signal});
// ...
} catch (err) {
// ...
}
// And then later, when the eyedropper mode needs to be stopped:
abortController.abort();
เมื่อนำทุกอย่างมารวมเข้าด้วยกัน คุณจะเห็นฟังก์ชันแบบไม่พร้อมกันที่นำมาใช้ใหม่ได้ที่ด้านล่าง
async function sampleColorFromScreen(abortController) {
const eyeDropper = new EyeDropper();
try {
const result = await eyeDropper.open({signal: abortController.signal});
return result.sRGBHex;
} catch (e) {
return null;
}
}
ลองใช้เลย
ใช้ Microsoft Edge หรือ Google Chrome 95 ขึ้นไปใน Windows หรือ Mac ให้เปิดการสาธิต EyeDropper
ลองใช้การสาธิตเกมสีสำหรับอินสแตนซ์ กดปุ่มเล่นและพยายามเลือกสีจากรายการที่ด้านล่างที่ตรงกับสี่เหลี่ยมจัตุรัสสีที่ด้านบน
ข้อควรพิจารณาเกี่ยวกับความเป็นส่วนตัวและความปลอดภัย
เบื้องหลัง API เว็บที่ดูเรียบง่ายนี้ได้ซ่อนความกังวลเรื่องความเป็นส่วนตัวและความปลอดภัยที่อาจเป็นอันตรายอยู่ จะเป็นอย่างไรหากเว็บไซต์ที่เป็นอันตรายเริ่มเห็นพิกเซลจากหน้าจอของคุณ
ในการแก้ไขข้อกังวลนี้ ข้อกำหนดของ API จึงกำหนดให้มีมาตรการต่อไปนี้
- ข้อแรก API ไม่ได้ให้โหมดหลอดดูดสีเริ่มทำงานโดยที่ผู้ใช้ต้องตั้งใจ เมธอด
open()
จะเรียกใช้เพื่อตอบสนองการดำเนินการของผู้ใช้ได้เท่านั้น (เช่น การคลิกปุ่ม) - ประการที่ 2 จะไม่มีการดึงข้อมูลพิกเซลมาได้หากไม่มีความตั้งใจของผู้ใช้อีกแล้ว คำสัญญาที่
open()
แสดงผลจะเป็นค่าสีตามการดำเนินการของผู้ใช้เท่านั้น (คลิกพิกเซล) ดังนั้น จะใช้หลอดดูดสีในเบื้องหลังไม่ได้โดยที่ผู้ใช้ไม่สังเกตเห็น - เบราว์เซอร์จําเป็นต้องทำให้โหมดนี้เห็นได้ชัดเจน เพื่อช่วยให้ผู้ใช้สังเกตเห็นโหมดหลอดดูดสีได้โดยง่าย ซึ่งเป็นสาเหตุที่เคอร์เซอร์เมาส์ปกติหายไปหลังจากการหน่วงเวลาสั้นๆ และอินเทอร์เฟซผู้ใช้เฉพาะจะปรากฏขึ้นแทน นอกจากนี้ยังมีความล่าช้าระหว่างเวลาที่โหมดหลอดดูดสีเริ่มต้นและเวลาที่ผู้ใช้สามารถเลือกพิกเซลเพื่อให้แน่ใจว่าผู้ใช้มีเวลาพอจะเห็นแว่นขยาย
- สุดท้าย ผู้ใช้สามารถยกเลิกโหมดหลอดดูดสีได้ทุกเมื่อ (โดยกดปุ่ม Esc)
ความคิดเห็น
ทีม Chromium ต้องการทราบข้อมูลเกี่ยวกับประสบการณ์การใช้งาน EyeDropper API ของคุณ
บอกให้เราทราบเกี่ยวกับการออกแบบ API
มีบางอย่างเกี่ยวกับ API ที่ไม่เป็นไปตามที่คุณคาดหวังไหม หรือมีวิธีการหรือพร็อพเพอร์ตี้ ที่ขาดหายไปที่คุณจำเป็นต้องใช้ในการนำแนวคิดของคุณไปปฏิบัติหรือไม่ หากมีข้อสงสัยหรือความคิดเห็น เกี่ยวกับโมเดลความปลอดภัย แจ้งปัญหาด้านข้อมูลจำเพาะในที่เก็บ GitHub ของ API หรือแสดงความคิดเห็นเกี่ยวกับปัญหาที่มีอยู่
รายงานปัญหาเกี่ยวกับการใช้งาน
คุณพบข้อบกพร่องในการใช้งาน Chromium หรือไม่ หรือการใช้งานแตกต่างจากข้อกำหนดหรือไม่
รายงานข้อบกพร่องที่ new.crbug.com อย่าลืมใส่รายละเอียดให้มากที่สุดเท่าที่จะทำได้ วิธีการง่ายๆ ในการทำซ้ำ และป้อน Blink>Forms>Color
ในช่องคอมโพเนนต์
Glitch เหมาะสำหรับการแชร์การดำเนินการซ้ำที่ง่ายและรวดเร็ว
แสดงการสนับสนุนสำหรับ API
คุณวางแผนที่จะใช้ EyeDropper API หรือไม่ การสนับสนุนสาธารณะของคุณช่วยให้ทีม Chromium จัดลำดับความสำคัญของฟีเจอร์
และแสดงให้ผู้ให้บริการเบราว์เซอร์อื่นๆ เห็นว่าการสนับสนุนฟีเจอร์ดังกล่าวสำคัญเพียงใด ส่งทวีตไปที่
@ChromiumDev โดยใช้แฮชแท็ก
#EyeDropper
และบอกเราว่าคุณใช้งานฟีเจอร์นี้ที่ไหนและอย่างไร
ลิงก์ที่มีประโยชน์
- คำอธิบายแบบสาธารณะ
- ฉบับร่างของข้อกำหนด
- การสาธิต EyeDropper API | แหล่งที่มาการสาธิต EyeDropper API
- ข้อบกพร่องในการติดตาม Chromium
- รายการ ChromeStatus.com
- คอมโพเนนต์การกะพริบ:
Blink>Forms>Color
- ตรวจสอบแท็ก
- คำขอตำแหน่ง WebKit
- คำขอตำแหน่งของ Mozilla
- ตั้งใจที่จะจัดส่ง
ข้อความแสดงการยอมรับ
Ionel Popescu จากทีม Microsoft Edge เป็นผู้ระบุและติดตั้งใช้งาน EyeDropper API โพสต์นี้ได้รับการตรวจสอบโดย Joe Medley