Thành phần hướng dẫn – Hướng dẫn cách sử dụng

<howto-tooltip> là một cửa sổ bật lên hiển thị thông tin liên quan đến một phần tử khi phần tử đó nhận được tiêu điểm bàn phím hoặc khi chuột di qua phần tử đó. Phần tử kích hoạt chú giải công cụ tham chiếu đến phần tử chú giải công cụ bằng aria-describedby.

Phần tử tự áp dụng vai trò tooltip và đặt tabindex thành -1, vì chú giải công cụ không bao giờ có thể được lấy làm tâm điểm.

Bản minh hoạ

Xem bản minh hoạ trực tiếp trên GitHub

Ví dụ về cách sử dụng

<div class="text">
<label for="name">Your name:</label>
<input id="name" aria-describedby="tp1"/>
<howto-tooltip id="tp1">Ideally your name is Batman</howto-tooltip>
<br>
<label for="cheese">Favourite type of cheese: </label>
<input id="cheese" aria-describedby="tp2"/>
<howto-tooltip id="tp2">Help I am trapped inside a tooltip message</howto-tooltip>

class HowtoTooltip extends HTMLElement {

Hàm khởi tạo thực hiện công việc cần được thực thi chính xác một lần.

  constructor() {
    super();

Các hàm này được sử dụng ở nhiều nơi và luôn cần liên kết đúng tệp đối chiếu này, vì vậy, hãy thực hiện một lần.

    this._show = this._show.bind(this);
    this._hide = this._hide.bind(this);
}

connectedCallback() kích hoạt khi phần tử được chèn vào DOM. Đây là nơi thích hợp để đặt vai trò ban đầu, tabindex, trạng thái nội bộ và cài đặt trình nghe sự kiện.

  connectedCallback() {
    if (!this.hasAttribute('role'))
      this.setAttribute('role', 'tooltip');

    if (!this.hasAttribute('tabindex'))
      this.setAttribute('tabindex', -1);

    this._hide();

Phần tử kích hoạt chú giải công cụ tham chiếu đến phần tử chú giải công cụ bằng aria-describedby.

    this._target = document.querySelector('[aria-describedby=' + this.id + ']');
    if (!this._target)
      return;

Chú giải công cụ cần theo dõi các sự kiện lấy nét/làm mờ từ mục tiêu, cũng như các sự kiện di chuột qua mục tiêu.

    this._target.addEventListener('focus', this._show);
    this._target.addEventListener('blur', this._hide);
    this._target.addEventListener('mouseenter', this._show);
    this._target.addEventListener('mouseleave', this._hide);
  }

disconnectedCallback() huỷ đăng ký trình nghe sự kiện được thiết lập trong connectedCallback().

  disconnectedCallback() {
    if (!this._target)
      return;

Xoá các trình nghe hiện có để chúng không kích hoạt mặc dù không có chú giải công cụ nào hiển thị.

    this._target.removeEventListener('focus', this._show);
    this._target.removeEventListener('blur', this._hide);
    this._target.removeEventListener('mouseenter', this._show);
    this._target.removeEventListener('mouseleave', this._hide);
    this._target = null;
  }

  _show() {
    this.hidden = false;
  }

  _hide() {
    this.hidden = true;
  }
}

customElements.define('howto-tooltip', HowtoTooltip);