|
|
@@ -1,94 +1,112 @@
|
|
|
-import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
|
+import React, { useEffect, useRef, useState } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
+import classNames from 'classnames'
|
|
|
+import { isPc } from '@/utils/http'
|
|
|
|
|
|
function A1home() {
|
|
|
- const [videoOk, setVideoOk] = useState(false)
|
|
|
- const [loadOk, setLoadOk] = useState(false)
|
|
|
- const [progress, setProgress] = useState(0)
|
|
|
+ // 点击进入
|
|
|
+ const [baseFlag, setBaseFlag] = useState(false)
|
|
|
|
|
|
- useEffect(() => {
|
|
|
- const modalIframe = document.getElementById('modalIframe') as HTMLIFrameElement | null
|
|
|
- if (modalIframe) {
|
|
|
- modalIframe.style.display = 'block'
|
|
|
- modalIframe.src = 'Chenzhebei-ShanxiMuseum/index.html'
|
|
|
- }
|
|
|
- }, [])
|
|
|
-
|
|
|
- const playerRef = useRef<any>(null)
|
|
|
+ // 初始视频
|
|
|
useEffect(() => {
|
|
|
const params = {
|
|
|
objectFit: 'cover', // 视频的object-fit样式, 默认 cover
|
|
|
- loop: false, // 是否循环, 默认false
|
|
|
- autoplay: false, // 自动播放, 默认false
|
|
|
- onPlay: () => { }, // 触发播放事件
|
|
|
- onPause: () => { }, // 触发暂停事件
|
|
|
- onEnded: () => {
|
|
|
- window.location.replace('#/base')
|
|
|
- }, // 触发播放结束事件
|
|
|
- onSourceEstablished: () => {
|
|
|
- setVideoOk(true)
|
|
|
- } //有足够的数据可以播放了
|
|
|
+ loop: true, // 是否循环, 默认false
|
|
|
+ autoplay: true, // 自动播放, 默认false
|
|
|
+ onSourceEstablished: () => {} //有足够的数据可以播放了
|
|
|
}
|
|
|
- playerRef.current = F_Video('./myData/home.ts', params)
|
|
|
- const dom = document.querySelector('.A1video')!
|
|
|
- dom.append(playerRef.current.domElement)
|
|
|
+ const videoInit = F_Video('./myData/base.ts', params)
|
|
|
+ const dom = document.querySelector('.A1baseVideo')!
|
|
|
+ dom.append(videoInit.domElement)
|
|
|
}, [])
|
|
|
|
|
|
- const timeRR = useRef(-1)
|
|
|
+ // 进度条
|
|
|
+ const [loding, setLoding] = useState(0)
|
|
|
+ const lodingRef = useRef(0)
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
- if (videoOk) {
|
|
|
- if (progress === 98) setProgress(100)
|
|
|
- clearInterval(timeRR.current)
|
|
|
- timeRR.current = window.setInterval(() => {
|
|
|
- if (loadOk) {
|
|
|
- console.log('播放视频')
|
|
|
- playerRef.current.play()
|
|
|
- clearInterval(timeRR.current)
|
|
|
- return
|
|
|
- }
|
|
|
- }, 50)
|
|
|
+ lodingRef.current = loding
|
|
|
+ }, [loding])
|
|
|
+
|
|
|
+ const timeRef = useRef(-1)
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (baseFlag) {
|
|
|
+ timeRef.current = window.setInterval(() => {
|
|
|
+ if (lodingRef.current >= 100) clearInterval(timeRef.current)
|
|
|
+ else setLoding(lodingRef.current + 1)
|
|
|
+ }, 100)
|
|
|
+ return () => {
|
|
|
+ clearInterval(timeRef.current)
|
|
|
+ }
|
|
|
}
|
|
|
- }, [loadOk, progress, videoOk])
|
|
|
+ }, [baseFlag])
|
|
|
|
|
|
- const enter = useCallback(() => {
|
|
|
- if (progress === 100) setLoadOk(true)
|
|
|
- }, [progress])
|
|
|
+ // 第二个视频 是否准备完毕
|
|
|
+ const [video2Flag, setVideo2Flag] = useState(false)
|
|
|
+ const playerRef = useRef<any>(null)
|
|
|
+ useEffect(() => {
|
|
|
+ if (baseFlag) {
|
|
|
+ const params = {
|
|
|
+ objectFit: 'cover', // 视频的object-fit样式, 默认 cover
|
|
|
+ loop: false, // 是否循环, 默认false
|
|
|
+ autoplay: false, // 自动播放, 默认false
|
|
|
+ onPlay: () => {}, // 触发播放事件
|
|
|
+ onPause: () => {}, // 触发暂停事件
|
|
|
+ onEnded: () => {
|
|
|
+ window.location.replace('#/base')
|
|
|
+ }, // 触发播放结束事件
|
|
|
+ onSourceEstablished: () => {
|
|
|
+ setVideo2Flag(true)
|
|
|
+ } //有足够的数据可以播放了
|
|
|
+ }
|
|
|
+ playerRef.current = F_Video('./myData/home.ts', params)
|
|
|
+ const dom = document.querySelector('.A1videoBox')!
|
|
|
+ dom.append(playerRef.current.domElement)
|
|
|
+ }
|
|
|
+ }, [baseFlag])
|
|
|
|
|
|
useEffect(() => {
|
|
|
- // 1-10
|
|
|
- window.unityLoading = (progress: number) => {
|
|
|
- console.log('当前进度', progress * 100 + '%')
|
|
|
- if (progress * 100 >= 98) {
|
|
|
- setProgress(98)
|
|
|
- return
|
|
|
+ if (video2Flag) {
|
|
|
+ const modalIframe = document.getElementById('modalIframe') as HTMLIFrameElement | null
|
|
|
+ if (modalIframe) {
|
|
|
+ modalIframe.style.display = 'block'
|
|
|
+ modalIframe.src = 'Chenzhebei-ShanxiMuseum/index.html'
|
|
|
+ modalIframe.loading = 'lazy'
|
|
|
+ }
|
|
|
+ window.unityLoading = (progress: number) => {
|
|
|
+ clearInterval(timeRef.current)
|
|
|
+ const num = Math.round(Number(progress * 100))
|
|
|
+ setLoding(num)
|
|
|
}
|
|
|
- setProgress(Number((progress * 100).toFixed(0)))
|
|
|
}
|
|
|
- }, [setProgress])
|
|
|
+ }, [video2Flag])
|
|
|
|
|
|
- // 判断是否已经加载好了iframe和视频,如果已经加载好了设置对应进度为100
|
|
|
+ // 第二个视频自动播放
|
|
|
useEffect(() => {
|
|
|
- const iframe = document.getElementById('modalIframe') as HTMLIFrameElement | null
|
|
|
- if (iframe && iframe.contentWindow && videoOk) {
|
|
|
- setProgress(100)
|
|
|
+ if (loding >= 100) {
|
|
|
+ playerRef.current.play()
|
|
|
}
|
|
|
- }, [loadOk, videoOk])
|
|
|
+ }, [loding])
|
|
|
|
|
|
return (
|
|
|
- <div className={styles.A1home}>
|
|
|
- <div className='loadingP' style={{ display: loadOk ? 'none' : 'flex' }}>
|
|
|
- <div className='btn' onClick={() => enter()}>
|
|
|
- {progress !== 100 ? (
|
|
|
- <img src={require('@/assets/img/home_loading.png')} alt='' draggable='false' />
|
|
|
- ) : (
|
|
|
- <div className="txt">点击进入</div>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- <div className='progress'>加载{progress}%...</div>
|
|
|
+ <div className={classNames(styles.A1home, isPc ? '' : styles.A1homeMo)}>
|
|
|
+ <div className='A1baseVideo'></div>
|
|
|
+ <div className='btn' onClick={() => setBaseFlag(true)}>
|
|
|
+ <div className='txt'>点击进入</div>
|
|
|
</div>
|
|
|
- {/* ------------微信浏览器不让视频自动播放,用ts的方式*/}
|
|
|
- <div className='A1videoBox'>
|
|
|
- <div className='A1video' style={{ opacity: 1 }}></div>
|
|
|
+
|
|
|
+ {baseFlag ? (
|
|
|
+ <div className='Aloding'>
|
|
|
+ <div className='AlodingT'>
|
|
|
+ <div style={{ width: `${loding}%` }}></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ <div className={classNames('A1video', loding >= 100 ? 'A1videoShow' : '')}>
|
|
|
+ <div className='A1videoBox'></div>
|
|
|
+ <div className='A1videoBtn' onClick={()=>window.location.replace('#/base')}>跳过</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
)
|