mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-25 12:56:41 +07:00
added throttle for LoginScene
This commit is contained in:
parent
b0190edbf0
commit
341110e6ef
2 changed files with 14 additions and 13 deletions
|
@ -1,11 +1,6 @@
|
||||||
import React, {
|
import { FC, memo, useCallback, useEffect, useRef, useState } from "react";
|
||||||
FC,
|
|
||||||
memo,
|
import { debounce, throttle } from "throttle-debounce";
|
||||||
useCallback,
|
|
||||||
useEffect,
|
|
||||||
useRef,
|
|
||||||
useState,
|
|
||||||
} from "react";
|
|
||||||
|
|
||||||
import { useWindowSize } from "~/hooks/dom/useWindowSize";
|
import { useWindowSize } from "~/hooks/dom/useWindowSize";
|
||||||
|
|
||||||
|
@ -58,6 +53,7 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
|
||||||
const [loaded, setLoaded] = useState(false);
|
const [loaded, setLoaded] = useState(false);
|
||||||
const imageRefs = useRef<Array<SVGImageElement | null>>([]);
|
const imageRefs = useRef<Array<SVGImageElement | null>>([]);
|
||||||
const { isMobile } = useWindowSize();
|
const { isMobile } = useWindowSize();
|
||||||
|
const domRect = useRef<DOMRect>();
|
||||||
|
|
||||||
const onMouseMove = useCallback(
|
const onMouseMove = useCallback(
|
||||||
(event: MouseEvent): any => {
|
(event: MouseEvent): any => {
|
||||||
|
@ -65,7 +61,11 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { x, width } = containerRef.current.getBoundingClientRect();
|
if (!domRect.current) {
|
||||||
|
domRect.current = containerRef.current.getBoundingClientRect();
|
||||||
|
}
|
||||||
|
|
||||||
|
const { x, width } = domRect.current!;
|
||||||
const middle = (width - x) / 2;
|
const middle = (width - x) / 2;
|
||||||
const shift = event.pageX / middle / 2 - 0.5;
|
const shift = event.pageX / middle / 2 - 0.5;
|
||||||
|
|
||||||
|
@ -83,8 +83,9 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.addEventListener("mousemove", onMouseMove);
|
const listener = throttle(100, onMouseMove);
|
||||||
return () => document.removeEventListener("mousemove", onMouseMove);
|
document.addEventListener("mousemove", listener);
|
||||||
|
return () => document.removeEventListener("mousemove", listener);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
if (isMobile) {
|
if (isMobile) {
|
||||||
|
@ -123,7 +124,7 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
|
||||||
fill="url(#fallbackGradient)"
|
fill="url(#fallbackGradient)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{layers.map((it, index) => (
|
{layers.map(it => (
|
||||||
<image
|
<image
|
||||||
ref={it => imageRefs.current.push(it)}
|
ref={it => imageRefs.current.push(it)}
|
||||||
key={it.src}
|
key={it.src}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.image {
|
.image {
|
||||||
transition: opacity 1s;
|
transition: opacity 1s, transform 0.1s;
|
||||||
will-change: opacity, transform;
|
will-change: opacity, transform;
|
||||||
|
|
||||||
@include tablet {
|
@include tablet {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue