| 6 | */ |
| 7 | |
| 8 | export 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]) { |
nothing calls this directly
no outgoing calls
no test coverage detected