HomeView.vue 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349
  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. <BtnBack
  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. @click="backFu()"
  386. />
  387. <!-- <img
  388. :style="{
  389. opacity:
  390. curPageIndex == 2 ||
  391. curPageIndex == 3 ||
  392. curPageIndex == 4 ||
  393. curPageIndex == 5
  394. ? 1
  395. : 0,
  396. zIndex: curPageIndex == 1 || curPageIndex == 0 ? -1 : 1,
  397. }"
  398. class="back-btn-main"
  399. src="@/assets/images/icon_back_white.png"
  400. alt=""
  401. @click="backFu()"
  402. > -->
  403. <!-- 石头文字层 -->
  404. <div
  405. class="stone-text-box"
  406. :style="{
  407. opacity: curPageIndex == 5 ? 1 : 0,
  408. }"
  409. >
  410. <img
  411. class="stone-text"
  412. src="@/assets/images/stone-text-min.png"
  413. >
  414. </div>
  415. <!-- 作品简介 -->
  416. <div
  417. v-show="isShowPaintingDesc"
  418. class="painting-box"
  419. >
  420. <!-- 顶部画作 -->
  421. <img
  422. class="painting-img"
  423. src="@/assets/images/img_painting-box.png"
  424. alt=""
  425. >
  426. <div class="text-box">
  427. <p
  428. v-for="(item, index) in homepagePaintingDesc"
  429. :key="index"
  430. >
  431. {{ item }}
  432. </p>
  433. </div>
  434. <!-- <div class="bottom-box" /> -->
  435. <BtnBack
  436. class="back-btn"
  437. @click="isShowPaintingDesc = false"
  438. />
  439. <!-- <img
  440. class="back-btn"
  441. src="@/assets/images/icon_back_white.png"
  442. alt=""
  443. @click="isShowPaintingDesc = false"
  444. > -->
  445. <!-- <BtnBack
  446. class="system-btns"
  447. @click="isShowPaintingDesc = false"
  448. /> -->
  449. </div>
  450. <!-- 作者简介 -->
  451. <div
  452. v-show="isShowAuthorDesc"
  453. class="author-box"
  454. >
  455. <div class="author-content">
  456. <div class="author-img">
  457. <img src="@/assets/images/img_author-min.png">
  458. </div>
  459. <div class="author-name">
  460. <img src="@/assets/images/text_likan-min.png">
  461. </div>
  462. <div class="line" />
  463. <div class="text-box">
  464. <p
  465. v-for="(item, index) in homepageAuthorDesc"
  466. :key="index"
  467. >
  468. {{ item }}
  469. </p>
  470. </div>
  471. </div>
  472. <!-- 底部遮罩 -->
  473. <!-- <div class="bottom-box" /> -->
  474. <BtnBack
  475. class="back-btn"
  476. @click="isShowAuthorDesc = false"
  477. />
  478. <!-- <img
  479. style="position: absolute; bottom: 30px; left: 20px; width: 25px"
  480. src="@/assets/images/icon_back_white.png"
  481. alt=""
  482. @click="isShowAuthorDesc = false"
  483. > -->
  484. <!-- <BtnBack
  485. class="system-btns"
  486. @click="isShowAuthorDesc = false"
  487. /> -->
  488. </div>
  489. </div>
  490. </template>
  491. <style lang="less" scoped>
  492. body {
  493. -webkit-transform: translate3d(0, 0, 0);
  494. transform: translate3d(0, 0, 0);
  495. }
  496. // img,div {
  497. // -webkit-backface-visibility: hidden;
  498. // backface-visibility: hidden;
  499. // transition: width 1.5s, transform 1.5s, top 1.5s, opacity 1.5s;
  500. // }
  501. img,
  502. div {
  503. -webkit-backface-visibility: hidden;
  504. backface-visibility: hidden;
  505. // transition: opacity 1.5s, top 1.5s, transform 1.5s;
  506. transition: transform 1.5s, opacity 1.5s, top 1.5s, width 1.5s, height 1.5s;
  507. }
  508. ::-webkit-scrollbar {
  509. display: none;
  510. }
  511. .home {
  512. width: 100%;
  513. height: 100%;
  514. background-image: url(@/assets/images/home-painting-line-small.jpg);
  515. background-size: cover;
  516. background-repeat: no-repeat;
  517. background-position: center center;
  518. position: relative;
  519. > video.fade-to-next-page {
  520. position: absolute;
  521. left: 0;
  522. top: 0;
  523. width: 100%;
  524. height: 100%;
  525. object-fit: cover;
  526. z-index: 20;
  527. }
  528. > .bg-mask {
  529. position: absolute;
  530. left: 0;
  531. top: 0;
  532. width: 100%;
  533. height: 100%;
  534. background: rgba(60, 89, 71, 0.65);
  535. backdrop-filter: blur(
  536. calc(
  537. 22 / v-bind("windowSizeWhenDesignForRef") *
  538. v-bind("windowSizeInCssForRef")
  539. )
  540. );
  541. }
  542. > .startup {
  543. z-index: 20;
  544. }
  545. > .title-wrap {
  546. position: absolute;
  547. left: 50%;
  548. top: calc(
  549. 36 / v-bind("windowSizeWhenDesignForRef") *
  550. v-bind("windowSizeInCssForRef")
  551. );
  552. transform: translate(-50%);
  553. width: calc(
  554. 43 / v-bind("windowSizeWhenDesignForRef") *
  555. v-bind("windowSizeInCssForRef")
  556. );
  557. height: calc(
  558. 180 / v-bind("windowSizeWhenDesignForRef") *
  559. v-bind("windowSizeInCssForRef")
  560. );
  561. z-index: 5;
  562. > img.title {
  563. position: absolute;
  564. left: 0;
  565. top: 0;
  566. width: 100%;
  567. height: 100%;
  568. }
  569. > .sub-text {
  570. position: absolute;
  571. left: 110%;
  572. top: 46%;
  573. transform: translateY(-50%);
  574. writing-mode: vertical-lr;
  575. font-family: KaiTi, KaiTi;
  576. font-weight: 400;
  577. font-size: calc(
  578. 18 / v-bind("windowSizeWhenDesignForRef") *
  579. v-bind("windowSizeInCssForRef")
  580. );
  581. color: #ffffff;
  582. line-height: calc(
  583. 21 / v-bind("windowSizeWhenDesignForRef") *
  584. v-bind("windowSizeInCssForRef")
  585. );
  586. white-space: pre;
  587. letter-spacing: 0.2em;
  588. text-align: center;
  589. }
  590. }
  591. > .hotspot-wrap {
  592. position: absolute;
  593. left: 50%;
  594. top: calc(
  595. 62 / v-bind("windowSizeWhenDesignForRef") *
  596. v-bind("windowSizeInCssForRef")
  597. ) !important;
  598. transform: translate(-46%, 0);
  599. width: calc(
  600. 266 / v-bind("windowSizeWhenDesignForRef") *
  601. v-bind("windowSizeInCssForRef")
  602. );
  603. height: calc(
  604. 517 / v-bind("windowSizeWhenDesignForRef") *
  605. v-bind("windowSizeInCssForRef")
  606. );
  607. z-index: 7;
  608. pointer-events: none;
  609. will-change: transform;
  610. backface-visibility: hidden;
  611. z-index: 10;
  612. & > div {
  613. z-index: 100;
  614. transition: all 2s ease-in-out;
  615. }
  616. > .hotspot-1 {
  617. position: absolute;
  618. top: calc(
  619. 54 / v-bind("windowSizeWhenDesignForRef") *
  620. v-bind("windowSizeInCssForRef")
  621. );
  622. right: calc(
  623. 0 / v-bind("windowSizeWhenDesignForRef") *
  624. v-bind("windowSizeInCssForRef")
  625. );
  626. pointer-events: initial;
  627. }
  628. > .hotspot-2 {
  629. position: absolute;
  630. left: calc(
  631. 60 / v-bind("windowSizeWhenDesignForRef") *
  632. v-bind("windowSizeInCssForRef")
  633. );
  634. top: calc(
  635. 222 / v-bind("windowSizeWhenDesignForRef") *
  636. v-bind("windowSizeInCssForRef")
  637. );
  638. pointer-events: initial;
  639. }
  640. > .hotspot-3 {
  641. position: absolute;
  642. bottom: calc(
  643. -10 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  644. );
  645. right: calc(
  646. -10 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  647. );
  648. pointer-events: initial;
  649. }
  650. }
  651. > .hotspot-wrap2 {
  652. position: absolute;
  653. left: 50%;
  654. top: calc(
  655. 62 / v-bind("windowSizeWhenDesignForRef") *
  656. v-bind("windowSizeInCssForRef")
  657. ) !important;
  658. transform: translate(-50%, 0);
  659. width: calc(
  660. 364 / v-bind("windowSizeWhenDesignForRef") *
  661. v-bind("windowSizeInCssForRef")
  662. );
  663. height: calc(
  664. 542 / v-bind("windowSizeWhenDesignForRef") *
  665. v-bind("windowSizeInCssForRef")
  666. );
  667. z-index: 4;
  668. & > div {
  669. z-index: 100;
  670. transition: all 2s ease-in-out;
  671. }
  672. // background: rgba(0, 128, 0, 0.527);
  673. > .hotspot-leaf {
  674. position: absolute;
  675. top: calc(
  676. 259 / v-bind("windowSizeWhenDesignForRef") *
  677. v-bind("windowSizeInCssForRef")
  678. );
  679. left: calc(
  680. 158 / v-bind("windowSizeWhenDesignForRef") *
  681. v-bind("windowSizeInCssForRef")
  682. );
  683. }
  684. > .hotspot-stem {
  685. position: absolute;
  686. top: calc(
  687. 79 / v-bind("windowSizeWhenDesignForRef") *
  688. v-bind("windowSizeInCssForRef")
  689. );
  690. left: calc(
  691. 256 / v-bind("windowSizeWhenDesignForRef") *
  692. v-bind("windowSizeInCssForRef")
  693. );
  694. }
  695. > .hotspot-stone {
  696. position: absolute;
  697. top: calc(
  698. 395 / v-bind("windowSizeWhenDesignForRef") *
  699. v-bind("windowSizeInCssForRef")
  700. );
  701. left: calc(
  702. 94 / v-bind("windowSizeWhenDesignForRef") *
  703. v-bind("windowSizeInCssForRef")
  704. );
  705. }
  706. > .icon_scale {
  707. width: 35px;
  708. height: 35px;
  709. position: absolute;
  710. right: 0;
  711. bottom: 0;
  712. transition: all 1.5s ease-in-out;
  713. }
  714. }
  715. > .hotspot-detail {
  716. z-index: 21;
  717. }
  718. > .painting-wrap {
  719. position: absolute;
  720. left: 50%;
  721. width: calc(
  722. 308 / v-bind("windowSizeWhenDesignForRef") *
  723. v-bind("windowSizeInCssForRef")
  724. );
  725. height: calc(
  726. 523 / v-bind("windowSizeWhenDesignForRef") *
  727. v-bind("windowSizeInCssForRef")
  728. );
  729. // background: green;
  730. transform: translate(-50%, 0);
  731. z-index: 1;
  732. > .painting-border {
  733. width: 100%;
  734. height: 100%;
  735. position: absolute;
  736. }
  737. > .painting-stem {
  738. width: calc(
  739. 245 / v-bind("windowSizeWhenDesignForRef") *
  740. v-bind("windowSizeInCssForRef")
  741. );
  742. height: calc(
  743. 371 / v-bind("windowSizeWhenDesignForRef") *
  744. v-bind("windowSizeInCssForRef")
  745. );
  746. position: absolute;
  747. left: 50%;
  748. transform: translate(-50%, 26%);
  749. }
  750. }
  751. > .painting-wrap1 {
  752. top: 28%;
  753. }
  754. > .painting-wrap2 {
  755. top: 7%;
  756. z-index: 8;
  757. transform: transform 1.5s !important;
  758. }
  759. > .painting-wrap3 {
  760. // transform: translate(-50%, 0%) scale(1.5);
  761. width: 110%;
  762. // height: calc(315 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  763. height: calc(
  764. 760 / v-bind("windowSizeWhenDesignForRef") *
  765. v-bind("windowSizeInCssForRef")
  766. );
  767. top: calc(
  768. -80 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  769. );
  770. > .painting-stem {
  771. width: calc(
  772. 364 / v-bind("windowSizeWhenDesignForRef") *
  773. v-bind("windowSizeInCssForRef")
  774. );
  775. height: calc(
  776. 542 / v-bind("windowSizeWhenDesignForRef") *
  777. v-bind("windowSizeInCssForRef")
  778. );
  779. }
  780. > .green-box {
  781. width: 200vw;
  782. height: 200vh;
  783. background: rgba(85, 116, 83, 0.8);
  784. position: fixed;
  785. top: 0;
  786. left: 0;
  787. z-index: 2;
  788. overflow: hidden;
  789. transition: opacity 1s ease;
  790. }
  791. }
  792. > .painting-wrap4 {
  793. // transform: translate(-57%, -40%) scale(3.2);
  794. width: calc(110% * 3.2);
  795. // height: calc(315 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  796. height: calc(
  797. 760 * 3.2 / v-bind("windowSizeWhenDesignForRef") *
  798. v-bind("windowSizeInCssForRef")
  799. );
  800. transform: translate(-53%, -53%);
  801. transform-origin: 50% 50%;
  802. > .painting-stem {
  803. width: calc(
  804. 364 * 3.2 / v-bind("windowSizeWhenDesignForRef") *
  805. v-bind("windowSizeInCssForRef")
  806. );
  807. height: calc(
  808. 542 * 3.2 / v-bind("windowSizeWhenDesignForRef") *
  809. v-bind("windowSizeInCssForRef")
  810. );
  811. }
  812. }
  813. > .painting-wrap5 {
  814. // transform: translate(-26%, 10%) scale(2.6);
  815. width: calc(110% * 2.2);
  816. // height: calc(315 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  817. height: calc(
  818. 760 * 2.2 / v-bind("windowSizeWhenDesignForRef") *
  819. v-bind("windowSizeInCssForRef")
  820. );
  821. transform: translate(-40%, -39%);
  822. transform-origin: center center;
  823. > .painting-stem {
  824. width: calc(
  825. 364 * 2.2 / v-bind("windowSizeWhenDesignForRef") *
  826. v-bind("windowSizeInCssForRef")
  827. );
  828. height: calc(
  829. 542 * 2.2 / v-bind("windowSizeWhenDesignForRef") *
  830. v-bind("windowSizeInCssForRef")
  831. );
  832. }
  833. }
  834. > .center-text {
  835. position: absolute;
  836. left: 50%;
  837. top: calc(
  838. 650 / v-bind("windowSizeWhenDesignForRef") *
  839. v-bind("windowSizeInCssForRef")
  840. );
  841. transform: translateX(-50%);
  842. width: calc(
  843. 309 / v-bind("windowSizeWhenDesignForRef") *
  844. v-bind("windowSizeInCssForRef")
  845. );
  846. display: flex;
  847. justify-content: center;
  848. align-items: center;
  849. font-family: KaiTi, KaiTi;
  850. color: #ffffff;
  851. font-weight: 400;
  852. font-size: calc(
  853. 30 / v-bind("windowSizeWhenDesignForRef") *
  854. v-bind("windowSizeInCssForRef")
  855. );
  856. line-height: calc(
  857. 42 / v-bind("windowSizeWhenDesignForRef") *
  858. v-bind("windowSizeInCssForRef")
  859. );
  860. text-align: justify;
  861. z-index: 2;
  862. }
  863. > .fixed-desc {
  864. position: absolute;
  865. left: 50%;
  866. transform: translateX(-50%);
  867. width: calc(
  868. 309 / v-bind("windowSizeWhenDesignForRef") *
  869. v-bind("windowSizeInCssForRef")
  870. );
  871. height: 20%;
  872. display: flex;
  873. justify-content: center;
  874. align-items: center;
  875. font-family: KaiTi, KaiTi;
  876. color: #ffffff;
  877. font-weight: 400;
  878. top: calc(
  879. 670 / v-bind("windowSizeWhenDesignForRef") *
  880. v-bind("windowSizeInCssForRef")
  881. );
  882. font-size: calc(
  883. 18 / v-bind("windowSizeWhenDesignForRef") *
  884. v-bind("windowSizeInCssForRef")
  885. );
  886. line-height: calc(
  887. 25 / v-bind("windowSizeWhenDesignForRef") *
  888. v-bind("windowSizeInCssForRef")
  889. );
  890. text-align: justify;
  891. display: block;
  892. z-index: 2;
  893. margin-top: calc(
  894. 30 / v-bind("windowSizeWhenDesignForRef") *
  895. v-bind("windowSizeInCssForRef")
  896. );
  897. }
  898. > .operation-tip {
  899. position: absolute;
  900. left: 50%;
  901. transform: translateX(-50%);
  902. bottom: calc(
  903. 25 / v-bind("windowSizeWhenDesignForRef") *
  904. v-bind("windowSizeInCssForRef")
  905. );
  906. }
  907. > .click-tip {
  908. position: absolute;
  909. width: 45px;
  910. height: 45px;
  911. top: calc(
  912. 340 / v-bind("windowSizeWhenDesignForRef") *
  913. v-bind("windowSizeInCssForRef")
  914. );
  915. left: calc(
  916. 280 / v-bind("windowSizeWhenDesignForRef") *
  917. v-bind("windowSizeInCssForRef")
  918. );
  919. z-index: 10;
  920. opacity: 0;
  921. }
  922. > .click-tip-ac {
  923. opacity: 1;
  924. }
  925. > .big-tip {
  926. position: fixed;
  927. bottom: calc(
  928. 30 / v-bind("windowSizeWhenDesignForRef") *
  929. v-bind("windowSizeInCssForRef")
  930. );
  931. left: 50%;
  932. transform: translateX(-50%);
  933. }
  934. > .big-tip-ac {
  935. opacity: 1;
  936. z-index: 2015;
  937. }
  938. > .stone-text-box {
  939. position: fixed;
  940. top: 0;
  941. right: 0;
  942. z-index: 3;
  943. width: calc(
  944. 224 / var(--9ea40744-windowSizeWhenDesignForRef) *
  945. var(--9ea40744-windowSizeInCssForRef)
  946. );
  947. background: linear-gradient(78deg, rgba(0, 0, 0, 0) 38%, #00000087 75%);
  948. height: 100%;
  949. > .stone-text {
  950. position: fixed;
  951. top: calc(
  952. 50 / v-bind("windowSizeWhenDesignForRef") *
  953. v-bind("windowSizeInCssForRef")
  954. );
  955. right: calc(
  956. 20 / v-bind("windowSizeWhenDesignForRef") *
  957. v-bind("windowSizeInCssForRef")
  958. );
  959. z-index: 3;
  960. width: calc(
  961. 120 / v-bind("windowSizeWhenDesignForRef") *
  962. v-bind("windowSizeInCssForRef")
  963. );
  964. }
  965. }
  966. > .learn-more {
  967. width: calc(
  968. 134 / v-bind("windowSizeWhenDesignForRef") *
  969. v-bind("windowSizeInCssForRef")
  970. );
  971. height: calc(
  972. 50 / v-bind("windowSizeWhenDesignForRef") *
  973. v-bind("windowSizeInCssForRef")
  974. );
  975. display: flex;
  976. justify-content: center;
  977. align-items: center;
  978. color: white;
  979. font-family: "KaiTi";
  980. position: absolute;
  981. top: calc(
  982. 745 / v-bind("windowSizeWhenDesignForRef") *
  983. v-bind("windowSizeInCssForRef")
  984. );
  985. font-size: calc(
  986. 20 / v-bind("windowSizeWhenDesignForRef") *
  987. v-bind("windowSizeInCssForRef")
  988. );
  989. line-height: calc(
  990. 29 / v-bind("windowSizeWhenDesignForRef") *
  991. v-bind("windowSizeInCssForRef")
  992. );
  993. left: 50%;
  994. transform: translateX(-50%);
  995. background: url(@/assets/images/learn-more.png);
  996. background-size: 100% 100%;
  997. }
  998. > .back-btn-main {
  999. position: absolute;
  1000. z-index: 3;
  1001. left: calc(
  1002. 17 / v-bind("windowSizeWhenDesignForRef") *
  1003. v-bind("windowSizeInCssForRef")
  1004. );
  1005. bottom: calc(
  1006. 17 / v-bind("windowSizeWhenDesignForRef") *
  1007. v-bind("windowSizeInCssForRef")
  1008. );
  1009. }
  1010. > .long-desc {
  1011. position: absolute;
  1012. left: 50%;
  1013. bottom: calc(
  1014. 0 / v-bind("windowSizeWhenDesignForRef") * v-bind("windowSizeInCssForRef")
  1015. );
  1016. width: calc(
  1017. 309 / v-bind("windowSizeWhenDesignForRef") *
  1018. v-bind("windowSizeInCssForRef")
  1019. );
  1020. transform: translate(-50%, 100%);
  1021. color: white;
  1022. overflow: hidden;
  1023. font-family: KaiTi, KaiTi;
  1024. color: #ffffff;
  1025. animation: none;
  1026. display: flex;
  1027. justify-content: space-between;
  1028. z-index: 2;
  1029. opacity: 0;
  1030. > .page2-box {
  1031. display: flex;
  1032. flex-direction: column;
  1033. justify-content: center;
  1034. align-items: center;
  1035. > img {
  1036. width: 45%;
  1037. margin-bottom: 10px;
  1038. }
  1039. > div {
  1040. font-size: calc(
  1041. 20 / v-bind("windowSizeWhenDesignForRef") *
  1042. v-bind("windowSizeInCssForRef")
  1043. );
  1044. font-family: KaiTi, KaiTi;
  1045. }
  1046. }
  1047. }
  1048. > .long-desc-ac {
  1049. bottom: calc(
  1050. 100 / v-bind("windowSizeWhenDesignForRef") *
  1051. v-bind("windowSizeInCssForRef")
  1052. );
  1053. transform: translate(-50%, 0);
  1054. z-index: 5;
  1055. opacity: 1;
  1056. }
  1057. > .painting-box {
  1058. width: 100%;
  1059. height: 100%;
  1060. background: rgba(73, 91, 71, 0.7);
  1061. backdrop-filter: blur(22.5px);
  1062. position: fixed;
  1063. top: 0;
  1064. left: 0;
  1065. display: flex;
  1066. flex-direction: column;
  1067. // align-content: center;
  1068. align-items: center;
  1069. // justify-content: center;
  1070. z-index: 15;
  1071. padding-top: 15%;
  1072. padding-left: 10%;
  1073. padding-right: 10%;
  1074. > .back-btn {
  1075. left: calc(
  1076. 17 / v-bind("windowSizeWhenDesignForRef") *
  1077. v-bind("windowSizeInCssForRef")
  1078. );
  1079. bottom: calc(
  1080. 17 / v-bind("windowSizeWhenDesignForRef") *
  1081. v-bind("windowSizeInCssForRef")
  1082. );
  1083. position: absolute;
  1084. }
  1085. > .painting-img {
  1086. width: 70%;
  1087. margin-bottom: 20px;
  1088. }
  1089. > .text-box {
  1090. width: 100%;
  1091. overflow: auto;
  1092. &::-webkit-scrollbar {
  1093. display: none;
  1094. }
  1095. > p {
  1096. text-indent: 2em;
  1097. margin-bottom: 10px;
  1098. color: #ffffff;
  1099. font-size: calc(
  1100. 24 / v-bind("windowSizeWhenDesignForRef") *
  1101. v-bind("windowSizeInCssForRef")
  1102. );
  1103. line-height: calc(
  1104. 30 / v-bind("windowSizeWhenDesignForRef") *
  1105. v-bind("windowSizeInCssForRef")
  1106. );
  1107. font-family: KaiTi, KaiTi;
  1108. }
  1109. }
  1110. > .bottom-box {
  1111. width: 100%;
  1112. min-height: 10vh;
  1113. background: linear-gradient(
  1114. 0deg,
  1115. rgba(73, 91, 71, 0.7) 0%,
  1116. rgba(115, 115, 115, 0) 100%
  1117. );
  1118. position: absolute;
  1119. bottom: 0;
  1120. left: 0;
  1121. }
  1122. > .system-btns {
  1123. width: 30px;
  1124. height: 30px;
  1125. padding: 0
  1126. calc(
  1127. 20 / v-bind(windowSizeWhenDesignForRef) *
  1128. v-bind(windowSizeInCssForRef)
  1129. );
  1130. position: fixed;
  1131. left: calc(
  1132. 30 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1133. );
  1134. bottom: calc(
  1135. 50 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1136. );
  1137. z-index: 2;
  1138. }
  1139. }
  1140. > .author-box {
  1141. width: 100%;
  1142. height: 100%;
  1143. background: rgba(73, 91, 71, 0.7);
  1144. backdrop-filter: blur(22.5px);
  1145. position: fixed;
  1146. top: 0;
  1147. left: 0;
  1148. padding: 0 10%;
  1149. z-index: 15;
  1150. padding-top: 15%;
  1151. padding-left: 10%;
  1152. padding-right: 10%;
  1153. > .author-content {
  1154. width: 100%;
  1155. height: 100%;
  1156. overflow: auto;
  1157. &::-webkit-scrollbar {
  1158. display: none;
  1159. }
  1160. display: flex;
  1161. flex-direction: column;
  1162. align-items: center;
  1163. > .author-img {
  1164. width: 100%;
  1165. margin-bottom: 5px;
  1166. display: flex;
  1167. justify-content: end;
  1168. > img {
  1169. width: 30%;
  1170. }
  1171. }
  1172. > .author-name {
  1173. // width: 50%;
  1174. width: 100%;
  1175. margin-bottom: 5px;
  1176. display: flex;
  1177. justify-content: start;
  1178. > img {
  1179. width: 50%;
  1180. }
  1181. }
  1182. > .line {
  1183. width: 100%;
  1184. min-height: 1px;
  1185. background: #e1edd9;
  1186. margin: 15px auto;
  1187. content: "";
  1188. }
  1189. > .text-box {
  1190. width: 100%;
  1191. > p {
  1192. text-indent: 2em;
  1193. margin-bottom: 10px;
  1194. color: #ffffff;
  1195. font-size: calc(
  1196. 24 / v-bind("windowSizeWhenDesignForRef") *
  1197. v-bind("windowSizeInCssForRef")
  1198. );
  1199. line-height: calc(
  1200. 30 / v-bind("windowSizeWhenDesignForRef") *
  1201. v-bind("windowSizeInCssForRef")
  1202. );
  1203. font-family: KaiTi, KaiTi;
  1204. }
  1205. }
  1206. }
  1207. > .bottom-box {
  1208. width: 100%;
  1209. min-height: 20vh;
  1210. background: linear-gradient(
  1211. 0deg,
  1212. rgba(73, 91, 71, 0.7) 0%,
  1213. rgba(115, 115, 115, 0) 100%
  1214. );
  1215. position: absolute;
  1216. bottom: 0;
  1217. left: 0;
  1218. }
  1219. > .back-btn {
  1220. left: calc(
  1221. 17 / v-bind("windowSizeWhenDesignForRef") *
  1222. v-bind("windowSizeInCssForRef")
  1223. );
  1224. bottom: calc(
  1225. 17 / v-bind("windowSizeWhenDesignForRef") *
  1226. v-bind("windowSizeInCssForRef")
  1227. );
  1228. position: absolute;
  1229. }
  1230. > .system-btns {
  1231. // width: 100%;
  1232. padding: 0
  1233. calc(
  1234. 20 / v-bind(windowSizeWhenDesignForRef) *
  1235. v-bind(windowSizeInCssForRef)
  1236. );
  1237. position: fixed;
  1238. left: calc(
  1239. 30 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1240. );
  1241. bottom: calc(
  1242. 35 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef)
  1243. );
  1244. z-index: 34;
  1245. }
  1246. }
  1247. }
  1248. </style>