HomeView.vue 31 KB

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