index.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import React, { useEffect, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { baseURL, myData } from '@/utils/http'
  4. import history from '@/utils/history'
  5. import classNames from 'classnames'
  6. import BaseImg from '@/components/BaseImg'
  7. import S1manor from './S1manor'
  8. import S2mien from './S2mien'
  9. import S3goods from './S3goods'
  10. const videoObj = {
  11. 探索庄园: {
  12. 汉代风华: 'more/1.mp4',
  13. 文物欣赏: 'more/2.mp4'
  14. },
  15. 汉代风华: {
  16. 探索庄园: 'more/3.mp4',
  17. 文物欣赏: 'more/4.mp4'
  18. },
  19. 文物欣赏: {
  20. 探索庄园: 'more/5.mp4',
  21. 汉代风华: 'more/6.mp4'
  22. }
  23. }
  24. type TxtType = '探索庄园' | '汉代风华' | '文物欣赏'
  25. const floorArr: TxtType[] = ['探索庄园', '汉代风华', '文物欣赏']
  26. function B1more() {
  27. const [floorTxt, setFloorTxt] = useState<TxtType>('探索庄园')
  28. const floorRef = useRef<TxtType>('探索庄园')
  29. // 需要播放的视频路径
  30. const [videoSrc, setVideoSrc] = useState('')
  31. useEffect(() => {
  32. if (videoSrc) {
  33. setTimeout(() => {
  34. const domAll: any = document.querySelectorAll('.A6videoBox video')
  35. if (domAll && domAll.length) {
  36. domAll.forEach((v: HTMLVideoElement) => {
  37. if (baseURL + videoSrc === v.src) v.play()
  38. else {
  39. v.pause()
  40. v.currentTime = 0
  41. }
  42. })
  43. }
  44. }, 100)
  45. }
  46. }, [videoSrc])
  47. useEffect(() => {
  48. const tempObj = Reflect.get(videoObj, floorRef.current)
  49. const temp = Reflect.get(tempObj, floorTxt)
  50. floorRef.current = floorTxt
  51. setVideoSrc(temp)
  52. }, [floorTxt])
  53. // 初始加载中动画
  54. const [isLoding, setIsLoding] = useState(true)
  55. return (
  56. <div className={styles.B1more}>
  57. {/* 三个主要页面 */}
  58. {/* <S1manor hidden={!!videoSrc || floorTxt !== '探索庄园'} isLoding={isLoding} />
  59. <S2mien hidden={!!videoSrc || floorTxt !== '汉代风华'} />
  60. <S3goods hidden={!!videoSrc || floorTxt !== '文物欣赏'} /> */}
  61. {/* 待完善 */}
  62. {/* <S1manor hidden={false} isLoding={isLoding} /> */}
  63. <S2mien hidden={false} />
  64. {/* 初始静态图 */}
  65. <BaseImg isShow={!isLoding} iconSrc={``} parentFu={() => setIsLoding(false)} moreSta={true} />
  66. {/* 6个视频 待完善 调试的时候不显示 */}
  67. {/* {myData.more.videos.map((src, index) => (
  68. <div
  69. className={classNames('A6videoBox', videoSrc === src ? 'A6videoBoxShow' : '')}
  70. key={index}
  71. >
  72. <video
  73. playsInline
  74. muted
  75. webkit-playsinline='true'
  76. x5-video-player-type='h5'
  77. onEnded={() => setVideoSrc('')}
  78. src={baseURL + src}
  79. >
  80. <source type='video/mp4' src={baseURL + src} />
  81. Your browser does not support the video tag.
  82. </video>
  83. </div>
  84. ))} */}
  85. {/* 底部三个按钮 */}
  86. <div className='A6floorBox' style={{ opacity: isLoding ? 0 : 1 }}>
  87. {floorArr.map(v => (
  88. <div
  89. onClick={() => setFloorTxt(v)}
  90. className={classNames(v === floorTxt ? 'A6FrowAc' : '')}
  91. key={v}
  92. >
  93. {v}
  94. </div>
  95. ))}
  96. </div>
  97. {/* 右下角的图标 */}
  98. <div
  99. hidden={floorTxt !== '探索庄园'}
  100. className='A6rBtn'
  101. style={{ opacity: isLoding ? 0 : 1 }}
  102. >
  103. <div className='A6rBtn1' title='陶庄园' onClick={() => history.push('/unend')}></div>
  104. <div className='A6rBtn2' title='仙居世界' onClick={() => history.push('/hots')}></div>
  105. </div>
  106. </div>
  107. )
  108. }
  109. const MemoB1more = React.memo(B1more)
  110. export default MemoB1more