1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 04:46:40 +07:00

added throttle for LoginScene

This commit is contained in:
Fedor Katurov 2022-08-04 15:12:33 +07:00
parent b0190edbf0
commit 341110e6ef
2 changed files with 14 additions and 13 deletions

View file

@ -1,11 +1,6 @@
import React, {
FC,
memo,
useCallback,
useEffect,
useRef,
useState,
} from "react";
import { FC, memo, useCallback, useEffect, useRef, useState } from "react";
import { debounce, throttle } from "throttle-debounce";
import { useWindowSize } from "~/hooks/dom/useWindowSize";
@ -58,6 +53,7 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
const [loaded, setLoaded] = useState(false);
const imageRefs = useRef<Array<SVGImageElement | null>>([]);
const { isMobile } = useWindowSize();
const domRect = useRef<DOMRect>();
const onMouseMove = useCallback(
(event: MouseEvent): any => {
@ -65,7 +61,11 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
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 shift = event.pageX / middle / 2 - 0.5;
@ -83,8 +83,9 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
);
useEffect(() => {
document.addEventListener("mousemove", onMouseMove);
return () => document.removeEventListener("mousemove", onMouseMove);
const listener = throttle(100, onMouseMove);
document.addEventListener("mousemove", listener);
return () => document.removeEventListener("mousemove", listener);
}, []);
if (isMobile) {
@ -123,7 +124,7 @@ const LoginScene: FC<LoginSceneProps> = memo(() => {
fill="url(#fallbackGradient)"
/>
{layers.map((it, index) => (
{layers.map(it => (
<image
ref={it => imageRefs.current.push(it)}
key={it.src}

View file

@ -9,7 +9,7 @@
}
.image {
transition: opacity 1s;
transition: opacity 1s, transform 0.1s;
will-change: opacity, transform;
@include tablet {