diff --git a/src/core/view/mixins/index.js b/src/core/view/mixins/index.js index 187d6f7987e41a7f91abc04abf5076ff0a3005fa..6975523e4f6b747171196d19660bb873b2a0861b 100644 --- a/src/core/view/mixins/index.js +++ b/src/core/view/mixins/index.js @@ -22,3 +22,8 @@ export { default as keyboard } from './keyboard' + +export { + default as interact +} + from './interact' diff --git a/src/core/view/mixins/interact.js b/src/core/view/mixins/interact.js new file mode 100644 index 0000000000000000000000000000000000000000..90acf49b9a2c3194c1fadb38584891f3f97cc4ca --- /dev/null +++ b/src/core/view/mixins/interact.js @@ -0,0 +1,54 @@ +import { + supportsPassive +} from 'uni-shared' + +const passiveOptions = supportsPassive ? { + passive: true, + capture: true +} : true +const vms = [] +let userInteract = 0 +let inited +function addInteractListener (vm) { + if (!inited) { + const eventNames = ['touchstart', 'touchmove', 'touchend', 'mousedown', 'mouseup'] + eventNames.forEach(eventName => { + document.addEventListener(eventName, function () { + vms.forEach(vm => { + vm.userInteract = true + userInteract++ + setTimeout(() => { + userInteract-- + if (!userInteract) { + vm.userInteract = false + } + }, 0) + }) + }, passiveOptions) + }) + } + 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) + } +} diff --git a/src/platforms/h5/view/components/video/index.vue b/src/platforms/h5/view/components/video/index.vue index 86956dd921f656bd6bf74d7bad8bf68846614eea..7f70df4f3efdedf4957b977a2f91a6aba8b73586 100644 --- a/src/platforms/h5/view/components/video/index.vue +++ b/src/platforms/h5/view/components/video/index.vue @@ -1,17 +1,16 @@