HomeView.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365
  1. <script setup>
  2. import { ref, computed, inject, nextTick } from "vue"
  3. import { useRouter } from "vue-router"
  4. import { useStore } from "vuex"
  5. import HotspotDetail1 from "@/views/HotspotDetail1.vue"
  6. import HotspotDetail3 from "@/views/HotspotDetail3.vue"
  7. import { api as viewerApi } from "v-viewer"
  8. import Startup from "@/views/StartupView.vue"
  9. const store = useStore()
  10. const curPageIndex = ref(0)
  11. const homepagePaintingDesc = configText.homepagePaintingDesc
  12. const homepageAuthorDesc = configText.homepageAuthorDesc
  13. const detailDescStem = configText.homepagePaintingDetailDescStem
  14. const detailDescLeaf = configText.homepagePaintingDetailDescLeaf
  15. const router = useRouter()
  16. const { windowSizeInCssForRef, windowSizeWhenDesignForRef } = useSizeAdapt()
  17. const isShowPaintingDesc = ref(false)
  18. const isShowAuthorDesc = ref(false)
  19. const isShowHotspotDetail1 = ref(false)
  20. const isShowHotspotDetail3 = ref(false)
  21. const curCenterTag = computed(() => {
  22. return curPageIndex.value == 3
  23. ? "三竿修竹"
  24. : curPageIndex.value == 4
  25. ? "竹叶"
  26. : ""
  27. })
  28. const curFixedDesc = computed(() => {
  29. return curPageIndex.value == 3
  30. ? detailDescStem
  31. : curPageIndex.value == 4
  32. ? detailDescLeaf
  33. : ""
  34. })
  35. const lastY = ref(0)
  36. // 开始滑动
  37. const handletouchstart = (event) => {
  38. lastY.value = event.changedTouches[0].pageY
  39. }
  40. const isShowOperationTip = ref(true)
  41. // 监听活动
  42. const touchEnd = (event) => {
  43. let currentY = event.changedTouches[0].pageY
  44. let ty = currentY - lastY.value
  45. if (ty > 0 && curPageIndex.value == 1 && !isShowHotspotDetail1.value && !isShowHotspotDetail3.value && !isShowPaintingDesc.value && ! isShowAuthorDesc.value) {
  46. isShowOperationTip.value = true
  47. curPageIndex.value = 0
  48. } else if (ty < 0 && curPageIndex.value == 0) {
  49. isShowOperationTip.value = false
  50. curPageIndex.value = 1
  51. }
  52. }
  53. const $env = inject("$env")
  54. function showBigPainting() {
  55. viewerApi({
  56. images: [`${$env.BASE_URL}configMultiMedia/paintings/home-painting2.jpg`],
  57. options: {
  58. className: "viewer-backdrop-home",
  59. },
  60. })
  61. const bodyDom = document.querySelector("body")
  62. const viewerBtn = document.querySelector(".viewer-close")
  63. const viewerCanvas = document.querySelector(".viewer-canvas")
  64. const bigTipDomImg = document.createElement("img")
  65. bigTipDomImg.src = `${$env.BASE_URL}configMultiMedia/icon/icon-home-big.png`
  66. const bigTipDom = document.createElement("div")
  67. const bigTipDomText = document.createElement("div")
  68. bigTipDomText.innerText = "放大/缩小"
  69. bigTipDom.appendChild(bigTipDomText)
  70. bigTipDom.appendChild(bigTipDomImg)
  71. bigTipDom.className = "big-tip"
  72. if (bodyDom) {
  73. bodyDom.appendChild(bigTipDom)
  74. }
  75. if (viewerBtn) {
  76. viewerBtn.classList.add("viewer-button-home")
  77. viewerBtn.addEventListener("click", () => {
  78. if (bodyDom.querySelector(".big-tip")) {
  79. bodyDom.removeChild(bigTipDom)
  80. }
  81. })
  82. }
  83. if (viewerCanvas) {
  84. viewerCanvas.addEventListener("touchstart", () => {
  85. if (bodyDom.querySelector(".big-tip")) {
  86. bodyDom.removeChild(bigTipDom)
  87. }
  88. })
  89. }
  90. }
  91. const isShowVideoFadeToNextPage = ref(false)
  92. const videoFadeToNextPageEl = ref(null)
  93. const isShowSkip = ref(false)
  94. function onClickGoNextPage() {
  95. isShowVideoFadeToNextPage.value = true
  96. nextTick(() => {
  97. videoFadeToNextPageEl.value.play()
  98. })
  99. setTimeout(() => {
  100. isShowSkip.value = true
  101. }, 2000)
  102. }
  103. const backFu = () => {
  104. if (
  105. curPageIndex.value === 4 ||
  106. curPageIndex.value === 3 ||
  107. curPageIndex.value === 5
  108. ) {
  109. curPageIndex.value = 2
  110. } else {
  111. curPageIndex.value--
  112. }
  113. }
  114. </script>
  115. <template>
  116. <div style="opacity: 0; pointer-events: none;font-family: KingHwa_OldSong;position: absolute;top:0;left:0;z-index: -1;">
  117. 123
  118. </div>
  119. <div
  120. class="home"
  121. @touchstart="handletouchstart($event)"
  122. @touchend="touchEnd($event)"
  123. >
  124. <!-- 了解更多视频 -->
  125. <Transition name="fade-in">
  126. <video
  127. v-if="isShowVideoFadeToNextPage"
  128. ref="videoFadeToNextPageEl"
  129. class="fade-to-next-page"
  130. src="@/assets/videos/fade-from-home-to-more-content.mp4"
  131. playsinline
  132. webkit-playsinline="true"
  133. x5-video-player-type="h5"
  134. muted
  135. @ended="
  136. router.replace({
  137. name: 'MoreContentChange',
  138. })
  139. "
  140. />
  141. </Transition>
  142. <Transition name="fade-in">
  143. <BtnSkip
  144. v-if="isShowSkip"
  145. @click="
  146. router.replace({
  147. name: 'MoreContentChange',
  148. })
  149. "
  150. />
  151. </Transition>
  152. <!-- 背景 -->
  153. <div
  154. class="bg-mask"
  155. :style="{ background: curPageIndex == 2 ? `rgba(85,116,83,0.8)` : `` }"
  156. />
  157. <!-- 开场动画 -->
  158. <Transition name="fade-out">
  159. <Startup
  160. v-if="!store.state.haveShownStartup"
  161. class="startup"
  162. />
  163. </Transition>
  164. <!-- 首页标题 -->
  165. <div
  166. class="title-wrap"
  167. :style="{
  168. opacity: curPageIndex == 0 ? 1 : 0,
  169. }"
  170. >
  171. <img
  172. class="title"
  173. src="@/assets/images/home-title.png"
  174. alt=""
  175. draggable="false"
  176. >
  177. <div class="sub-text">
  178. 南京博物院<br>
  179. 绢本 墨笔<br>
  180. 元 李衎<br>
  181. </div>
  182. </div>
  183. <!-- 画作 -->
  184. <div
  185. class="painting-wrap"
  186. :class="{
  187. 'painting-wrap1': curPageIndex == 0,
  188. 'painting-wrap2': curPageIndex == 1,
  189. 'painting-wrap3': curPageIndex == 2 || curPageIndex == 3,
  190. 'painting-wrap4': curPageIndex == 4,
  191. 'painting-wrap5': curPageIndex == 5,
  192. }"
  193. @click="
  194. () => {
  195. curPageIndex == 1 ? (curPageIndex = 2) : '';
  196. }
  197. "
  198. >
  199. <img
  200. class="painting-border"
  201. src="@/assets/images/painting-border-new.png"
  202. alt=""
  203. draggable="false"
  204. >
  205. <img
  206. class="painting-stem"
  207. src="@/assets/images/home-painting1.jpg"
  208. alt=""
  209. draggable="false"
  210. >
  211. <img
  212. class="painting-stem"
  213. src="@/assets/images/home-painting2.jpg"
  214. alt=""
  215. draggable="false"
  216. >
  217. <img
  218. :style="{ opacity: curPageIndex == 3 ? 1 : 0, zIndex: 3 }"
  219. class="painting-stem"
  220. src="@/assets/images/home2-1.png"
  221. alt=""
  222. >
  223. <img
  224. class="painting-stem"
  225. src="@/assets/images/img_zhuye-min2.png"
  226. alt=""
  227. :style="{
  228. opacity: curPageIndex == 4 ? 1 : 0,
  229. zIndex: 2,
  230. }"
  231. draggable="false"
  232. >
  233. <img
  234. class="painting-stem"
  235. src="@/assets/images/img_stone_all-min.png"
  236. :style="{
  237. opacity: curPageIndex == 5 ? 1 : 0,
  238. zIndex: 2,
  239. }"
  240. alt=""
  241. draggable="false"
  242. >
  243. <!-- 绿色遮罩层 -->
  244. <div
  245. class="green-box"
  246. :style="{ opacity: curPageIndex == 3 ? 1 : 0 }"
  247. />
  248. </div>
  249. <!-- 热点层1 -->
  250. <div class="hotspot-wrap">
  251. <HotspotForHomepage
  252. v-show="curPageIndex == 1"
  253. class="hotspot-1"
  254. @click="isShowHotspotDetail1 = true"
  255. />
  256. <HotspotForHomepage
  257. v-show="curPageIndex == 1"
  258. class="hotspot-3"
  259. @click="isShowHotspotDetail3 = true"
  260. />
  261. </div>
  262. <!-- 热点层2 -->
  263. <div class="hotspot-wrap2">
  264. <HotspotForHomepage
  265. v-show="curPageIndex == 2"
  266. class="hotspot-leaf"
  267. @click="curPageIndex = 4"
  268. />
  269. <HotspotForHomepage
  270. v-show="curPageIndex == 2"
  271. class="hotspot-stem"
  272. @click="curPageIndex = 3"
  273. />
  274. <HotspotForHomepage
  275. v-show="curPageIndex == 2"
  276. class="hotspot-stone"
  277. @click="curPageIndex = 5"
  278. />
  279. <img
  280. :style="{ opacity: curPageIndex == 2 ? 1 : 0,display: curPageIndex == 2 ? 'block' : 'none' }"
  281. class="icon_scale"
  282. src="@/assets/images/icon_scale.png"
  283. alt=""
  284. @click="showBigPainting"
  285. >
  286. </div>
  287. <!-- 热点详情页 -->
  288. <Transition name="fade-in-out">
  289. <HotspotDetail1
  290. v-if="isShowHotspotDetail1"
  291. class="hotspot-detail"
  292. @close="isShowHotspotDetail1 = false"
  293. />
  294. </Transition>
  295. <Transition name="fade-in-out">
  296. <HotspotDetail3
  297. v-if="isShowHotspotDetail3"
  298. class="hotspot-detail"
  299. @close="isShowHotspotDetail3 = false"
  300. />
  301. </Transition>
  302. <!-- 底部中心文字 -->
  303. <div
  304. class="center-text"
  305. :style="{ opacity: curPageIndex == 3 || curPageIndex == 4 ? 1 : 0 }"
  306. :class="{'center-text4': curPageIndex == 4}"
  307. >
  308. {{ curCenterTag }}
  309. </div>
  310. <!-- 底部文字介绍 -->
  311. <div
  312. class="fixed-desc"
  313. :class="{'fixed-desc4': curPageIndex == 4}"
  314. :style="{ opacity: curPageIndex == 3 || curPageIndex == 4 ? 1 : 0 }"
  315. v-html="curFixedDesc"
  316. />
  317. <!-- 左滑提示 -->
  318. <OperationTip
  319. v-show="curPageIndex == 0"
  320. class="operation-tip"
  321. text="向上划动"
  322. :is-show="isShowOperationTip"
  323. />
  324. <!-- 页面2点击提示 -->
  325. <img
  326. class="click-tip"
  327. :class="{ 'click-tip-ac': curPageIndex == 1 }"
  328. src="@/assets/images/icon-home-click.png"
  329. alt=""
  330. @click="
  331. () => {
  332. curPageIndex == 1 ? (curPageIndex = 2) : '';
  333. }
  334. "
  335. >
  336. <!-- 作品、作者简介 -->
  337. <div
  338. ref="longDesc"
  339. class="long-desc"
  340. :class="{ 'long-desc-ac': curPageIndex == 1 }"
  341. @touchstart="handletouchstart($event)"
  342. @touchend="touchEnd($event)"
  343. >
  344. <div
  345. class="page2-box"
  346. @click="isShowPaintingDesc = true"
  347. >
  348. <img
  349. src="@/assets/images/icon_home_detail-min.png"
  350. alt=""
  351. >
  352. <div>作品简介</div>
  353. </div>
  354. <div
  355. class="page2-box"
  356. @click="isShowAuthorDesc = true"
  357. >
  358. <img
  359. src="@/assets/images/icon_home_author-min.png"
  360. alt=""
  361. >
  362. <div>作者简介</div>
  363. </div>
  364. </div>
  365. <!-- 了解更多 -->
  366. <div
  367. :style="{
  368. opacity: curPageIndex == 2 ? 1 : 0,
  369. zIndex: curPageIndex == 2 ? 5 : 0,
  370. }"
  371. class="learn-more"
  372. @click="onClickGoNextPage"
  373. >
  374. 了解更多
  375. </div>
  376. <!-- 返回按钮 -->
  377. <BtnBack
  378. :style="{
  379. opacity:
  380. curPageIndex == 2 ||
  381. curPageIndex == 3 ||
  382. curPageIndex == 4 ||
  383. curPageIndex == 5
  384. ? 1
  385. : 0,
  386. zIndex: curPageIndex == 1 || curPageIndex == 0 ? -1 : 1,
  387. }"
  388. class="back-btn-main"
  389. @click="backFu()"
  390. />
  391. <!-- <img
  392. :style="{
  393. opacity:
  394. curPageIndex == 2 ||
  395. curPageIndex == 3 ||
  396. curPageIndex == 4 ||
  397. curPageIndex == 5
  398. ? 1
  399. : 0,
  400. zIndex: curPageIndex == 1 || curPageIndex == 0 ? -1 : 1,
  401. }"
  402. class="back-btn-main"
  403. src="@/assets/images/icon_back_white.png"
  404. alt=""
  405. @click="backFu()"
  406. > -->
  407. <!-- 石头文字层 -->
  408. <div
  409. class="stone-text-box"
  410. :style="{
  411. opacity: curPageIndex == 5 ? 1 : 0,
  412. }"
  413. >
  414. <img
  415. class="stone-text"
  416. src="@/assets/images/stone-text-min.png"
  417. >
  418. </div>
  419. <!-- 作品简介 -->
  420. <div
  421. v-show="isShowPaintingDesc"
  422. class="painting-box"
  423. >
  424. <!-- 顶部画作 -->
  425. <img
  426. class="painting-img"
  427. src="@/assets/images/img_painting-box.png"
  428. alt=""
  429. >
  430. <div class="text-box">
  431. <p
  432. v-for="(item, index) in homepagePaintingDesc"
  433. :key="index"
  434. >
  435. {{ item }}
  436. </p>
  437. </div>
  438. <!-- <div class="bottom-box" /> -->
  439. <BtnBack
  440. class="back-btn"
  441. @click="isShowPaintingDesc = false"
  442. />
  443. <!-- <img
  444. class="back-btn"
  445. src="@/assets/images/icon_back_white.png"
  446. alt=""
  447. @click="isShowPaintingDesc = false"
  448. > -->
  449. <!-- <BtnBack
  450. class="system-btns"
  451. @click="isShowPaintingDesc = false"
  452. /> -->
  453. </div>
  454. <!-- 作者简介 -->
  455. <div
  456. v-show="isShowAuthorDesc"
  457. class="author-box"
  458. >
  459. <div class="author-content">
  460. <div class="author-img">
  461. <img src="@/assets/images/img_author-min.png">
  462. </div>
  463. <div class="author-name">
  464. <img src="@/assets/images/text_likan-min.png">
  465. </div>
  466. <div class="line" />
  467. <div class="text-box">
  468. <p
  469. v-for="(item, index) in homepageAuthorDesc"
  470. :key="index"
  471. >
  472. {{ item }}
  473. </p>
  474. </div>
  475. </div>
  476. <!-- 底部遮罩 -->
  477. <!-- <div class="bottom-box" /> -->
  478. <BtnBack
  479. class="back-btn"
  480. @click="isShowAuthorDesc = false"
  481. />
  482. <!-- <img
  483. style="position: absolute; bottom: 30px; left: 20px; width: 25px"
  484. src="@/assets/images/icon_back_white.png"
  485. alt=""
  486. @click="isShowAuthorDesc = false"
  487. > -->
  488. <!-- <BtnBack
  489. class="system-btns"
  490. @click="isShowAuthorDesc = false"
  491. /> -->
  492. </div>
  493. </div>
  494. </template>
  495. <style lang="less" scoped>
  496. body {
  497. -webkit-transform: translate3d(0, 0, 0);
  498. transform: translate3d(0, 0, 0);
  499. }
  500. // img,div {
  501. // -webkit-backface-visibility: hidden;
  502. // backface-visibility: hidden;
  503. // transition: width 1.5s, transform 1.5s, top 1.5s, opacity 1.5s;
  504. // }
  505. img,
  506. div {
  507. -webkit-backface-visibility: hidden;
  508. backface-visibility: hidden;
  509. // transition: opacity 1.5s, top 1.5s, transform 1.5s;
  510. transition: opacity 1.5s, top 1.5s, width 1.5s, height 1.5s;
  511. }
  512. ::-webkit-scrollbar {
  513. display: none;
  514. }
  515. .home {
  516. width: 100%;
  517. height: 100%;
  518. background-image: url(@/assets/images/home-painting-line-small.jpg);
  519. background-size: cover;
  520. background-repeat: no-repeat;
  521. background-position: center center;
  522. position: relative;
  523. > video.fade-to-next-page {
  524. position: absolute;
  525. left: 0;
  526. top: 0;
  527. width: 100%;
  528. height: 100%;
  529. object-fit: cover;
  530. z-index: 20;
  531. }
  532. > .bg-mask {
  533. position: absolute;
  534. left: 0;
  535. top: 0;
  536. width: 100%;
  537. height: 100%;
  538. background: rgba(60, 89, 71, 0.65);
  539. backdrop-filter: blur(
  540. calc(
  541. 22 / v-bind("windowSizeWhenDesignForRef") *
  542. v-bind("windowSizeInCssForRef")
  543. )
  544. );
  545. }
  546. > .startup {
  547. z-index: 20;
  548. }
  549. > .title-wrap {
  550. position: absolute;
  551. left: 50%;
  552. top: calc(
  553. 36 / v-bind("windowSizeWhenDesignForRef") *
  554. v-bind("windowSizeInCssForRef")
  555. );
  556. transform: translate(-50%);
  557. width: calc(
  558. 43 / v-bind("windowSizeWhenDesignForRef") *
  559. v-bind("windowSizeInCssForRef")
  560. );
  561. height: calc(
  562. 180 / v-bind("windowSizeWhenDesignForRef") *
  563. v-bind("windowSizeInCssForRef")
  564. );
  565. z-index: 5;
  566. > img.title {
  567. position: absolute;
  568. left: 0;
  569. top: 0;
  570. width: 100%;
  571. height: 100%;
  572. }
  573. > .sub-text {
  574. position: absolute;
  575. left: 110%;
  576. top: 46%;
  577. transform: translateY(-50%);
  578. writing-mode: vertical-lr;
  579. font-family: KaiTi;
  580. font-weight: 400;
  581. font-size: calc(
  582. 18 / v-bind("windowSizeWhenDesignForRef") *
  583. v-bind("windowSizeInCssForRef")
  584. );
  585. color: #ffffff;
  586. line-height: calc(
  587. 21 / v-bind("windowSizeWhenDesignForRef") *
  588. v-bind("windowSizeInCssForRef")
  589. );
  590. white-space: pre;
  591. letter-spacing: 0.2em;
  592. text-align: center;
  593. }
  594. }
  595. > .hotspot-wrap {
  596. position: absolute;
  597. left: 50%;
  598. top: calc(
  599. 62 / v-bind("windowSizeWhenDesignForRef") *
  600. v-bind("windowSizeInCssForRef")
  601. ) !important;
  602. transform: translate(-46%, 0);
  603. width: calc(
  604. 266 / v-bind("windowSizeWhenDesignForRef") *
  605. v-bind("windowSizeInCssForRef")
  606. );
  607. height: calc(
  608. 517 / v-bind("windowSizeWhenDesignForRef") *
  609. v-bind("windowSizeInCssForRef")
  610. );
  611. z-index: 7;
  612. pointer-events: none;
  613. will-change: transform;
  614. backface-visibility: hidden;
  615. z-index: 10;
  616. & > div {
  617. z-index: 100;
  618. transition: all 2s ease-in-out;
  619. }
  620. > .hotspot-1 {
  621. position: absolute;
  622. top: calc(
  623. 54 / v-bind("windowSizeWhenDesignForRef") *
  624. v-bind("windowSizeInCssForRef")
  625. );
  626. right: calc(
  627. 0 / v-bind("windowSizeWhenDesignForRef") *
  628. v-bind("windowSizeInCssForRef")
  629. );
  630. pointer-events: initial;
  631. }
  632. > .hotspot-2 {
  633. position: absolute;
  634. left: calc(
  635. 60 / v-bind("windowSizeWhenDesignForRef") *
  636. v-bind("windowSizeInCssForRef")
  637. );
  638. top: calc(
  639. 222 / v-bind("windowSizeWhenDesignForRef") *
  640. v-bind("windowSizeInCssForRef")
  641. );
  642. pointer-events: initial;
  643. }
  644. > .hotspot-3 {
  645. position: absolute;
  646. bottom: calc(
  647. -10 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  648. );
  649. right: calc(
  650. -10 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  651. );
  652. pointer-events: initial;
  653. }
  654. }
  655. > .hotspot-wrap2 {
  656. position: absolute;
  657. left: 50%;
  658. top: calc(
  659. 62 / v-bind("windowSizeWhenDesignForRef") *
  660. v-bind("windowSizeInCssForRef")
  661. ) !important;
  662. transform: translate(-50%, 0);
  663. width: calc(
  664. 364 / v-bind("windowSizeWhenDesignForRef") *
  665. v-bind("windowSizeInCssForRef")
  666. );
  667. height: calc(
  668. 542 / v-bind("windowSizeWhenDesignForRef") *
  669. v-bind("windowSizeInCssForRef")
  670. );
  671. z-index: 4;
  672. & > div {
  673. z-index: 100;
  674. transition: all 2s ease-in-out;
  675. }
  676. // background: rgba(0, 128, 0, 0.527);
  677. > .hotspot-leaf {
  678. position: absolute;
  679. top: calc(
  680. 259 / v-bind("windowSizeWhenDesignForRef") *
  681. v-bind("windowSizeInCssForRef")
  682. );
  683. left: calc(
  684. 158 / v-bind("windowSizeWhenDesignForRef") *
  685. v-bind("windowSizeInCssForRef")
  686. );
  687. }
  688. > .hotspot-stem {
  689. position: absolute;
  690. top: calc(
  691. 79 / v-bind("windowSizeWhenDesignForRef") *
  692. v-bind("windowSizeInCssForRef")
  693. );
  694. left: calc(
  695. 256 / v-bind("windowSizeWhenDesignForRef") *
  696. v-bind("windowSizeInCssForRef")
  697. );
  698. }
  699. > .hotspot-stone {
  700. position: absolute;
  701. top: calc(
  702. 395 / v-bind("windowSizeWhenDesignForRef") *
  703. v-bind("windowSizeInCssForRef")
  704. );
  705. left: calc(
  706. 94 / v-bind("windowSizeWhenDesignForRef") *
  707. v-bind("windowSizeInCssForRef")
  708. );
  709. }
  710. > .icon_scale {
  711. width: 35px;
  712. height: 35px;
  713. position: absolute;
  714. right: 0;
  715. bottom: 0;
  716. transition: all 1.5s ease-in-out;
  717. }
  718. }
  719. > .hotspot-detail {
  720. z-index: 21;
  721. }
  722. > .painting-wrap {
  723. position: absolute;
  724. left: 50%;
  725. width: calc(
  726. 308 / v-bind("windowSizeWhenDesignForRef") *
  727. v-bind("windowSizeInCssForRef")
  728. );
  729. height: calc(
  730. 523 / v-bind("windowSizeWhenDesignForRef") *
  731. v-bind("windowSizeInCssForRef")
  732. );
  733. // background: green;
  734. transform: translate(-50%, 0);
  735. z-index: 1;
  736. > .painting-border {
  737. width: 100%;
  738. height: 100%;
  739. position: absolute;
  740. }
  741. > .painting-stem {
  742. width: calc(
  743. 245 / v-bind("windowSizeWhenDesignForRef") *
  744. v-bind("windowSizeInCssForRef")
  745. );
  746. height: calc(
  747. 371 / v-bind("windowSizeWhenDesignForRef") *
  748. v-bind("windowSizeInCssForRef")
  749. );
  750. position: absolute;
  751. left: 50%;
  752. transform: translate(-50%, 26%);
  753. }
  754. }
  755. > .painting-wrap1 {
  756. top: 28%;
  757. }
  758. > .painting-wrap2 {
  759. top: 7%;
  760. z-index: 8;
  761. transform: transform 1.5s !important;
  762. }
  763. > .painting-wrap3 {
  764. // transform: translate(-50%, 0%) scale(1.5);
  765. width: 110%;
  766. // height: calc(315 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  767. height: calc(
  768. 760 / v-bind("windowSizeWhenDesignForRef") *
  769. v-bind("windowSizeInCssForRef")
  770. );
  771. top: calc(
  772. -80 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  773. );
  774. > .painting-stem {
  775. width: calc(
  776. 364 / v-bind("windowSizeWhenDesignForRef") *
  777. v-bind("windowSizeInCssForRef")
  778. );
  779. height: calc(
  780. 542 / v-bind("windowSizeWhenDesignForRef") *
  781. v-bind("windowSizeInCssForRef")
  782. );
  783. }
  784. > .green-box {
  785. width: 200vw;
  786. height: 200vh;
  787. background: rgba(85, 116, 83, 0.8);
  788. position: fixed;
  789. top: 0;
  790. left: 0;
  791. z-index: 2;
  792. overflow: hidden;
  793. transition: opacity 1s ease;
  794. }
  795. }
  796. > .painting-wrap4 {
  797. // transform: translate(-57%, -40%) scale(4.2);
  798. width: calc(110% * 4.2);
  799. // height: calc(315 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  800. height: calc(
  801. 760 * 4.2 / v-bind("windowSizeWhenDesignForRef") *
  802. v-bind("windowSizeInCssForRef")
  803. );
  804. transform: translate(-53%, -50%);
  805. transform-origin: 50% 50%;
  806. > .painting-stem {
  807. width: calc(
  808. 364 * 4.2 / v-bind("windowSizeWhenDesignForRef") *
  809. v-bind("windowSizeInCssForRef")
  810. );
  811. height: calc(
  812. 542 * 4.2 / v-bind("windowSizeWhenDesignForRef") *
  813. v-bind("windowSizeInCssForRef")
  814. );
  815. }
  816. }
  817. > .painting-wrap5 {
  818. // transform: translate(-26%, 10%) scale(2.6);
  819. width: calc(110% * 2.2);
  820. // height: calc(315 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  821. height: calc(
  822. 760 * 2.2 / v-bind("windowSizeWhenDesignForRef") *
  823. v-bind("windowSizeInCssForRef")
  824. );
  825. transform: translate(-40%, -39%);
  826. transform-origin: center center;
  827. > .painting-stem {
  828. width: calc(
  829. 364 * 2.2 / v-bind("windowSizeWhenDesignForRef") *
  830. v-bind("windowSizeInCssForRef")
  831. );
  832. height: calc(
  833. 542 * 2.2 / v-bind("windowSizeWhenDesignForRef") *
  834. v-bind("windowSizeInCssForRef")
  835. );
  836. }
  837. }
  838. > .center-text {
  839. position: absolute;
  840. left: 50%;
  841. top: calc(
  842. 650 / v-bind("windowSizeWhenDesignForRef") *
  843. v-bind("windowSizeInCssForRef")
  844. );
  845. transform: translateX(-50%);
  846. width: calc(
  847. 309 / v-bind("windowSizeWhenDesignForRef") *
  848. v-bind("windowSizeInCssForRef")
  849. );
  850. display: flex;
  851. justify-content: center;
  852. align-items: center;
  853. font-family: KaiTi;
  854. color: #ffffff;
  855. font-weight: 400;
  856. font-size: calc(
  857. 30 / v-bind("windowSizeWhenDesignForRef") *
  858. v-bind("windowSizeInCssForRef")
  859. );
  860. line-height: calc(
  861. 42 / v-bind("windowSizeWhenDesignForRef") *
  862. v-bind("windowSizeInCssForRef")
  863. );
  864. text-align: justify;
  865. z-index: 2;
  866. }
  867. > .center-text4{
  868. top: calc(
  869. 630 / v-bind("windowSizeWhenDesignForRef") *
  870. v-bind("windowSizeInCssForRef")
  871. );
  872. }
  873. > .fixed-desc {
  874. position: absolute;
  875. left: 50%;
  876. transform: translateX(-50%);
  877. width: calc(
  878. 309 / v-bind("windowSizeWhenDesignForRef") *
  879. v-bind("windowSizeInCssForRef")
  880. );
  881. height: 20%;
  882. display: flex;
  883. justify-content: center;
  884. align-items: center;
  885. font-family: KaiTi;
  886. color: #ffffff;
  887. font-weight: 400;
  888. top: calc(
  889. 670 / v-bind("windowSizeWhenDesignForRef") *
  890. v-bind("windowSizeInCssForRef")
  891. );
  892. font-size: calc(
  893. 18 / v-bind("windowSizeWhenDesignForRef") *
  894. v-bind("windowSizeInCssForRef")
  895. );
  896. line-height: calc(
  897. 25 / v-bind("windowSizeWhenDesignForRef") *
  898. v-bind("windowSizeInCssForRef")
  899. );
  900. text-align: justify;
  901. display: block;
  902. z-index: 2;
  903. margin-top: calc(
  904. 30 / v-bind("windowSizeWhenDesignForRef") *
  905. v-bind("windowSizeInCssForRef")
  906. );
  907. }
  908. > .fixed-desc4{
  909. top: calc(
  910. 645 / v-bind("windowSizeWhenDesignForRef") *
  911. v-bind("windowSizeInCssForRef")
  912. );
  913. }
  914. > .operation-tip {
  915. position: absolute;
  916. left: 50%;
  917. transform: translateX(-50%);
  918. bottom: calc(
  919. 25 / v-bind("windowSizeWhenDesignForRef") *
  920. v-bind("windowSizeInCssForRef")
  921. );
  922. }
  923. > .click-tip {
  924. position: absolute;
  925. width: 45px;
  926. height: 45px;
  927. top: calc(
  928. 340 / v-bind("windowSizeWhenDesignForRef") *
  929. v-bind("windowSizeInCssForRef")
  930. );
  931. left: calc(
  932. 280 / v-bind("windowSizeWhenDesignForRef") *
  933. v-bind("windowSizeInCssForRef")
  934. );
  935. z-index: 10;
  936. opacity: 0;
  937. }
  938. > .click-tip-ac {
  939. opacity: 1;
  940. }
  941. > .big-tip {
  942. position: fixed;
  943. bottom: calc(
  944. 30 / v-bind("windowSizeWhenDesignForRef") *
  945. v-bind("windowSizeInCssForRef")
  946. );
  947. left: 50%;
  948. transform: translateX(-50%);
  949. }
  950. > .big-tip-ac {
  951. opacity: 1;
  952. z-index: 2015;
  953. }
  954. > .stone-text-box {
  955. position: fixed;
  956. top: 0;
  957. right: 0;
  958. z-index: 3;
  959. width: calc(
  960. 224 / v-bind("windowSizeWhenDesignForRef") *
  961. v-bind("windowSizeInCssForRef")
  962. );
  963. background: linear-gradient(78deg, rgba(0, 0, 0, 0) 38%, #00000087 75%);
  964. height: 100%;
  965. > .stone-text {
  966. position: fixed;
  967. top: calc(
  968. 50 / v-bind("windowSizeWhenDesignForRef") *
  969. v-bind("windowSizeInCssForRef")
  970. );
  971. right: calc(
  972. 20 / v-bind("windowSizeWhenDesignForRef") *
  973. v-bind("windowSizeInCssForRef")
  974. );
  975. z-index: 3;
  976. width: calc(
  977. 120 / v-bind("windowSizeWhenDesignForRef") *
  978. v-bind("windowSizeInCssForRef")
  979. );
  980. }
  981. }
  982. > .learn-more {
  983. width: calc(
  984. 134 / v-bind("windowSizeWhenDesignForRef") *
  985. v-bind("windowSizeInCssForRef")
  986. );
  987. height: calc(
  988. 50 / v-bind("windowSizeWhenDesignForRef") *
  989. v-bind("windowSizeInCssForRef")
  990. );
  991. display: flex;
  992. justify-content: center;
  993. align-items: center;
  994. color: white;
  995. font-family: "KaiTi";
  996. position: absolute;
  997. top: calc(
  998. 745 / v-bind("windowSizeWhenDesignForRef") *
  999. v-bind("windowSizeInCssForRef")
  1000. );
  1001. font-size: calc(
  1002. 20 / v-bind("windowSizeWhenDesignForRef") *
  1003. v-bind("windowSizeInCssForRef")
  1004. );
  1005. line-height: calc(
  1006. 29 / v-bind("windowSizeWhenDesignForRef") *
  1007. v-bind("windowSizeInCssForRef")
  1008. );
  1009. left: 50%;
  1010. transform: translateX(-50%);
  1011. background: url(@/assets/images/learn-more.png);
  1012. background-size: 100% 100%;
  1013. }
  1014. > .back-btn-main {
  1015. position: absolute;
  1016. z-index: 3;
  1017. left: calc(
  1018. 17 / v-bind("windowSizeWhenDesignForRef") *
  1019. v-bind("windowSizeInCssForRef")
  1020. );
  1021. bottom: calc(
  1022. 17 / v-bind("windowSizeWhenDesignForRef") *
  1023. v-bind("windowSizeInCssForRef")
  1024. );
  1025. }
  1026. > .long-desc {
  1027. position: absolute;
  1028. left: 50%;
  1029. bottom: calc(
  1030. 0 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  1031. );
  1032. width: calc(
  1033. 309 / v-bind("windowSizeWhenDesignForRef") *
  1034. v-bind("windowSizeInCssForRef")
  1035. );
  1036. transform: translate(-50%, 100%);
  1037. color: white;
  1038. overflow: hidden;
  1039. font-family: KaiTi;
  1040. color: #ffffff;
  1041. animation: none;
  1042. display: flex;
  1043. justify-content: space-between;
  1044. z-index: 2;
  1045. opacity: 0;
  1046. > .page2-box {
  1047. display: flex;
  1048. flex-direction: column;
  1049. justify-content: center;
  1050. align-items: center;
  1051. > img {
  1052. width: 45%;
  1053. margin-bottom: 10px;
  1054. }
  1055. > div {
  1056. font-size: calc(
  1057. 20 / v-bind("windowSizeWhenDesignForRef") *
  1058. v-bind("windowSizeInCssForRef")
  1059. );
  1060. font-family: KaiTi;
  1061. }
  1062. }
  1063. }
  1064. > .long-desc-ac {
  1065. bottom: calc(
  1066. 100 / v-bind("windowSizeWhenDesignForRef") *
  1067. v-bind("windowSizeInCssForRef")
  1068. );
  1069. transform: translate(-50%, 0);
  1070. z-index: 5;
  1071. opacity: 1;
  1072. }
  1073. > .painting-box {
  1074. width: 100%;
  1075. height: 100%;
  1076. background: rgba(73, 91, 71, 0.7);
  1077. backdrop-filter: blur(22.5px);
  1078. position: fixed;
  1079. top: 0;
  1080. left: 0;
  1081. display: flex;
  1082. flex-direction: column;
  1083. // align-content: center;
  1084. align-items: center;
  1085. // justify-content: center;
  1086. z-index: 15;
  1087. padding-top: 15%;
  1088. padding-left: 10%;
  1089. padding-right: 10%;
  1090. > .back-btn {
  1091. left: calc(
  1092. 17 / v-bind("windowSizeWhenDesignForRef") *
  1093. v-bind("windowSizeInCssForRef")
  1094. );
  1095. bottom: calc(
  1096. 17 / v-bind("windowSizeWhenDesignForRef") *
  1097. v-bind("windowSizeInCssForRef")
  1098. );
  1099. position: absolute;
  1100. }
  1101. > .painting-img {
  1102. width: 70%;
  1103. margin-bottom: 20px;
  1104. }
  1105. > .text-box {
  1106. width: 100%;
  1107. overflow: auto;
  1108. &::-webkit-scrollbar {
  1109. display: none;
  1110. }
  1111. > p {
  1112. text-indent: 2em;
  1113. margin-bottom: 10px;
  1114. color: #ffffff;
  1115. font-size: calc(
  1116. 24 / v-bind("windowSizeWhenDesignForRef") *
  1117. v-bind("windowSizeInCssForRef")
  1118. );
  1119. line-height: calc(
  1120. 30 / v-bind("windowSizeWhenDesignForRef") *
  1121. v-bind("windowSizeInCssForRef")
  1122. );
  1123. font-family: KaiTi;
  1124. }
  1125. }
  1126. > .bottom-box {
  1127. width: 100%;
  1128. min-height: 10vh;
  1129. background: linear-gradient(
  1130. 0deg,
  1131. rgba(73, 91, 71, 0.7) 0%,
  1132. rgba(115, 115, 115, 0) 100%
  1133. );
  1134. position: absolute;
  1135. bottom: 0;
  1136. left: 0;
  1137. }
  1138. > .system-btns {
  1139. width: 30px;
  1140. height: 30px;
  1141. padding: 0
  1142. calc(
  1143. 20 / v-bind(windowSizeWhenDesignForRef) *
  1144. v-bind(windowSizeInCssForRef)
  1145. );
  1146. position: fixed;
  1147. left: calc(
  1148. 30 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1149. );
  1150. bottom: calc(
  1151. 50 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1152. );
  1153. z-index: 2;
  1154. }
  1155. }
  1156. > .author-box {
  1157. width: 100%;
  1158. height: 100%;
  1159. background: rgba(73, 91, 71, 0.7);
  1160. backdrop-filter: blur(22.5px);
  1161. position: fixed;
  1162. top: 0;
  1163. left: 0;
  1164. padding: 0 10%;
  1165. z-index: 15;
  1166. padding-top: 15%;
  1167. padding-left: 10%;
  1168. padding-right: 10%;
  1169. > .author-content {
  1170. width: 100%;
  1171. height: 100%;
  1172. overflow: auto;
  1173. &::-webkit-scrollbar {
  1174. display: none;
  1175. }
  1176. display: flex;
  1177. flex-direction: column;
  1178. align-items: center;
  1179. > .author-img {
  1180. width: 100%;
  1181. margin-bottom: 5px;
  1182. display: flex;
  1183. justify-content: end;
  1184. > img {
  1185. width: 30%;
  1186. }
  1187. }
  1188. > .author-name {
  1189. // width: 50%;
  1190. width: 100%;
  1191. margin-bottom: 5px;
  1192. display: flex;
  1193. justify-content: start;
  1194. > img {
  1195. width: 50%;
  1196. }
  1197. }
  1198. > .line {
  1199. width: 100%;
  1200. min-height: 1px;
  1201. background: #e1edd9;
  1202. margin: 15px auto;
  1203. content: "";
  1204. }
  1205. > .text-box {
  1206. width: 100%;
  1207. > p {
  1208. text-indent: 2em;
  1209. margin-bottom: 10px;
  1210. color: #ffffff;
  1211. font-size: calc(
  1212. 24 / v-bind("windowSizeWhenDesignForRef") *
  1213. v-bind("windowSizeInCssForRef")
  1214. );
  1215. line-height: calc(
  1216. 30 / v-bind("windowSizeWhenDesignForRef") *
  1217. v-bind("windowSizeInCssForRef")
  1218. );
  1219. font-family: KaiTi;
  1220. }
  1221. }
  1222. }
  1223. > .bottom-box {
  1224. width: 100%;
  1225. min-height: 20vh;
  1226. background: linear-gradient(
  1227. 0deg,
  1228. rgba(73, 91, 71, 0.7) 0%,
  1229. rgba(115, 115, 115, 0) 100%
  1230. );
  1231. position: absolute;
  1232. bottom: 0;
  1233. left: 0;
  1234. }
  1235. > .back-btn {
  1236. left: calc(
  1237. 17 / v-bind("windowSizeWhenDesignForRef") *
  1238. v-bind("windowSizeInCssForRef")
  1239. );
  1240. bottom: calc(
  1241. 17 / v-bind("windowSizeWhenDesignForRef") *
  1242. v-bind("windowSizeInCssForRef")
  1243. );
  1244. position: absolute;
  1245. }
  1246. > .system-btns {
  1247. // width: 100%;
  1248. padding: 0
  1249. calc(
  1250. 20 / v-bind(windowSizeWhenDesignForRef) *
  1251. v-bind(windowSizeInCssForRef)
  1252. );
  1253. position: fixed;
  1254. left: calc(
  1255. 30 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1256. );
  1257. bottom: calc(
  1258. 35 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1259. );
  1260. z-index: 34;
  1261. }
  1262. }
  1263. }
  1264. </style>