Utwórz niestandardowe dymki

Dymek to wyskakujące okienko z interfejsem, które wygląda jak dymek z tekstem komiks. Mają „ogon” wskazujący blok oraz „głowa” zawiera dowolnych elementów SVG.

Dymek z głową i ogonem oznaczonym etykietą

Jeśli wbudowane dymki nie sprawdzają się w Twoim przypadku, może utworzyć niestandardowy dymek, stosując podklasyfikację klasy Bubble.

Tworzenie widoku

Widok dymka to wszystkie elementy SVG znajdujące się w „głowie” z dymek. Elementy te są tworzone wewnątrz konstruktora bąbelka i powinny być elementami podrzędnymi elementu this.contentContainer, tak aby otrzymali czyszczone automatycznie po zniszczeniu ikony.

Moduł Blockly.utils.dom ma przejrzysty interfejs. do tworzenia instancji plików svgs.

class MyBubble extends Blockly.bubbles.Bubble {
  // See the Blockly.bubbles.Bubble class for information about what these
  // parameters are.
  constructor(workspace, anchor, ownerRect) {
    super(workspace, anchor, ownerRect);

    this.text = Blockly.utils.dom.createSvgElement(
          Blockly.utils.Svg.TEXT,
          {'class': 'my-bubble-class'},
          this.contentContainer);
    const node = Blockly.utils.dom.createTextNode('some text');
    this.text.appendChild(node);
  }
}

Ustaw rozmiar

Rozmiar bąbelka należy ustawić za pomocą atrybutu setSize, tak aby zewnętrzny obszar prawidłowo otacza zawartość bąbelka. Wartość powinna być ustawiona podczas tworzenia i zmieniania rozmiaru elementów interfejsu.

constructor(workspace, anchor, ownerRect) {
  // Create the view elements... (see above)

  const bbox = this.text.getBBox();
  this.setSize(
    new Blockly.utils.Size(
      bbox.width + Blockly.bubbles.Bubble.BORDER_WIDTH * 2,
      bbox.height + Blockly.bubbles.Bubble.BORDER_WIDTH * 2,
    ),
    true
  );
}

Pozbądź się bąbelków

Dymki powinny usuwać elementy DOM lub odwołania zewnętrzne, gdy są lub surowców wtórnych. Domyślnie wszystkie elementy dołączone do this.contentContainer ale inne odwołania trzeba wyczyścić ręcznie. Powinien to być w metodzie dispose.

dispose() {
  super.dispose();

  // Dispose of other references.
  this.myArbitraryReference.dispose();
}