1 | const DATA_MOUSE_FOCUS = 'data-focus-mouse'
|
2 | const CLASS_NAME_MOUSE_FOCUS = 'focus--mouse'
|
3 |
|
4 | class TrackFocus {
|
5 | constructor() {
|
6 | this._usingMouse = false
|
7 |
|
8 | this._bindEvents()
|
9 | }
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | _bindEvents() {
|
15 | const events = ['keydown', 'mousedown']
|
16 | events.forEach((evtName) => {
|
17 | document.addEventListener(evtName, (evt) => {
|
18 | this._usingMouse = evt.type === 'mousedown'
|
19 | })
|
20 | })
|
21 | document.addEventListener('focusin', (evt) => {
|
22 | if (this._usingMouse) {
|
23 | if (evt.target) {
|
24 | evt.target.classList.add(CLASS_NAME_MOUSE_FOCUS)
|
25 | evt.target.setAttribute(DATA_MOUSE_FOCUS, true)
|
26 | }
|
27 | }
|
28 | })
|
29 | document.addEventListener('focusout', (evt) => {
|
30 | if (evt.target) {
|
31 | evt.target.classList.remove(CLASS_NAME_MOUSE_FOCUS)
|
32 | evt.target.setAttribute(DATA_MOUSE_FOCUS, false)
|
33 | }
|
34 | })
|
35 | }
|
36 | }
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | new TrackFocus()
|
45 |
|
46 | export default TrackFocus
|