|
|
@@ -5,15 +5,22 @@ import { isPc, myData } from '@/utils/http'
|
|
|
import { Tooltip } from 'antd'
|
|
|
import { callIframeFu, isMobiileFu } from '@/utils/history'
|
|
|
import classNames from 'classnames'
|
|
|
+import { modalTxtTab } from './data'
|
|
|
|
|
|
function ModalTxt({
|
|
|
setIsShowTabBar,
|
|
|
- setIsShowMzmTitle
|
|
|
+ setIsShowMzmTitle,
|
|
|
+ setBottomTxt
|
|
|
}: {
|
|
|
setIsShowTabBar: (isShowTabBar: boolean) => void
|
|
|
setIsShowMzmTitle: (isShowMzmTitle: boolean) => void
|
|
|
+ setBottomTxt: (val: string) => void
|
|
|
}) {
|
|
|
const [selectedTab, setSelectedTab] = useState(0)
|
|
|
+ const selectedTabRef = useRef(0)
|
|
|
+ useEffect(() => {
|
|
|
+ selectedTabRef.current = selectedTab
|
|
|
+ }, [selectedTab])
|
|
|
|
|
|
const [activeAId, setActiveAId] = useState<number | null>(null)
|
|
|
const [showTooltip, setShowTooltip] = useState(-1)
|
|
|
@@ -94,13 +101,12 @@ function ModalTxt({
|
|
|
<div className='title'>{word}</div>
|
|
|
<div
|
|
|
className='close'
|
|
|
- onClick={(e) => {
|
|
|
+ onClick={e => {
|
|
|
e.preventDefault()
|
|
|
e.stopPropagation()
|
|
|
setShowTooltip(-1)
|
|
|
}}
|
|
|
-
|
|
|
- onTouchEnd={(e) => {
|
|
|
+ onTouchEnd={e => {
|
|
|
e.preventDefault()
|
|
|
e.stopPropagation()
|
|
|
setShowTooltip(-1)
|
|
|
@@ -109,7 +115,14 @@ function ModalTxt({
|
|
|
<img src={require('@/assets/img/close.png')} alt='' draggable='false' />
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div className='content' ref={contentRef} onTouchStart={(e) => handleTouchStart(e, content_touchStartX)} onTouchMove={handleTooltipTouchMove}>{define}</div>
|
|
|
+ <div
|
|
|
+ className='content'
|
|
|
+ ref={contentRef}
|
|
|
+ onTouchStart={e => handleTouchStart(e, content_touchStartX)}
|
|
|
+ onTouchMove={handleTooltipTouchMove}
|
|
|
+ >
|
|
|
+ {define}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
}
|
|
|
getPopupContainer={() => document.body.querySelector('#root') as HTMLElement}
|
|
|
@@ -198,63 +211,59 @@ function ModalTxt({
|
|
|
callIframeFu('showInscription', 0)
|
|
|
}
|
|
|
|
|
|
- const handleTabClick = (tabIndex: number) => {
|
|
|
- setSelectedTab(tabIndex)
|
|
|
- callIframeFu('showInscription', tabIndex)
|
|
|
+ const handleTabClick = (tabIndex: number, txt: string) => {
|
|
|
+ setBottomTxt(txt)
|
|
|
+
|
|
|
+ let index = tabIndex
|
|
|
+ if (selectedTabRef.current === index) index = 0
|
|
|
+
|
|
|
+ setSelectedTab(index)
|
|
|
+ callIframeFu('showInscription', index === 0 ? -1 : index)
|
|
|
+
|
|
|
+ if (index === 0) setIsShowMzmTitle(false)
|
|
|
}
|
|
|
|
|
|
return (
|
|
|
<div className={classNames(styles.modalTxt, isPc ? '' : styles.modalTxtMo)} id='modalTxt'>
|
|
|
<div className='modalTxtContainner'>
|
|
|
<div className='topBar'>
|
|
|
- <div className='beie'>
|
|
|
+ <div className='beie' hidden={selectedTab !== 0}>
|
|
|
<img src={require('@/assets/img/beie.png')} alt='' />
|
|
|
<div className='txt' onClick={handleBeie}>
|
|
|
碑额
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div className='tab ' onClick={() => handleTabClick(1)}>
|
|
|
- <img
|
|
|
- src={require(`@/assets/img/btn_ModalTxt_bg${selectedTab === 1 ? '_ac' : ''}.png`)}
|
|
|
- alt=''
|
|
|
- />
|
|
|
- <div className={`tabNub ${selectedTab === 1 ? 'tabNubAc' : ''}`}></div>
|
|
|
- <div
|
|
|
- className='txt'
|
|
|
- style={{ display: selectedTab === 1 || selectedTab === 0 ? 'block' : 'none' }}
|
|
|
- >
|
|
|
- 造碑人与碑主
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className='tab ' onClick={() => handleTabClick(2)}>
|
|
|
- <img
|
|
|
- src={require(`@/assets/img/btn_ModalTxt_bg${selectedTab === 2 ? '_ac' : ''}.png`)}
|
|
|
- alt=''
|
|
|
- />
|
|
|
- <div className={`tabNub ${selectedTab === 2 ? 'tabNubAc' : ''}`}></div>
|
|
|
- <div
|
|
|
- className='txt'
|
|
|
- style={{ display: selectedTab === 2 || selectedTab === 0 ? 'block' : 'none' }}
|
|
|
- >
|
|
|
- 程哲生平与家族世系
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className='tab ' onClick={() => handleTabClick(3)}>
|
|
|
- <img
|
|
|
- src={require(`@/assets/img/btn_ModalTxt_bg${selectedTab === 3 ? '_ac' : ''}.png`)}
|
|
|
- alt=''
|
|
|
- />
|
|
|
- <div className={`tabNub ${selectedTab === 3 ? 'tabNubAc' : ''}`}></div>
|
|
|
- <div
|
|
|
- className='txt'
|
|
|
- style={{ display: selectedTab === 3 || selectedTab === 0 ? 'block' : 'none' }}
|
|
|
- >
|
|
|
- 颂文
|
|
|
+
|
|
|
+ {modalTxtTab.map(item => (
|
|
|
+ <div key={item.key} className='tab' onClick={() => handleTabClick(item.key, item.name)}>
|
|
|
+ <img
|
|
|
+ src={require(`@/assets/img/btn_ModalTxt_bg${
|
|
|
+ selectedTab === item.key ? '_ac' : ''
|
|
|
+ }.png`)}
|
|
|
+ alt=''
|
|
|
+ />
|
|
|
+ <div className={`tabNub ${selectedTab === item.key ? 'tabNubAc' : ''}`}>
|
|
|
+ {item.sonTxt}
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ className='txt'
|
|
|
+ style={{ opacity: selectedTab === item.key || selectedTab === 0 ? '1' : '0' }}
|
|
|
+ >
|
|
|
+ {item.name}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ ))}
|
|
|
+
|
|
|
+
|
|
|
</div>
|
|
|
|
|
|
- <div className='intro' style={{ opacity: selectedTab !== 0 ? '1' : '0' }}>
|
|
|
+ <div
|
|
|
+ className='intro'
|
|
|
+ style={{
|
|
|
+ opacity: selectedTab !== 0 ? '1' : '0',
|
|
|
+ height: selectedTab !== 0 ? '15%' : '5%'
|
|
|
+ }}
|
|
|
+ >
|
|
|
{selectedTab !== 0 && myData.readDetail[selectedTab - 1].intro}
|
|
|
</div>
|
|
|
|