index.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, { useCallback, useEffect, useMemo, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { VisitHotDataType } from '@/types'
  4. import classNames from 'classnames'
  5. import LazyImg from '@/components/LazyImg'
  6. import { baseURL } from '@/utils/http'
  7. type Props = {
  8. closeFu: () => void
  9. data: VisitHotDataType
  10. name: string
  11. }
  12. function Hot2({ closeFu, data, name }: Props) {
  13. const [opShow, setOpShow] = useState(false)
  14. useEffect(() => {
  15. setTimeout(() => {
  16. setOpShow(true)
  17. }, 300)
  18. }, [])
  19. // 底部选中
  20. const [flooInd, setFlooInd] = useState(0)
  21. const acData = useMemo(() => {
  22. return data[flooInd] || []
  23. }, [data, flooInd])
  24. // 点击切换底部
  25. const flooIndFu = useCallback((ind: number) => {
  26. const dom = document.querySelector('.h2TuWen')
  27. if (dom) dom.scrollTop = 0
  28. setFlooInd(ind)
  29. }, [])
  30. return (
  31. <div className={styles.Hot2} style={{ opacity: opShow ? 1 : 0 }}>
  32. <div className='h2Main' style={{ backgroundImage: `url(${baseURL}visit/hot2bj.png)` }}>
  33. {/* 标题 */}
  34. <div className='h2Titele'>
  35. <img src={`${baseURL}visit/img-yun1.png`} alt='' />
  36. <img className='h2TimgR' src={`${baseURL}visit/img-yun2.png`} alt='' />
  37. {name}
  38. </div>
  39. <div className={classNames('h2TuWen', data.length <= 1 ? 'h2TuWenDuo' : '')}>
  40. {/* 图片 */}
  41. {acData.imgArr.map((url, index) => (
  42. <LazyImg src={baseURL + url} key={index} />
  43. ))}
  44. {/* 文字 */}
  45. <div className='h2txt' dangerouslySetInnerHTML={{ __html: acData.txt }}></div>
  46. </div>
  47. {/* 底部 */}
  48. {data.length <= 1 ? null : (
  49. <div className='h2FlooBox'>
  50. <div className='h2Floo'>
  51. {data.map((item, index) => (
  52. <div
  53. onClick={() => flooIndFu(index)}
  54. className={classNames(
  55. 'h2FlooRow sizeNo',
  56. flooInd === index ? 'h2FlooRowShow' : ''
  57. )}
  58. key={index}
  59. >
  60. {item.name}
  61. </div>
  62. ))}
  63. </div>
  64. </div>
  65. )}
  66. {/* 返回按钮 */}
  67. <div className='h2Back'>
  68. <img onClick={closeFu} src={`${baseURL}visit/back.png`} alt='' />
  69. </div>
  70. </div>
  71. <div className='h2Right' onClick={closeFu}></div>
  72. </div>
  73. )
  74. }
  75. const MemoHot2 = React.memo(Hot2)
  76. export default MemoHot2