diff --git a/src/containers/App/App.tsx b/src/containers/App/App.tsx index 38c9f042720528ba19d4dbf36a47ae1bc5325696..5172dd9104b6e5919f37582638824e38dc74bf95 100644 --- a/src/containers/App/App.tsx +++ b/src/containers/App/App.tsx @@ -1,3 +1,123 @@ +// import "./App.css"; +// import "bootstrap/dist/css/bootstrap.min.css"; +// import 'bootstrap/dist/js/bootstrap.bundle.min.js'; // 引入 Bootstrap JavaScript +// import { Route, Routes, useLocation } from "react-router-dom"; +// import { Footer, Header, Navbar, NotFound, Loading } from "../../components"; +// import { getPathMapping, stringToSlug } from "../../utils"; +// import { useEffect, useState } from "react"; +// import axios from "axios"; +// // import path from "path"; + +// const App = () => { +// const pathMapping = getPathMapping(); +// const location = useLocation(); +// const currentPath = +// location.pathname +// .split(`${stringToSlug(import.meta.env.VITE_TEAM_NAME)}`) +// .pop() || "/"; + +// // Set Page Title +// const title = +// currentPath in pathMapping ? pathMapping[currentPath].title : "Not Found"; + + + +// useEffect(() => { +// // document.title = `${title || ""} | ${import.meta.env.VITE_TEAM_NAME} - iGEM ${import.meta.env.VITE_TEAM_YEAR}`; +// document.title = `${title}`; +// }, [title]); + +// // åŠ è½½é¡µé¢ +// const [loading, setLoading] = useState(true); + +// // 这是定时两秒动画 +// // useEffect(() => { +// // // æ¨¡æ‹ŸåŠ è½½è¿‡ç¨‹ +// // console.log(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`); +// // setLoading(true); +// // const timer = setTimeout(() => { +// // setLoading(false); +// // }, 2000); // 2ç§’åŽéšè—åŠ è½½é¡µé¢ + +// // return () => clearTimeout(timer); +// // }, [location.pathname]); // 监å¬è·¯ç”±å˜åŒ– + + + +// // // è¿™æ˜¯åŠ è½½å®ŒæˆåŽ0.5ç§’ç»“æŸæ’放动画 +// useEffect(() => { +// // å‘起网络请求 +// console.log(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`); +// axios.get(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`) + +// .then(response => { +// // 处ç†å“åº”æ•°æ® +// console.log(response.data); +// }) +// .catch(error => { +// console.error('Error fetching data:', error); +// }) +// .finally(() => { +// setLoading(true); +// // 请求完æˆåŽéšè—åŠ è½½åŠ¨ç”» +// setTimeout(() => { +// setLoading(false); +// },500); + +// }); +// }, [location.pathname]); + +// return ( +// <> +// {loading ? ( +// <Loading /> +// ) : ( +// <> +// {/* Navigation */} +// <Navbar /> + +// {/* Header and PageContent */} +// <Routes> +// {Object.entries(pathMapping).map( +// ([path, { component: Component }]) => ( +// <Route +// key={path} +// path={path} +// element={ +// <> +// <div> +// <Component /> +// </div> +// </> +// } +// /> +// ), +// )} +// <Route +// path="*" +// element={ +// <> +// <Header +// title="Not Found" +// lead="The requested URL was not found on this server." +// /> +// <NotFound /> +// </> +// } +// /> +// </Routes> + +// {/* Footer */} +// <Footer /> +// </> +// )} +// </> +// ); +// }; + +// export default App; + + import "./App.css"; import "bootstrap/dist/css/bootstrap.min.css"; import 'bootstrap/dist/js/bootstrap.bundle.min.js'; // 引入 Bootstrap JavaScript @@ -6,7 +126,6 @@ import { Footer, Header, Navbar, NotFound, Loading } from "../../components"; import { getPathMapping, stringToSlug } from "../../utils"; import { useEffect, useState } from "react"; import axios from "axios"; -// import path from "path"; const App = () => { const pathMapping = getPathMapping(); @@ -20,50 +139,64 @@ const App = () => { const title = currentPath in pathMapping ? pathMapping[currentPath].title : "Not Found"; - - useEffect(() => { - // document.title = `${title || ""} | ${import.meta.env.VITE_TEAM_NAME} - iGEM ${import.meta.env.VITE_TEAM_YEAR}`; + // è®¾ç½®é¡µé¢æ ‡é¢˜ document.title = `${title}`; }, [title]); // åŠ è½½é¡µé¢ const [loading, setLoading] = useState(true); - // 这是定时两秒动画 - // useEffect(() => { - // // æ¨¡æ‹ŸåŠ è½½è¿‡ç¨‹ - // console.log(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`); - // setLoading(true); - // const timer = setTimeout(() => { - // setLoading(false); - // }, 2000); // 2ç§’åŽéšè—åŠ è½½é¡µé¢ - - // return () => clearTimeout(timer); - // }, [location.pathname]); // 监å¬è·¯ç”±å˜åŒ– - - - - // // è¿™æ˜¯åŠ è½½å®ŒæˆåŽ0.5ç§’ç»“æŸæ’放动画 + // å‘起网络请求并且ç‰å¾…图åƒåŠ è½½å®Œæ¯• useEffect(() => { // å‘起网络请求 console.log(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`); - axios.get(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`) + // 设置loading为true + setLoading(true); + + // å‘é€axios请求 + axios.get(`https://${import.meta.env.VITE_TEAM_YEAR}.igem.wiki/${import.meta.env.VITE_TEAM_NAME}${location.pathname}`) .then(response => { // 处ç†å“åº”æ•°æ® console.log(response.data); + + // 在处ç†å®Œæ•°æ®åŽï¼Œæ£€æŸ¥æ‰€æœ‰å›¾åƒæ˜¯å¦åŠ è½½å®Œæˆ + const images = document.querySelectorAll('img'); // èŽ·å–æ‰€æœ‰é¡µé¢ä¸Šçš„å›¾åƒ + let loadedImages = 0; + + if (images.length === 0) { + // 如果没有图åƒï¼Œç«‹å³ç»“æŸloading + setLoading(false); + } else { + // é历æ¯ä¸€ä¸ªå›¾åƒï¼Œç›‘å¬å…¶åŠ è½½å®Œæˆ + images.forEach((img) => { + if (img.complete) { + // 如果图åƒå·²ç»åŠ è½½å®Œæ¯•ï¼Œç›´æŽ¥è®¡æ•° + loadedImages++; + } else { + // å¦‚æžœå›¾åƒæœªåŠ è½½å®Œæ¯•ï¼Œç›‘å¬å®ƒçš„onload事件 + img.onload = () => { + loadedImages++; + if (loadedImages === images.length) { + // 当所有图åƒåŠ è½½å®Œæ¯•æ—¶ï¼Œéšè—loading动画 + setLoading(false); + } + }; + img.onerror = () => { + // å³ä½¿åŠ è½½å¤±è´¥ï¼Œä¹Ÿéœ€è¦ç»§ç»éšè—loading动画 + loadedImages++; + if (loadedImages === images.length) { + setLoading(false); + } + }; + } + }); + } }) .catch(error => { console.error('Error fetching data:', error); - }) - .finally(() => { - setLoading(true); - // 请求完æˆåŽéšè—åŠ è½½åŠ¨ç”» - setTimeout(() => { - setLoading(false); - },500); - + setLoading(false); // å³ä½¿å‘生错误,也应该结æŸloading }); }, [location.pathname]);