หากต้องการสร้างไอคอนที่กำหนดเอง คุณต้องใช้อินเทอร์เฟซ IIcon
ข้อมูลนี้จะบอก Blockly ถึงวิธีที่คุณต้องการแสดงผลไอคอนและสิ่งที่คุณต้องการ
ให้ทำเมื่อมีการคลิก เป็นต้น
เราขอแนะนำให้จัดประเภทย่อยของคลาส Abstract Icon
เนื่องจากมีอยู่แล้ว
มีการตั้งค่าเริ่มต้นของวิธีการต่างๆ ใน IIcon
ของ Google
class MyIcon extends Blockly.icons.Icon {
// The constructor should always take in the source block so that svg elements
// can be properly created.
constructor(sourceBlock) {
super(sourceBlock);
}
}
ระบุประเภทของไอคอน
เมธอด getType
จะแสดงค่าที่แสดงถึงประเภทของเมธอด
ไอคอน โดยใช้สำหรับการลงทะเบียนไอคอนสำหรับการเรียงอันดับ และ
กำลังดึงข้อมูลไอคอนจาก getIcon
JavaScript
getType() {
return new Blockly.icons.IconType('my_icon');
}
TypeScript
getType(): Blockly.icons.IconType<MyIcon> {
return new Blockly.icons.IconType<MyIcon>('my_icon');
}
สร้างมุมมองไอคอน
มุมมองไอคอนหมายถึงองค์ประกอบ SVG ที่อยู่บนบล็อกนั้น
เริ่มต้นมุมมอง
เมธอด initView
คือที่สำหรับสร้างองค์ประกอบ SVG
ที่อยู่บนบล็อก องค์ประกอบใหม่ควรเป็นรายการย่อยของ
this.svgRoot
เพื่อให้ระบบล้างโดยอัตโนมัติเมื่อไอคอน
ถูกทำลายแล้ว
โมดูล Blockly.utils.dom
มีอินเทอร์เฟซที่เรียบง่าย
สำหรับการสร้างอินสแตนซ์ SVG
initView(pointerdownListener) {
if (this.svgRoot) return; // Already initialized.
// This adds the pointerdownListener to the svgRoot element.
// If you do not call `super` you must do this yourself.
super.initView(pointerdownListener);
Blockly.utils.dom.createSvgElement(
Blockly.utils.Svg.CIRCLE,
{
'class': 'my-css-class',
'r': '8',
'cx': '8',
'cy': '8',
},
this.svgRoot // Append to the svgRoot.
);
}
แสดงผลขนาด
เมธอด getSize
จะแสดงผลขนาดของไอคอน ดังนั้นเมธอด
ตัวแสดงผลทำให้บล็อกกว้างพอ
ขนาดจะอยู่ใน "หน่วยพื้นที่ทำงาน" ที่กำหนดเอง (ซึ่งไม่เปลี่ยนเป็นพื้นที่ทำงาน การเปลี่ยนแปลง)
getSize() {
return new Blockly.utils.Size(16, 16);
}
ตั้งค่าลำดับ
ไอคอนมีลำดับคงที่ภายในบล็อก ตัวอย่างเช่น Mutator ในตัว จะปรากฏข้างหน้าไอคอนความคิดเห็น ซึ่งแสดงอยู่ด้านหน้า ไอคอนคำเตือน
ลำดับจะถูกควบคุมโดยค่าที่ getWeight
แสดงผล
ระบบจะแสดงไอคอนที่มีน้ำหนักเป็นบวกมากกว่าไว้หลังไอคอนที่มีน้ำหนักน้อยกว่า
ยกน้ำหนักเชิงบวก
getWeight() {
return 10;
}
ใช้ลักษณะการทำงานของ onclick
ไอคอนจำนวนมากมีการโต้ตอบและจะทำงานเมื่อมีการคลิก ตัวอย่างเช่น
ไอคอนในตัวทั้งหมดจะแสดงลูกโป่งเมื่อมีการคลิก คุณสามารถ
ให้ใช้เมธอด onClick
เพื่อปรับใช้
onClick() {
// Do something when clicked.
}
ตอบสนองต่อการเปลี่ยนแปลงการบล็อก
ไอคอนบางรายการยังต้องการตอบสนองต่อการเปลี่ยนแปลงในบล็อกด้วย โดยเฉพาะอย่างยิ่งการเปลี่ยนแปลง ความสามารถในการแก้ไขและความยุบ
ความสามารถในการแก้ไข
ไอคอนของคุณควรทำงานแตกต่างออกไปหรือไม่ โดยขึ้นอยู่กับว่าการบล็อกนั้น
แก้ไขได้หรือไม่ได้ (เช่น ไม่สามารถคลิกได้เมื่อไม่สามารถบล็อกได้
แก้ไขได้) ให้ใช้เมธอด updateEditable
วิธีนี้
จะถูกเรียกโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงสถานะที่แก้ไขได้ของบล็อกนั้นๆ
updateEditable() {
if (this.sourceBlock.isEditable()) {
// Do editable things.
} else {
// Do non-editable things.
}
}
รูปแบบเมื่อยุบ
บางไอคอนจะแสดงเมื่อบล็อกยุบ แต่โดยค่าเริ่มต้นจะเป็น
ไม่ได้ หากคุณต้องการให้ไอคอนแสดง ให้แทนที่
isShownWhenCollapsed
จะแสดงผล true
isShownWhenCollapsed() {
return true;
}
จากนั้นลบล้างเมธอด updateCollapsed
updateCollapsed() {
// By default icons are hidden when the block is collapsed. We want it to
// be shown, so do nothing.
}
กำจัดไอคอน
ไอคอนควรทำความสะอาดองค์ประกอบ DOM หรือการอ้างอิงภายนอกเมื่อ
ถูกกำจัดทิ้ง โดยค่าเริ่มต้น ทุกอย่างที่ต่อท้าย this.svgRoot
จะได้รับ
ถูกทำลายแล้ว แต่การอ้างอิงอื่นๆ จะต้องมีการล้างข้อมูลด้วยตนเอง ควรเป็น
เสร็จสิ้นในเมธอด dispose
dispose() {
// Always call super!
super.dispose();
this.myBubble?.dispose();
this.myOtherReference?.dispose();
}