index.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { baseURL, myData } from '@/utils/http'
  4. import classNames from 'classnames'
  5. import HotIcon from '@/components/HotIcon'
  6. import Hot2 from '@/pages/A2visit/PanoVideo/Hot2'
  7. import history from '@/utils/history'
  8. import ZHot0 from '@/components/ZHot0'
  9. type Props = {
  10. hidden: boolean
  11. }
  12. const dataTemp = myData.more['汉代百科']
  13. const data1 = dataTemp['物']
  14. function S2mien({ hidden }: Props) {
  15. const sroolDomRef = useRef<HTMLDivElement>(null)
  16. // 选中的索引
  17. const [hotInd, setHotInd] = useState(-1)
  18. // 打开热点的索引
  19. const [opnInd, setOpenInd] = useState(-1)
  20. // 从热点图标子组件点击
  21. const clickSon = useCallback((index: number) => {
  22. const name = data1.hot[index].name
  23. // 打开热点 / 跳云起图页面
  24. if (name === '四神云气图') history.push('/yun')
  25. else setOpenInd(index)
  26. // 移动端点击 高亮
  27. setHotInd(index)
  28. }, [])
  29. useEffect(() => {
  30. if (hotInd === -1) return
  31. else {
  32. // 左侧滚动到中间
  33. if (sroolDomRef.current) {
  34. // sroolDomRef.current.scrollTop = 40 * hotInd - 120
  35. sroolDomRef.current.scrollTo({ top: 40 * hotInd - 120, behavior: 'smooth' })
  36. }
  37. }
  38. }, [hotInd])
  39. const hotName = useMemo(() => {
  40. let name = ''
  41. if (opnInd > -1 && data1.hot[opnInd]) name = data1.hot[opnInd].name
  42. return name
  43. }, [opnInd])
  44. return (
  45. <div
  46. hidden={hidden}
  47. className={styles.S2mien}
  48. style={{ backgroundImage: `url(${baseURL + data1.bg})`, zIndex: opnInd > -1 ? 50 : 1 }}
  49. >
  50. {/* 左侧 */}
  51. <div
  52. className='S2left'
  53. style={{ backgroundImage: `url(${baseURL}more/s1Zhe.png)`, opacity: opnInd > -1 ? 0 : 1 }}
  54. >
  55. {/* 物----------- */}
  56. <div ref={sroolDomRef} className='S2leftMain'>
  57. {data1.hot.map((item, index) => (
  58. <div
  59. onClick={() => clickSon(index)}
  60. className={classNames('S2leftRow', hotInd === index ? 'S2leftRowAc' : '')}
  61. // onMouseUp={() => setHotInd(index)}
  62. key={index}
  63. >
  64. {item.name}
  65. </div>
  66. ))}
  67. </div>
  68. </div>
  69. {/* 物-----------右侧 */}
  70. <div className='S2right'>
  71. {/* 热点图标 */}
  72. {data1.hot.map((item, index) => (
  73. <HotIcon
  74. isModel={item.isModel ? true : false}
  75. key={index}
  76. index={index}
  77. clickSon={val => clickSon(val)}
  78. hoverSrc={item.hoverSrc}
  79. style={{
  80. top: item.loc.top,
  81. left: item.loc.left
  82. }}
  83. zIndex={item.zIndex}
  84. // 这个模块特有的参数
  85. hoverFu={val => setHotInd(val)}
  86. isHoverAc={hotInd === index}
  87. // isZhan={true}
  88. isXiao={0.6}
  89. // isXiao={isPc ? 0.6 : 0}
  90. />
  91. ))}
  92. </div>
  93. {/* 打开热点页面 */}
  94. {opnInd > -1 ? (
  95. hotName === '周礼九拜' ? (
  96. <ZHot0 closeFu={() => setOpenInd(-1)} />
  97. ) : (
  98. <Hot2 data={data1.hot[opnInd].data} closeFu={() => setOpenInd(-1)} name={hotName} />
  99. )
  100. ) : null}
  101. </div>
  102. )
  103. }
  104. const MemoS2mien = React.memo(S2mien)
  105. export default MemoS2mien