|
|
@@ -1,4 +1,4 @@
|
|
|
-import React, { useMemo, useState, useRef, useCallback } from 'react'
|
|
|
+import React, { useMemo, useState, useRef, useCallback, useEffect } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
import { Button } from 'antd'
|
|
|
import { baseURL } from '@/utils/http'
|
|
|
@@ -15,21 +15,23 @@ const btnArr = ['短屏侧', '长屏侧']
|
|
|
|
|
|
type Props = {
|
|
|
html: string
|
|
|
- closeFu: () => void
|
|
|
+ closeFu: (val: any) => void
|
|
|
name: string
|
|
|
url: string
|
|
|
txtMoveTemp: any
|
|
|
- setTxtMove: (val: any, key: '1' | '2') => void
|
|
|
}
|
|
|
|
|
|
-function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
+function A4look({ html, closeFu, name, url, txtMoveTemp }: Props) {
|
|
|
const [cut, setCut] = useState('短屏侧')
|
|
|
|
|
|
- const txtMove = useMemo(() => {
|
|
|
- let obj = { ...txtMoveTemp['1'] }
|
|
|
- if (name === '户外裸眼3D' && cut !== '短屏侧') obj = { ...txtMoveTemp['2'] }
|
|
|
- return obj
|
|
|
- }, [cut, name, txtMoveTemp])
|
|
|
+ const [txtMove, setTxtMove] = useState({
|
|
|
+ 1: { left: 10, top: 10, scale: 5 },
|
|
|
+ 2: { left: 10, top: 10, scale: 5 }
|
|
|
+ })
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ setTxtMove({ ...txtMoveTemp })
|
|
|
+ }, [txtMoveTemp])
|
|
|
|
|
|
const page = useMemo(() => {
|
|
|
let txt = name
|
|
|
@@ -62,11 +64,11 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
isDragging: true,
|
|
|
startX: e.clientX,
|
|
|
startY: e.clientY,
|
|
|
- startLeft: txtMove.left,
|
|
|
- startTop: txtMove.top
|
|
|
+ startLeft: txtMove[cut === '短屏侧' ? '1' : '2'].left,
|
|
|
+ startTop: txtMove[cut === '短屏侧' ? '1' : '2'].top
|
|
|
}
|
|
|
},
|
|
|
- [txtMove.left, txtMove.top]
|
|
|
+ [cut, txtMove]
|
|
|
)
|
|
|
|
|
|
// 滑块拖动相关
|
|
|
@@ -83,10 +85,10 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
scaleDragRef.current = {
|
|
|
isDragging: true,
|
|
|
startX: e.clientX,
|
|
|
- startScale: txtMove.scale
|
|
|
+ startScale: txtMove[cut === '短屏侧' ? '1' : '2'].scale
|
|
|
}
|
|
|
},
|
|
|
- [txtMove.scale]
|
|
|
+ [cut, txtMove]
|
|
|
)
|
|
|
|
|
|
// 全局鼠标移动和抬起事件
|
|
|
@@ -101,7 +103,8 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
const percentY = (deltaY / page[1]) * 100 * (1 / domSize)
|
|
|
const newLeft = Math.max(0, Math.min(100, txtDragRef.current.startLeft + percentX))
|
|
|
const newTop = Math.max(0, Math.min(100, txtDragRef.current.startTop + percentY))
|
|
|
- setTxtMove({ left: newLeft, top: newTop }, cut === '短屏侧' ? '1' : '2')
|
|
|
+ const key = cut === '短屏侧' ? '1' : '2'
|
|
|
+ setTxtMove(prev => ({ ...prev, [key]: { ...prev[key], left: newLeft, top: newTop } }))
|
|
|
}
|
|
|
// 滑块拖动
|
|
|
if (scaleDragRef.current.isDragging && scaleBarRef.current) {
|
|
|
@@ -112,7 +115,8 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
1,
|
|
|
Math.min(100, scaleDragRef.current.startScale + deltaX * percentPerPixel)
|
|
|
)
|
|
|
- setTxtMove({ scale: newScale }, cut === '短屏侧' ? '1' : '2')
|
|
|
+ const key = cut === '短屏侧' ? '1' : '2'
|
|
|
+ setTxtMove(prev => ({ ...prev, [key]: { ...prev[key], scale: newScale } }))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -145,9 +149,9 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
className='A4Lmove'
|
|
|
dangerouslySetInnerHTML={{ __html: html }}
|
|
|
style={{
|
|
|
- left: txtMove.left + '%',
|
|
|
- top: txtMove.top + '%',
|
|
|
- transform: `scale(${txtMove.scale})`
|
|
|
+ left: txtMove[cut === '短屏侧' ? '1' : '2'].left + '%',
|
|
|
+ top: txtMove[cut === '短屏侧' ? '1' : '2'].top + '%',
|
|
|
+ transform: `scale(${txtMove[cut === '短屏侧' ? '1' : '2'].scale})`
|
|
|
}}
|
|
|
onMouseDown={handleTxtMouseDown}
|
|
|
></div>
|
|
|
@@ -155,10 +159,10 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
|
|
|
{/* 顶部放大进度条 */}
|
|
|
<div className='A4Lscale'>
|
|
|
- <h3>鼠标移入文字,按住可拖动文字移动</h3>
|
|
|
+ <h3>鼠标移入文字,按住可拖动文字移动;鼠标按住下方白色手柄拖动调节文字大小</h3>
|
|
|
<div className='A4Lscale2' ref={scaleBarRef}>
|
|
|
<div
|
|
|
- style={{ left: ((txtMove.scale - 1) / 99) * 100 + '%' }}
|
|
|
+ style={{ left: ((txtMove[cut === '短屏侧' ? '1' : '2'].scale - 1) / 99) * 100 + '%' }}
|
|
|
onMouseDown={handleScaleMouseDown}
|
|
|
></div>
|
|
|
</div>
|
|
|
@@ -174,7 +178,7 @@ function A4look({ html, closeFu, name, url, txtMoveTemp, setTxtMove }: Props) {
|
|
|
</div>
|
|
|
) : null}
|
|
|
|
|
|
- <Button className='A4Lx' onClick={closeFu}>
|
|
|
+ <Button className='A4Lx' onClick={() => closeFu(txtMove)}>
|
|
|
关闭
|
|
|
</Button>
|
|
|
</div>
|