feat: tranbox offset
This commit is contained in:
@@ -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: `翻译按钮偏移X(0-100)`,
|
zh: `翻译按钮偏移X(±200)`,
|
||||||
en: `Translate Button Offset X (0-100)`,
|
en: `Translate Button Offset X (±200)`,
|
||||||
},
|
},
|
||||||
tranbtn_offset_y: {
|
tranbtn_offset_y: {
|
||||||
zh: `翻译按钮偏移Y(0-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: `译文`,
|
||||||
|
|||||||
@@ -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, // 是否简洁界面
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user