1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 21:06:42 +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, { 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}

View file

@ -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 {