123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import React, { useCallback, useEffect, useRef, useState } from 'react';
- import useResize from '@/utils/hooks/useResize';
-
- export function useFullScreen(elRef) {
- const [isFullScreen, setIsFullScreen] = useState(false);
- const fullScreenRef = useRef();
- fullScreenRef.current = isFullScreen;
-
- const toggleFullScreen = useCallback((e) => {
- if (!document.fullscreenElement) {
- elRef.current
- .requestFullscreen()
- .then(() => {
- setIsFullScreen(true);
- })
- .catch((err) => {
- console.log(err.message);
- });
- }
- }, []);
-
- useEffect(() => {
- const handleFullScreenChange = (e) => {
- setIsFullScreen(document.fullscreenElement === fullScreenRef.current);
- };
-
- elRef.current.onfullscreenchange = handleFullScreenChange;
-
- // elRef.current.addEventListener('fullscreenchange', handleFullScreenChange);
-
- return elRef.current.removeEventListener('fullscreenchange', handleFullScreenChange);
- }, []);
-
- return { isFullScreen, toggleFullScreen };
- }
-
- export function useParticlesJs(id) {
- useEffect(() => {
- window.particlesJS(id, {
- particles: {
- number: {
- value: 20,
- density: {
- enable: true,
- value_area: 400,
- },
- },
- color: {
- value: '#2FB3DF',
- },
- shape: {
- type: 'circle',
- stroke: {
- width: 0,
- color: '#000000',
- },
- polygon: {
- nb_sides: 5,
- },
- image: {
- src: 'img/github.svg',
- width: 100,
- height: 100,
- },
- },
- opacity: {
- value: 0.3,
- random: false,
- anim: {
- enable: false,
- speed: 1,
- opacity_min: 0.1,
- sync: false,
- },
- },
- size: {
- value: 3,
- random: true,
- anim: {
- enable: false,
- speed: 40,
- size_min: 0.1,
- sync: false,
- },
- },
- line_linked: {
- enable: true,
- distance: 150,
- color: '#2FB3DF',
- opacity: 0.3,
- width: 2,
- },
- move: {
- enable: true,
- speed: 6,
- direction: 'none',
- random: false,
- straight: false,
- out_mode: 'out',
- bounce: false,
- attract: {
- enable: false,
- rotateX: 600,
- rotateY: 1200,
- },
- },
- },
- interactivity: {
- detect_on: 'canvas',
- events: {
- onhover: {
- enable: false,
- mode: 'bubble',
- },
- onclick: {
- enable: false,
- mode: 'push',
- },
- resize: true,
- },
- modes: {
- grab: {
- distance: 400,
- line_linked: {
- opacity: 1,
- },
- },
- bubble: {
- distance: 400,
- size: 40,
- duration: 2,
- opacity: 8,
- speed: 3,
- },
- repulse: {
- distance: 200,
- duration: 0.4,
- },
- push: {
- particles_nb: 4,
- },
- remove: {
- particles_nb: 2,
- },
- },
- },
- retina_detect: true,
- });
- }, []);
- }
|