Tóm tắt
<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.
Tài liệu tham khảo
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>
Mã
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);