123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290 |
- import { useState, useMemo, useCallback, useEffect } from "react";
- import classNames from "classnames";
- import {
- HotSpot,
- Krpano,
- ROTATE_DIRECTION,
- Scene,
- View,
- ZOOM_ACTION,
- } from "@dage/krpano";
- import useUrlState from "@ahooksjs/use-url-state";
- import { useNavigate } from "react-router";
- import { MouseHoldView, SceneList } from "./components";
- import { ISceneProps } from "./utils";
- import "./App.scss";
- enum SCENE_NAME {
- HOME = "1",
- SCENE_1 = "2",
- }
- function App() {
- const navigate = useNavigate();
- const [state, setState] = useUrlState({ scene: SCENE_NAME.HOME });
- const [menuVisible, setMenuVisible] = useState(false);
- const [fullScreen, setFullScreen] = useState(false);
- const [toolbarVisible, setToolbarVisible] = useState(true);
- const [currentScene, setCurrentScene] = useState(state.scene);
- const [hasPreviousPage, setHasPreviousPage] = useState(false);
- const isHome = useMemo(
- () => currentScene === SCENE_NAME.HOME,
- [currentScene]
- );
- useEffect(() => {
- if (window.history.length > 1) {
- setHasPreviousPage(true);
- }
- }, [isHome]);
- const handleScene = useCallback(
- (scene: SCENE_NAME) => {
- setCurrentScene(scene);
- setState({
- scene,
- });
- },
- [setState]
- );
- useEffect(() => {
- if (state.scene !== currentScene) {
- handleScene(state.scene);
- }
- }, [state, currentScene, handleScene]);
- const goToScene = (m: string) => {
- window.location.href = `https://houseoss.4dkankan.com/project/ZHCHXS/scene/index.html#/?m=${m}&showBack=1`;
- };
- const SCENE_LIST = useMemo<ISceneProps[]>(
- () => [
- {
- name: "1",
- title: "翠湖香山1",
- thumbUrl: process.env.PUBLIC_URL + "/panos/1.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/1.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/1.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/1.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/1.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={10}
- vlookat={20}
- hlookatMin={-190}
- hlookatMax={85}
- vlookatMin={-70}
- vlookatMax={80}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- limitView="range"
- />
- <HotSpot
- name="hotspot1"
- type="text"
- atv={6}
- ath={-1}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={-3}
- ath={23.5}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={-13}
- ath={19}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={-18}
- ath={28}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "2",
- title: "翠湖香山2",
- thumbUrl: process.env.PUBLIC_URL + "/panos/2.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/2.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/2.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/2.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/2.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={0}
- vlookat={20}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-10}
- ath={-46}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={1}
- ath={-40.5}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={14}
- ath={3}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={-4}
- ath={116}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-18}
- ath={-30}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "3",
- title: "翠湖香山3",
- thumbUrl: process.env.PUBLIC_URL + "/panos/3.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/3.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/3.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/3.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/3.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={200}
- vlookat={50}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-1}
- ath={260}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={7}
- ath={240}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={21}
- ath={176}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={-11}
- ath={142}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-17}
- ath={-40}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "4",
- title: "翠湖香山4",
- thumbUrl: process.env.PUBLIC_URL + "/panos/4.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/4.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/4.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/4.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/4.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={-20}
- vlookat={2}
- fovType="MFOV"
- fov={110}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-12.5}
- ath={0}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={-11}
- ath={-13}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={-10}
- ath={-37}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={-5}
- ath={-63}
- scale={0.3}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-16}
- ath={79}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "5",
- title: "翠湖香山5",
- thumbUrl: process.env.PUBLIC_URL + "/panos/5.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/5.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/5.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/5.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/5.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={154}
- vlookat={0}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-14}
- ath={164}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={-8}
- ath={156}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={8}
- ath={150}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={-5}
- ath={50}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-19}
- ath={200}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "6",
- title: "翠湖香山6",
- thumbUrl: process.env.PUBLIC_URL + "/panos/6.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/6.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/6.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/6.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/6.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={220}
- vlookat={20}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-19}
- ath={-125}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-16}
- ath={217}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={-12.5}
- ath={222}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={-7}
- ath={235}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={25}
- ath={-10}
- scale={0.7}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "7",
- title: "翠湖香山7",
- thumbUrl: process.env.PUBLIC_URL + "/panos/7.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/7.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/7.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/7.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/7.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={-20}
- vlookat={0}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-19.5}
- ath={-32}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-19.5}
- ath={-42}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={-17.5}
- ath={-37}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={-16}
- ath={-28}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={-10}
- ath={-9}
- scale={0.7}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- {
- name: "8",
- title: "翠湖香山8",
- thumbUrl: process.env.PUBLIC_URL + "/panos/8.tiles/thumb.jpg",
- previewUrl: process.env.PUBLIC_URL + "/panos/8.tiles/preview.jpg",
- imageTagAttributes: {
- type: "cube",
- tileSize: 512,
- multires: true,
- },
- images: [
- {
- tiledImageWidth: 4608,
- tiledImageHeight: 4608,
- url:
- process.env.PUBLIC_URL +
- "/panos/8.tiles/%s/l3/%0v/l3_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 2304,
- tiledImageHeight: 2304,
- url:
- process.env.PUBLIC_URL +
- "/panos/8.tiles/%s/l2/%0v/l2_%s_%0v_%0h.jpg",
- },
- {
- tiledImageWidth: 1152,
- tiledImageHeight: 1152,
- url:
- process.env.PUBLIC_URL +
- "/panos/8.tiles/%s/l1/%0v/l1_%s_%0v_%0h.jpg",
- },
- ],
- children: (
- <>
- <View
- hlookat={20}
- vlookat={10}
- fovType="MFOV"
- fov={120}
- maxPixelZoom={2}
- fovMin={70}
- fovMax={140}
- vlookatMin={-70}
- limitView="range"
- />
- <HotSpot
- name="hotspot1"
- type="text"
- atv={-18}
- ath={36.5}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
- >
- <div className="hotspot-item">
- <p>香园</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot2"
- type="text"
- atv={-15.5}
- ath={31}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
- >
- <div className="hotspot-item">
- <p style={{ letterSpacing: 2, fontSize: 16 }}>
- 留香苑传统中式合院别墅<span>(</span>B2<span>)</span>
- </p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot3"
- type="text"
- atv={-12}
- ath={42}
- scale={0.5}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
- >
- <div className="hotspot-item">
- <p>留香苑AB区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot4"
- type="text"
- atv={10}
- ath={7}
- scale={0.7}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
- >
- <div className="hotspot-item">
- <p>留香苑C区归家大堂</p>
- </div>
- </HotSpot>
- <HotSpot
- name="hotspot5"
- type="text"
- atv={-19.5}
- ath={55}
- scale={0.4}
- edge="top"
- bg={false}
- distorted={true}
- onOver={() => {}}
- onOut={() => {}}
- >
- <div className="hotspot-item">
- <p>翠湖高尔夫</p>
- </div>
- </HotSpot>
- </>
- ),
- },
- ],
- []
- );
- const handleView = (direction: ROTATE_DIRECTION) => {
- window.ReactKrpanoActionProxy?.rotateView(direction);
- };
- const handleZoom = (action: ZOOM_ACTION) => {
- window.ReactKrpanoActionProxy?.zoomView(action);
- };
- return (
- <div className="App">
- <Krpano
- className="container"
- currentScene={currentScene}
- littlePlanetIntro={isHome}
- >
- {SCENE_LIST.map(
- (sc) => sc.imageTagAttributes && <Scene key={sc.name} {...sc} />
- )}
- </Krpano>
- {hasPreviousPage && !isHome && (
- <div className="back" onClick={() => navigate(-1)} />
- )}
- <div className={classNames("toolbar", { active: toolbarVisible })}>
- <SceneList
- visible={menuVisible}
- className={classNames({ active: menuVisible })}
- currentScene={currentScene}
- list={SCENE_LIST}
- handleScene={handleScene}
- />
- <div
- className="menu toolbar__btn"
- onClick={() => setMenuVisible(!menuVisible)}
- />
- <div className="toolbar__main">
- <div className="toolbar__group">
- <MouseHoldView
- onHold={handleView.bind(undefined, ROTATE_DIRECTION.LEFT)}
- >
- <div className="toolbar__btn left" />
- </MouseHoldView>
- <MouseHoldView
- onHold={handleView.bind(undefined, ROTATE_DIRECTION.RIGHT)}
- >
- <div className="toolbar__btn right" />
- </MouseHoldView>
- </div>
- <div className="toolbar__group">
- <MouseHoldView
- onHold={handleView.bind(undefined, ROTATE_DIRECTION.UP)}
- >
- <div className="toolbar__btn top" />
- </MouseHoldView>
- <MouseHoldView
- onHold={handleView.bind(undefined, ROTATE_DIRECTION.DOWN)}
- >
- <div className="toolbar__btn bottom" />
- </MouseHoldView>
- </div>
- <div className="toolbar__group">
- <MouseHoldView onHold={handleZoom.bind(undefined, ZOOM_ACTION.IN)}>
- <div className="toolbar__btn plus" />
- </MouseHoldView>
- <MouseHoldView onHold={handleZoom.bind(undefined, ZOOM_ACTION.OUT)}>
- <div className="toolbar__btn minus" />
- </MouseHoldView>
- </div>
- </div>
- <div className="toolbar__right">
- {document.fullscreenEnabled && (
- <div
- className={classNames("fullscreen toolbar__btn", {
- exit: fullScreen,
- })}
- onClick={async () => {
- if (fullScreen) {
- await document.exitFullscreen();
- } else {
- await document.getElementById("root")?.requestFullscreen();
- }
- setFullScreen(!fullScreen);
- }}
- />
- )}
- <div
- className="hide toolbar__btn"
- onClick={() => {
- setMenuVisible(false);
- setToolbarVisible(false);
- }}
- />
- </div>
- </div>
- <div className="toolbar2">
- {!isHome && (
- <div
- className="home"
- onClick={() => setState({ scene: SCENE_NAME.HOME })}
- />
- )}
- {/* <div className="music" /> */}
- </div>
- <div
- className={classNames("show-toolbar", { active: !toolbarVisible })}
- onClick={() => setToolbarVisible(true)}
- />
- </div>
- );
- }
- export default App;
|