feat: tranbox offset

This commit is contained in:
Gabe Yuan
2024-04-21 19:19:06 +08:00
parent 319aaf8132
commit de7a97fb76
5 changed files with 64 additions and 25 deletions

View File

@@ -710,12 +710,20 @@ export const I18N = {
en: `Open Translate Popup/Translate Selected Shortcut`, en: `Open Translate Popup/Translate Selected Shortcut`,
}, },
tranbtn_offset_x: { tranbtn_offset_x: {
zh: `翻译按钮偏移X0-100`, zh: `翻译按钮偏移X±200`,
en: `Translate Button Offset X (0-100)`, en: `Translate Button Offset X (±200)`,
}, },
tranbtn_offset_y: { tranbtn_offset_y: {
zh: `翻译按钮偏移Y0-100`, zh: `翻译按钮偏移Y±200`,
en: `Translate Button Offset Y (0-100)`, en: `Translate Button Offset Y (±200)`,
},
tranbox_offset_x: {
zh: `翻译框偏移X±200`,
en: `Translate Box Offset X (±200)`,
},
tranbox_offset_y: {
zh: `翻译框偏移Y±200`,
en: `Translate Box Offset Y (±200)`,
}, },
translated_text: { translated_text: {
zh: `译文`, zh: `译文`,

View File

@@ -430,6 +430,8 @@ export const DEFAULT_TRANBOX_SETTING = {
tranboxShortcut: DEFAULT_TRANBOX_SHORTCUT, tranboxShortcut: DEFAULT_TRANBOX_SHORTCUT,
btnOffsetX: 10, btnOffsetX: 10,
btnOffsetY: 10, btnOffsetY: 10,
boxOffsetX: 0,
boxOffsetY: 10,
hideTranBtn: false, // 是否隐藏翻译按钮 hideTranBtn: false, // 是否隐藏翻译按钮
hideClickAway: false, // 是否点击外部关闭弹窗 hideClickAway: false, // 是否点击外部关闭弹窗
simpleStyle: false, // 是否简洁界面 simpleStyle: false, // 是否简洁界面

View File

@@ -27,10 +27,10 @@ export default function Tranbox() {
let { name, value } = e.target; let { name, value } = e.target;
switch (name) { switch (name) {
case "btnOffsetX": case "btnOffsetX":
value = limitNumber(value, 0, 100);
break;
case "btnOffsetY": case "btnOffsetY":
value = limitNumber(value, 0, 100); case "boxOffsetX":
case "boxOffsetY":
value = limitNumber(value, -200, 200);
break; break;
default: default:
} }
@@ -55,6 +55,8 @@ export default function Tranbox() {
tranboxShortcut, tranboxShortcut,
btnOffsetX, btnOffsetX,
btnOffsetY, btnOffsetY,
boxOffsetX = 0,
boxOffsetY = 10,
hideTranBtn = false, hideTranBtn = false,
hideClickAway = false, hideClickAway = false,
simpleStyle = false, simpleStyle = false,
@@ -159,6 +161,24 @@ export default function Tranbox() {
onChange={handleChange} onChange={handleChange}
/> />
<TextField
size="small"
label={i18n("tranbox_offset_x")}
type="number"
name="boxOffsetX"
defaultValue={boxOffsetX}
onChange={handleChange}
/>
<TextField
size="small"
label={i18n("tranbox_offset_y")}
type="number"
name="boxOffsetY"
defaultValue={boxOffsetY}
onChange={handleChange}
/>
<TextField <TextField
select select
size="small" size="small"

View File

@@ -5,18 +5,11 @@ export default function TranBtn({
onTrigger, onTrigger,
btnEvent, btnEvent,
position, position,
tranboxSetting, btnOffsetX,
btnOffsetY,
}) { }) {
const left = limitNumber( const left = limitNumber(position.x + btnOffsetX, 0, window.innerWidth - 32);
position.x + tranboxSetting.btnOffsetX, const top = limitNumber(position.y + btnOffsetY, 0, window.innerHeight - 32);
0,
window.innerWidth - 32
);
const top = limitNumber(
position.y + tranboxSetting.btnOffsetY,
0,
window.innerHeight - 32
);
return ( return (
<div <div

View File

@@ -29,6 +29,10 @@ export default function Slection({
tranboxShortcut = DEFAULT_TRANBOX_SHORTCUT, tranboxShortcut = DEFAULT_TRANBOX_SHORTCUT,
triggerMode = OPT_TRANBOX_TRIGGER_CLICK, triggerMode = OPT_TRANBOX_TRIGGER_CLICK,
extStyles, extStyles,
btnOffsetX,
btnOffsetY,
boxOffsetX = 0,
boxOffsetY = 10,
} = tranboxSetting; } = tranboxSetting;
const boxWidth = const boxWidth =
@@ -79,16 +83,18 @@ export default function Slection({
const rect = selection?.getRangeAt(0)?.getBoundingClientRect(); const rect = selection?.getRangeAt(0)?.getBoundingClientRect();
if (rect && followSelection) { if (rect && followSelection) {
const x = (rect.left + rect.right) / 2 + boxOffsetX;
const y = rect.bottom + boxOffsetY;
setBoxPosition({ setBoxPosition({
x: limitNumber(rect.right, 0, window.innerWidth - 300), x: limitNumber(x, 0, window.innerWidth - 300),
y: limitNumber(rect.bottom, 0, window.innerHeight - 200), y: limitNumber(y, 0, window.innerHeight - 200),
}); });
} }
setSelText(selectedText); setSelText(selectedText);
setText(selectedText); setText(selectedText);
setShowBox(true); setShowBox(true);
}, [followSelection]); }, [followSelection, boxOffsetX, boxOffsetY]);
const btnEvent = useMemo(() => { const btnEvent = useMemo(() => {
if (isMobile) { if (isMobile) {
@@ -114,9 +120,11 @@ export default function Slection({
const rect = selection?.getRangeAt(0)?.getBoundingClientRect(); const rect = selection?.getRangeAt(0)?.getBoundingClientRect();
if (rect && followSelection) { if (rect && followSelection) {
const x = (rect.left + rect.right) / 2 + boxOffsetX;
const y = rect.bottom + boxOffsetY;
setBoxPosition({ setBoxPosition({
x: limitNumber(rect.right, 0, window.innerWidth - 300), x: limitNumber(x, 0, window.innerWidth - 300),
y: limitNumber(rect.bottom, 0, window.innerHeight - 200), y: limitNumber(y, 0, window.innerHeight - 200),
}); });
} }
@@ -139,7 +147,14 @@ export default function Slection({
handleMouseup handleMouseup
); );
}; };
}, [hideTranBtn, triggerMode, followSelection, handleTrigger]); }, [
hideTranBtn,
triggerMode,
followSelection,
boxOffsetX,
boxOffsetY,
handleTrigger,
]);
useEffect(() => { useEffect(() => {
if (isExt) { if (isExt) {
@@ -225,7 +240,8 @@ export default function Slection({
{showBtn && ( {showBtn && (
<TranBtn <TranBtn
position={position} position={position}
tranboxSetting={tranboxSetting} btnOffsetX={btnOffsetX}
btnOffsetY={btnOffsetY}
btnEvent={btnEvent} btnEvent={btnEvent}
onTrigger={(e) => { onTrigger={(e) => {
e.stopPropagation(); e.stopPropagation();