fab keep at the last position
This commit is contained in:
@@ -9,6 +9,7 @@ export const STOKEY_MSAUTH = `${APP_NAME}_msauth`;
|
|||||||
export const STOKEY_SETTING = `${APP_NAME}_setting`;
|
export const STOKEY_SETTING = `${APP_NAME}_setting`;
|
||||||
export const STOKEY_RULES = `${APP_NAME}_rules`;
|
export const STOKEY_RULES = `${APP_NAME}_rules`;
|
||||||
export const STOKEY_SYNC = `${APP_NAME}_sync`;
|
export const STOKEY_SYNC = `${APP_NAME}_sync`;
|
||||||
|
export const STOKEY_FAB = `${APP_NAME}_fab`;
|
||||||
|
|
||||||
export const GLOBAL_KEY = "*";
|
export const GLOBAL_KEY = "*";
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import {
|
|||||||
DEFAULT_SETTING,
|
DEFAULT_SETTING,
|
||||||
STOKEY_SETTING,
|
STOKEY_SETTING,
|
||||||
STOKEY_RULES,
|
STOKEY_RULES,
|
||||||
|
STOKEY_FAB,
|
||||||
GLOBLA_RULE,
|
GLOBLA_RULE,
|
||||||
GLOBAL_KEY,
|
GLOBAL_KEY,
|
||||||
} from "../config";
|
} from "../config";
|
||||||
@@ -32,6 +33,18 @@ export const getSetting = async () => ({
|
|||||||
*/
|
*/
|
||||||
export const getRules = async () => (await storage.getObj(STOKEY_RULES)) || [];
|
export const getRules = async () => (await storage.getObj(STOKEY_RULES)) || [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询fab位置信息
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export const getFab = async () => (await storage.getObj(STOKEY_FAB)) || {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置fab位置信息
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export const setFab = async (obj) => await storage.setObj(STOKEY_FAB, obj);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据href匹配规则
|
* 根据href匹配规则
|
||||||
* TODO: 支持通配符(*)匹配
|
* TODO: 支持通配符(*)匹配
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import ReactDOM from "react-dom/client";
|
|||||||
import Action from "./views/Action";
|
import Action from "./views/Action";
|
||||||
import createCache from "@emotion/cache";
|
import createCache from "@emotion/cache";
|
||||||
import { CacheProvider } from "@emotion/react";
|
import { CacheProvider } from "@emotion/react";
|
||||||
import { getSetting, getRules, matchRule } from "./libs";
|
import { getSetting, getRules, matchRule, getFab } from "./libs";
|
||||||
import { Translator } from "./libs/translator";
|
import { Translator } from "./libs/translator";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,6 +33,7 @@ import { Translator } from "./libs/translator";
|
|||||||
const translator = new Translator(rule, setting);
|
const translator = new Translator(rule, setting);
|
||||||
|
|
||||||
// 浮球按钮
|
// 浮球按钮
|
||||||
|
const fab = await getFab();
|
||||||
const $action = document.createElement("div");
|
const $action = document.createElement("div");
|
||||||
$action.setAttribute("id", "kiss-translator");
|
$action.setAttribute("id", "kiss-translator");
|
||||||
document.body.parentElement.appendChild($action);
|
document.body.parentElement.appendChild($action);
|
||||||
@@ -49,7 +50,7 @@ import { Translator } from "./libs/translator";
|
|||||||
ReactDOM.createRoot(shadowRootElement).render(
|
ReactDOM.createRoot(shadowRootElement).render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<CacheProvider value={cache}>
|
<CacheProvider value={cache}>
|
||||||
<Action translator={translator} />
|
<Action translator={translator} fab={fab} />
|
||||||
</CacheProvider>
|
</CacheProvider>
|
||||||
</React.StrictMode>
|
</React.StrictMode>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||||
import { limitNumber } from "../../libs/utils";
|
import { limitNumber } from "../../libs/utils";
|
||||||
import { isMobile } from "../../libs/mobile";
|
import { isMobile } from "../../libs/mobile";
|
||||||
|
import { setFab } from "../../libs";
|
||||||
|
|
||||||
const getEdgePosition = (
|
const getEdgePosition = (
|
||||||
{ x: left, y: top, edge },
|
{ x: left, y: top, edge },
|
||||||
@@ -88,7 +89,7 @@ export default function Draggable({
|
|||||||
setEdgeTimer(
|
setEdgeTimer(
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setPosition((pre) => getHidePosition(pre, w, h, width, height));
|
setPosition((pre) => getHidePosition(pre, w, h, width, height));
|
||||||
}, 2000)
|
}, 1500)
|
||||||
);
|
);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -149,6 +150,15 @@ export default function Draggable({
|
|||||||
goEdge(windowSize.w, windowSize.h, width, height);
|
goEdge(windowSize.w, windowSize.h, width, height);
|
||||||
}, [snapEdge, goEdge, windowSize.w, windowSize.h, width, height]);
|
}, [snapEdge, goEdge, windowSize.w, windowSize.h, width, height]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (position.hide) {
|
||||||
|
setFab({
|
||||||
|
x: position.x,
|
||||||
|
y: position.y,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [position]);
|
||||||
|
|
||||||
const opacity = useMemo(() => {
|
const opacity = useMemo(() => {
|
||||||
if (snapEdge) {
|
if (snapEdge) {
|
||||||
return position.hide ? 0.1 : 1;
|
return position.hide ? 0.1 : 1;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { StoragesProvider } from "../../hooks/Storage";
|
|||||||
import Popup from "../Popup";
|
import Popup from "../Popup";
|
||||||
import { debounce } from "../../libs/utils";
|
import { debounce } from "../../libs/utils";
|
||||||
|
|
||||||
export default function Action({ translator }) {
|
export default function Action({ translator, fab }) {
|
||||||
const fabWidth = 40;
|
const fabWidth = 40;
|
||||||
const [showPopup, setShowPopup] = useState(false);
|
const [showPopup, setShowPopup] = useState(false);
|
||||||
const [windowSize, setWindowSize] = useState({
|
const [windowSize, setWindowSize] = useState({
|
||||||
@@ -76,8 +76,8 @@ export default function Action({ translator }) {
|
|||||||
windowSize,
|
windowSize,
|
||||||
width: fabWidth,
|
width: fabWidth,
|
||||||
height: fabWidth,
|
height: fabWidth,
|
||||||
left: windowSize.w - fabWidth,
|
left: fab.x ?? windowSize.w - fabWidth,
|
||||||
top: windowSize.h / 2,
|
top: fab.y ?? windowSize.h / 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user