import { ElLoading } from 'element-plus' export default { /** * 返回一个自带消抖效果的函数,用res表示。 * * fn: 需要被消抖的函数 * delay: 消抖时长 * isImmediateCall: 是否在一组操作中的第一次调用时立即执行fn * isRememberLastCall:是否在一组中最后一次调用后等delay时长再执行fn */ debounce(fn, delay = 250, isImmediateCall = true, isRememberLastCall = true) { console.assert(isImmediateCall || isRememberLastCall, 'isImmediateCall 和 isRememberLastCall 至少应有一个是true,否则没有意义!') let timer = null // 上次调用的时刻 let lastCallTime = 0 if (isImmediateCall && !isRememberLastCall) { return function (...args) { const currentTime = Date.now() if (currentTime - lastCallTime >= delay) { fn.apply(this, args) } lastCallTime = currentTime } } else if (!isImmediateCall && isRememberLastCall) { return function (...args) { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { fn.apply(this, args) }, delay) } } else if (isImmediateCall && isRememberLastCall) { return function (...args) { const currentTime = Date.now() if (currentTime - lastCallTime >= delay) { // 一组操作中的第一次 fn.apply(this, args) lastCallTime = currentTime return } else { // 一组中的后续调用 if (timer) { // 在此之前存在中间调用 lastCallTime = currentTime clearTimeout(timer) } timer = setTimeout(() => { fn.apply(this, args) lastCallTime = 0 timer = null }, delay) } } } else { console.error('不应该执行到这里!') } }, throttle(fn, interval = 250) { let lastRunTime = 0 return function (...args) { let elapsedTime = Date.now() - lastRunTime if (elapsedTime < interval) { return null } let context = this lastRunTime = Date.now() return fn.apply(context, args) } }, /** * 全屏相关,注意兼容性堪忧,即使这样写。 */ requestFullScreen(elem) { if (elem.requestFullscreen) { elem.requestFullscreen() } else if (elem.mozRequestFullScreen) { elem.mozRequestFullScreen() } else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen() } else if (elem.msRequestFullscreen) { elem.msRequestFullscreen() } }, exitFullScreen() { if (document.exitFullScreen) { document.exitFullScreen() } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen() } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen() } else if (document.msExitFullscreen) { document.msExitFullscreen() } }, loadUnitySceneGeneral() { // const loadingInstance = ElLoading.service({ // background: 'black', // }) window.onSceneLoaded = () => { console.log('unity scene loaded') } window.onRequestApiSuccess = () => { // unity模型里拿到了后端数据 window.gMitt.emit('RequestApiSuccess-general', {}) // loadingInstance.close() } //场景加载完毕回调 window.gUnityInst && window.gUnityInst.SendMessage('SceneManager', 'LoadPage1') }, loadUnitySceneMetaverse() { // const loadingInstance = ElLoading.service({ // background: 'black', // }) window.onSceneLoaded = () => { console.log('unity scene loaded') } window.onRequestApiSuccess = () => { // unity模型里拿到了后端数据 window.gMitt.emit('RequestApiSuccess-metaverse', {}) // loadingInstance.close() } window.gUnityInst && window.gUnityInst.SendMessage('SceneManager', 'LoadPage4') }, }