import React, { useCallback, useEffect, useRef, useState } from "react"; import styles from "./index.module.scss"; import classNames from "classnames"; import { envUrl } from "@/utils/env"; import { imgLodingFu, maoData2, mapData1 } from "./data"; import iconImg1 from "@/assets/img/map/icon1.png"; import iconImg1Ac from "@/assets/img/map/icon1Ac.png"; import iconImg2 from "@/assets/img/map/icon2.png"; import iconImg2Ac from "@/assets/img/map/icon2Ac.png"; import MapSon from "./MapSon"; import { useSelector } from "react-redux"; import { RootState } from "@/store"; import { domShowFu } from "@/utils/domShow"; type Props = { type: number; sonChaneType: (val: number) => void; }; function A0Map({ type, sonChaneType }: Props) { // 进页面显示加载中 useEffect(() => { domShowFu("#AsyncSpinLoding", true); }, []); // 一级地图 图片的加载 const imgLodingArr = useSelector( (state: RootState) => state.A0layout.imgLodingArr ); // 控制二级地图的显示 const [mapSon, setMapSon] = useState(0); // 大图片是否已经加载完 const isImgLodingFu = useCallback(() => { let flag = false; if (imgLodingArr.includes(mapSon)) { domShowFu("#AsyncSpinLoding", false); flag = true; } return flag; }, [imgLodingArr, mapSon]); // 开场动画帧的变化 const [moveInd, setMoveInd] = useState(0); const moveTime = useRef(-1); const moveYun = useCallback(() => { if (!isImgLodingFu()) { clearInterval(moveTime.current); let num = 0; moveTime.current = window.setInterval(() => { setMoveInd(num); num++; if (num > 30 || isImgLodingFu()) { clearInterval(moveTime.current); } }, 50); } }, [isImgLodingFu]); useEffect(() => { moveYun(); return () => { clearInterval(moveTime.current); }; }, [moveYun]); // 鼠标hover const [isHover, setIsHover] = useState(0); return (
{/* 开场动画帧 */}
{/* 一级地图 */}
{/* 定位大图标 */} {mapData1.map((v) => (
setIsHover(v.id)} onMouseLeave={() => setIsHover(0)} onClick={() => { setMapSon(v.id); sonChaneType(2); }} key={v.id} className="A0iconBox" style={{ top: v.y, left: v.x, zIndex: v.ind }} >
{v.id}
{/* 文字标题 */} {/* 悬停出来的图片和名称 */}
{v.name}
))} {/* 定位小图标 */} {maoData2.map((v) => (
{ window.open(v.link); // setMapSon(v.id); sonChaneType(3); }} key={v.id} className={classNames( "A0iconSmBox", v.type === "right" ? "A0iconSmBoxR" : "" )} style={{ top: v.y, left: v.x, bottom: v.b, right: v.r, zIndex: v.ind, }} > {/* 文字标题 */}
{v.name}
{/* 悬停出来的图片和名称 */}
{v.name}
))}
imgLodingFu(0)} src={`${envUrl}/map/0.jpg`} alt="" />
{/* 二级地图 */} {mapSon ? : null} {/*
*/} {/* 左下角的返回 */} {mapSon ? (
setMapSon(0)}>
) : null}
); } const MemoA0Map = React.memo(A0Map); export default MemoA0Map;