'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import {
  supportsPassive
} from 'uni-shared'
 
const passiveOptions = supportsPassive ? {
  passive: true,
  capture: true
} : true
const vms = []
let userInteract = 0
let inited
function setInteract (interact) { vms.forEach(vm => (vm.userInteract = interact)) }
function addInteractListener (vm = {}) {
  if (!inited) {
    const eventNames = ['touchstart', 'touchmove', 'touchend', 'mousedown', 'mouseup']
    eventNames.forEach(eventName => {
      document.addEventListener(eventName, function () {
        !userInteract && setInteract(true)
        userInteract++
 
        setTimeout(() => {
          !--userInteract && setInteract(false)
        }, 0)
      }, passiveOptions)
    })
    inited = true
  }
  vms.push(vm)
}
function removeInteractListener (vm) {
  const index = vms.indexOf(vm)
  if (index >= 0) {
    vms.splice(index, 1)
  }
}
 
export default {
  data () {
    return {
      /**
       * 是否用户交互行为
       */
      userInteract: false
    }
  },
  mounted () {
    addInteractListener(this)
  },
  beforeDestroy () {
    removeInteractListener(this)
  },
  addInteractListener,
  // true -> interact
  getStatus () {
    return !!userInteract
  }
}