MCPcopy Create free account
hub / github.com/Useful-Scripts-Extension/useful-script / MouseObserver

Class MouseObserver

scripts/libs/utils/mouseObserver.js:8–162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6 */
7
8export class MouseObserver {
9 constructor(observeOpt) {
10 this.observer = new IntersectionObserver((infoList) => {
11 infoList.forEach((info) => {
12 info.target.IntersectionObserverEntry = info;
13 });
14 }, observeOpt || {});
15
16 this.observeList = [];
17 }
18
19 _observe(target) {
20 let hasObserve = false;
21 for (let i = 0; i < this.observeList.length; i++) {
22 const el = this.observeList[i];
23 if (target === el) {
24 hasObserve = true;
25 break;
26 }
27 }
28
29 if (!hasObserve) {
30 this.observer.observe(target);
31 this.observeList.push(target);
32 }
33 }
34
35 _unobserve(target) {
36 this.observer.unobserve(target);
37 const newObserveList = [];
38 this.observeList.forEach((el) => {
39 if (el !== target) {
40 newObserveList.push(el);
41 }
42 });
43 this.observeList = newObserveList;
44 }
45
46 /**
47 * Add event binding
48 * @param target {element} - required The DOM object to which the event is to be bound
49 * @param type {string} - required The event to be bound, only mouse events are supported
50 * @param listener {function} - required response function when triggering conditions are met
51 */
52 on(target, type, listener, options) {
53 const t = this;
54 t._observe(target);
55
56 if (!target.MouseObserverEvent) {
57 target.MouseObserverEvent = {};
58 }
59 target.MouseObserverEvent[type] = true;
60
61 if (!t._mouseObserver_) {
62 t._mouseObserver_ = {};
63 }
64
65 if (!t._mouseObserver_[type]) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected