index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import React, { useCallback, useEffect, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import classNames from 'classnames'
  4. import '@/assets/styles/iconfont/iconfont.css'
  5. import logoImg from '@/assets/img/logo.png'
  6. import top4Img from '@/assets/img/top4.png'
  7. import bgmMp3 from '@/assets/img/bgm.mp3'
  8. import Share from './Share'
  9. import Bottom from './Bottom'
  10. import { MyObjRowType } from './Bottom/data'
  11. import { isMobileFu } from '@/utils/history'
  12. import xiaImg from '@/assets/img/jiantou_w.png'
  13. function A1home() {
  14. const audioRef = useRef<HTMLAudioElement>(null)
  15. const clickBtn = useCallback((val: '首页' | '室内' | '室外') => {
  16. setPageKey(val)
  17. setAudioSta(true)
  18. }, [])
  19. // 首页/室内/室外
  20. const [pageKey, setPageKey] = useState<'首页' | '室内' | '室外'>('首页')
  21. useEffect(() => {
  22. if (window.location.href.includes('?type=kj')) {
  23. setPageKey('室外')
  24. }
  25. }, [])
  26. // 音乐的播放和暂停
  27. const [audioSta, setAudioSta] = useState(false)
  28. useEffect(() => {
  29. if (audioRef.current) audioSta ? audioRef.current.play() : audioRef.current.pause()
  30. }, [audioSta])
  31. // 分享、介绍
  32. const [sonPageShow, setSonPageShow] = useState<'分享' | '介绍' | ''>('')
  33. // 选中的对象数据
  34. const [acObj, setAcObj] = useState({} as MyObjRowType)
  35. useEffect(() => {
  36. if (acObj.type && acObj.type !== 'kk') {
  37. // 加载全景
  38. embedpano({
  39. // 地址待完善
  40. swf: `//www.4dkankan.com/panorama/showviewer/lib/krpano/tour.swf`,
  41. xml: `//4dkk.4dage.com/720yun_fd_manage/${WKID}/tour.xml`,
  42. target: 'panoBox',
  43. html5: 'auto',
  44. mobilescale: 1.0,
  45. passQueryParameters: true
  46. })
  47. }
  48. }, [acObj.type])
  49. useEffect(() => {
  50. // 切换全景
  51. const code = acObj.sceneCode
  52. const krpano: any = document.getElementById('krpanoSWFObject')
  53. if (krpano && code) {
  54. krpano.call(`loadscene(scene_${code}, null,null, BLEND(1.0, easeInCubic) )`)
  55. }
  56. }, [acObj.sceneCode])
  57. // 手机端icon的显示和隐藏
  58. const [iconShow, setIconShow] = useState(false)
  59. return (
  60. <div className={styles.A1home}>
  61. <audio ref={audioRef} src={bgmMp3} loop />
  62. {/* 初始页面 */}
  63. {pageKey === '首页' ? (
  64. <div className='box1'>
  65. <img className='b1logo' src={logoImg} alt='' />
  66. <div className='b1Btn'>
  67. <img className='b1img' src={top4Img} alt='' />
  68. <ul>
  69. {/* 待完善 */}
  70. <li onClick={() => clickBtn('室内')} style={{ opacity: 0, pointerEvents: 'none' }}>
  71. 展馆漫游
  72. </li>
  73. <li onClick={() => clickBtn('室外')}>展区漫游</li>
  74. </ul>
  75. </div>
  76. </div>
  77. ) : null}
  78. {/* 右侧按钮 */}
  79. <div className={classNames('v_aside', iconShow ? 'v_asideShow' : '')}>
  80. {isMobileFu() ? (
  81. <div className='mTopIcon' onClick={() => setIconShow(!iconShow)}>
  82. <img src={xiaImg} alt='' />
  83. </div>
  84. ) : null}
  85. <ul>
  86. {/* 待完善 */}
  87. <li onClick={() => setSonPageShow('介绍')} hidden>
  88. <i className='iconfont icon-jianjie'></i>
  89. </li>
  90. <li onClick={() => setAudioSta(!audioSta)}>
  91. <i
  92. className={classNames('iconfont', audioSta ? 'icon-yinlekai' : 'icon-yinleguan')}
  93. ></i>
  94. </li>
  95. <li onClick={() => setSonPageShow('分享')}>
  96. <i className='iconfont icon-fenxiang'></i>
  97. </li>
  98. </ul>
  99. </div>
  100. {/* 分享页面 */}
  101. <Share isShowType={sonPageShow} closeFu={() => setSonPageShow('')} />
  102. {/* 底部页面 */}
  103. <Bottom setTopObj={val => setAcObj(val)} pageKey={pageKey} />
  104. {/* 顶部title */}
  105. {acObj.sceneCode ? (
  106. <>
  107. <div className='A1title'>{acObj.sceneTitle}</div>
  108. <div className='iframeBox'>
  109. {/* 四维看看 地址待完善*/}
  110. {acObj.type === 'kk' ? (
  111. <iframe
  112. key={acObj.sceneCode}
  113. src={`https://www.4dkankan.com/spg.html?m=${acObj.sceneCode}&hideNav`}
  114. frameBorder='0'
  115. title='qj'
  116. ></iframe>
  117. ) : (
  118. // 加载全景
  119. <div id='panoBox'></div>
  120. )}
  121. </div>
  122. </>
  123. ) : null}
  124. {/* 嵌套页面 */}
  125. </div>
  126. )
  127. }
  128. const MemoA1home = React.memo(A1home)
  129. export default MemoA1home