123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- 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')
- },
- }
|