index.tsx 2.5 KB

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