MoreContent.vue 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193
  1. <template>
  2. <div class="more-content">
  3. <div
  4. ref="scrollTarget"
  5. v-touch:swipe.left="onSwipeLeft"
  6. v-touch:swipe.right="onswipeRight"
  7. class="scroll-target"
  8. >
  9. <img
  10. class="bg"
  11. :style="{
  12. left: bgLeft + 'px'
  13. }"
  14. src="@/assets/images/fade-chapter-wood/bg-more-content.jpg"
  15. alt=""
  16. draggable="false"
  17. >
  18. <div
  19. class="layer-4"
  20. :style="{
  21. left: layer4Left + 'px',
  22. }"
  23. >
  24. <img
  25. class="bamboo-4_01"
  26. src="@/assets/images/fade-chapter-wood/4_01.png"
  27. alt=""
  28. draggable="false"
  29. >
  30. <img
  31. class="bamboo-4_02"
  32. src="@/assets/images/fade-chapter-wood/4_02.png"
  33. alt=""
  34. draggable="false"
  35. >
  36. <!-- <img
  37. class="bamboo-4_03"
  38. src="@/assets/images/fade-chapter-wood/4_03.png"
  39. alt=""
  40. draggable="false"
  41. > -->
  42. <!-- <img
  43. class="bamboo-4_04"
  44. src="@/assets/images/fade-chapter-wood/4_04.png"
  45. alt=""
  46. draggable="false"
  47. > -->
  48. <img
  49. class="bamboo-4_05"
  50. src="@/assets/images/fade-chapter-wood/4_05.png"
  51. alt=""
  52. draggable="false"
  53. >
  54. <img
  55. class="bamboo-4_06"
  56. src="@/assets/images/fade-chapter-wood/4_06.png"
  57. alt=""
  58. draggable="false"
  59. >
  60. <img
  61. class="bamboo-4_07"
  62. src="@/assets/images/fade-chapter-wood/4_07.png"
  63. alt=""
  64. draggable="false"
  65. >
  66. <img
  67. class="bamboo-4_08"
  68. src="@/assets/images/fade-chapter-wood/4_08.png"
  69. alt=""
  70. draggable="false"
  71. >
  72. <img
  73. class="bamboo-4_09"
  74. src="@/assets/images/fade-chapter-wood/4_09.png"
  75. alt=""
  76. draggable="false"
  77. >
  78. <img
  79. class="bamboo-4_10"
  80. src="@/assets/images/fade-chapter-wood/4_10.png"
  81. alt=""
  82. draggable="false"
  83. >
  84. <img
  85. class="bamboo-4_11"
  86. src="@/assets/images/fade-chapter-wood/4_11.png"
  87. alt=""
  88. draggable="false"
  89. >
  90. <img
  91. class="bamboo-4_12"
  92. src="@/assets/images/fade-chapter-wood/4_12.png"
  93. alt=""
  94. draggable="false"
  95. >
  96. </div>
  97. <div
  98. class="layer-3"
  99. :style="{
  100. left: layer3Left + 'px',
  101. }"
  102. >
  103. <img
  104. class="bamboo-3_01"
  105. src="@/assets/images/fade-chapter-wood/3_01.png"
  106. alt=""
  107. draggable="false"
  108. >
  109. <img
  110. class="bamboo-3_02"
  111. src="@/assets/images/fade-chapter-wood/3_02.png"
  112. alt=""
  113. draggable="false"
  114. >
  115. <img
  116. class="bamboo-3_03"
  117. src="@/assets/images/fade-chapter-wood/3_03.png"
  118. alt=""
  119. draggable="false"
  120. >
  121. <img
  122. class="bamboo-3_04"
  123. src="@/assets/images/fade-chapter-wood/3_04.png"
  124. alt=""
  125. draggable="false"
  126. >
  127. </div>
  128. <div
  129. class="layer-2"
  130. :style="{
  131. left: layer2Left + 'px',
  132. }"
  133. >
  134. <img
  135. class="bamboo-2_01"
  136. src="@/assets/images/fade-chapter-wood/2_01.png"
  137. alt=""
  138. draggable="false"
  139. >
  140. <img
  141. class="bamboo-2_03"
  142. src="@/assets/images/fade-chapter-wood/2_03.png"
  143. alt=""
  144. draggable="false"
  145. >
  146. <img
  147. class="bamboo-2_02"
  148. src="@/assets/images/fade-chapter-wood/2_02.png"
  149. alt=""
  150. draggable="false"
  151. >
  152. <!-- <img
  153. class="bamboo-2_03"
  154. src="@/assets/images/fade-chapter-wood/2_03.png"
  155. alt=""
  156. draggable="false"
  157. > -->
  158. <img
  159. class="bamboo-2_04"
  160. src="@/assets/images/fade-chapter-wood/2_04.png"
  161. alt=""
  162. draggable="false"
  163. >
  164. <img
  165. class="bamboo-2_04-1"
  166. src="@/assets/images/fade-chapter-wood/2_04-1.png"
  167. alt=""
  168. draggable="false"
  169. >
  170. <img
  171. class="bamboo-2_05"
  172. src="@/assets/images/fade-chapter-wood/2_05.png"
  173. alt=""
  174. draggable="false"
  175. >
  176. </div>
  177. <div
  178. class="layer-1"
  179. :style="{
  180. left: layer1Left + 'px',
  181. }"
  182. >
  183. <img
  184. class="bamboo-1_01"
  185. src="@/assets/images/fade-chapter-wood/1_01.png"
  186. alt=""
  187. draggable="false"
  188. >
  189. <HotspotComp
  190. class="hotspot"
  191. @click="router.push({
  192. name: 'BambooHot',
  193. })"
  194. />
  195. <div class="shuang-gou-she-se-group">
  196. <button
  197. class="watch-detail animation-show-long-hide"
  198. @click="onClickShuangGouEntry"
  199. >
  200. 查看详情
  201. </button>
  202. <div class="group-title">
  203. 双钩设色
  204. <img
  205. class="deco"
  206. src="@/assets/images/more-content-deco.png"
  207. alt=""
  208. draggable="false"
  209. >
  210. </div>
  211. </div>
  212. <img
  213. class="bamboo-1_02"
  214. src="@/assets/images/fade-chapter-wood/1_02.png"
  215. alt=""
  216. draggable="false"
  217. >
  218. <div class="mo-zhu-group">
  219. <div class="button-group">
  220. <button
  221. class="poem animation-show-long-hide"
  222. @click="onClickEntryAtMoZhu('PoemList')"
  223. >
  224. 人文
  225. </button>
  226. <button
  227. class="animation-show-long-hide"
  228. @click="onClickEntryAtMoZhu('PaintingList')"
  229. >
  230. 画作
  231. </button>
  232. <button
  233. class="animation-show-long-hide"
  234. @click="onClickEntryAtMoZhu('BambooBook')"
  235. >
  236. 竹谱
  237. </button>
  238. </div>
  239. <div class="group-title">
  240. 墨竹
  241. <img
  242. class="deco"
  243. src="@/assets/images/more-content-deco.png"
  244. alt=""
  245. draggable="false"
  246. >
  247. </div>
  248. </div>
  249. <img
  250. class="bamboo-1_03"
  251. src="@/assets/images/fade-chapter-wood/1_03.png"
  252. alt=""
  253. draggable="false"
  254. >
  255. <img
  256. class="bamboo-1_04"
  257. src="@/assets/images/fade-chapter-wood/1_04.png"
  258. alt=""
  259. draggable="false"
  260. >
  261. <div class="wei-ye-group">
  262. <img
  263. src="@/assets/images/wu-jing-cang.png"
  264. alt=""
  265. >
  266. <div
  267. class="game-box"
  268. @click="() => { isShowGamePage = true }"
  269. >
  270. 画作创作
  271. </div>
  272. <div
  273. class="online-box"
  274. @click="() => { isShowScenePage = true }"
  275. >
  276. 线上展厅
  277. </div>
  278. </div>
  279. <img
  280. class="bamboo-1_05"
  281. src="@/assets/images/fade-chapter-wood/1_05.png"
  282. alt=""
  283. draggable="false"
  284. >
  285. </div>
  286. </div>
  287. <PaginationComp
  288. class="pagination"
  289. :total="3"
  290. :idx="currentAnchorIdx"
  291. />
  292. <BtnBack
  293. @click="router.push({
  294. name: 'HomeView',
  295. })"
  296. />
  297. <OperationTip
  298. class="operation-tip"
  299. :direction="'h'"
  300. :text="'下一章'"
  301. :is-show="isShowOperationTip"
  302. :color="'green'"
  303. />
  304. <Transition name="fade-in">
  305. <video
  306. v-if="isShowVideoFadeAtShuangGou"
  307. ref="videoFadeAtShuangGouEl"
  308. class="fade-to-other-page"
  309. src="@/assets/videos/fade-at-shuang-gou.mp4"
  310. playsinline
  311. webkit-playsinline="true"
  312. x5-video-player-type="h5"
  313. @ended="router.push({
  314. name: 'ShuanggouDetail',
  315. })"
  316. />
  317. </Transition>
  318. <Transition name="fade-in">
  319. <video
  320. v-if="isShowVideoFadeAtMoZhu"
  321. ref="videoFadeAtMoZhuEl"
  322. class="fade-to-other-page"
  323. src="@/assets/videos/fade-at-mo-zhu.mp4"
  324. playsinline
  325. webkit-playsinline="true"
  326. x5-video-player-type="h5"
  327. />
  328. </Transition>
  329. <Transition name="fade-in">
  330. <video
  331. v-if="isShowVideoFadeAtPage3"
  332. ref="videoFadeAtPage3El"
  333. class="fade-to-other-page"
  334. src="@/assets/videos/fade-from-more-content-to-game.mp4"
  335. playsinline
  336. webkit-playsinline="true"
  337. x5-video-player-type="h5"
  338. />
  339. </Transition>
  340. <!-- 游戏页面 -->
  341. <div
  342. v-if="isShowGamePage"
  343. class="game-box"
  344. >
  345. <iframe
  346. id="gameIframe"
  347. :src="`./game/index.html`"
  348. />
  349. <!-- edit弹框 -->
  350. <div
  351. v-if="isShowToastFromGame"
  352. class="edit-box"
  353. >
  354. <!-- <input :v-model="inputValue"> -->
  355. <!-- <div class="text" >{{ inputValue }}</div>
  356. <div class="text">{{ }}</div> -->
  357. <!-- <textarea
  358. v-model="inputText"
  359. rows="2"
  360. maxlength="15"
  361. @input="onInput"
  362. /> -->
  363. <div class="input-box">
  364. <input
  365. ref="input1Ref"
  366. v-model="input1"
  367. @input="handleInput1"
  368. @keyup="checkInput1"
  369. >
  370. <input
  371. ref="input2Ref"
  372. v-model="input2"
  373. :readonly="input1.length < 7"
  374. @input="handleInput2"
  375. @keyup="checkInput2"
  376. >
  377. <div class="tips">
  378. 请输入内容
  379. </div>
  380. </div>
  381. <div
  382. class="cencel-btn"
  383. @click="isShowToastFromGame =false"
  384. >
  385. 取消
  386. </div>
  387. <div
  388. class="yes-btn"
  389. @click="saveTitle"
  390. >
  391. 保存
  392. </div>
  393. </div>
  394. </div>
  395. <!-- 线上展厅 -->
  396. <div
  397. v-if="isShowScenePage"
  398. class="scene-box"
  399. >
  400. <BtnBack
  401. class="scene-back"
  402. @click="isShowScenePage = false"
  403. />
  404. <iframe
  405. src="https://www.4dkankan.com/spg.html?m=KJ-et2X3su4ofm"
  406. frameborder="0"
  407. />
  408. </div>
  409. </div>
  410. </template>
  411. <script setup>
  412. import { ref, computed, watch, onMounted, onBeforeUnmount, inject, nextTick } from "vue"
  413. import { useRoute, useRouter } from "vue-router"
  414. import { useStore } from "vuex"
  415. import PoemList from '@/views/PoemList.vue'
  416. import paintingList from '@/views/PaintingList.vue'
  417. import useSmoothSwipe from '@/useFunctions/useSmoothSwipe.js'
  418. import { useWindowSize } from '@vueuse/core'
  419. import OperationTip from "@/components/OperationTip.vue"
  420. import useSizeAdapt from "@/useFunctions/useSizeAdapt.js"
  421. import PaginationComp from "@/components/PaginationComp.vue"
  422. const route = useRoute()
  423. const router = useRouter()
  424. const store = useStore()
  425. const $env = inject('$env')
  426. const isShowGamePage = ref(false)
  427. const isShowScenePage = ref(false)
  428. const isShowToastFromGame = ref(false)
  429. const input1 = ref('')
  430. const input2 = ref('')
  431. const input1Ref = ref(null)
  432. const input2Ref = ref(null)
  433. const handleInput1 = () => {
  434. console.log('第一个框得内容', input1.value)
  435. if (input1.value.length >= 7) {
  436. input1.value = input1.value.slice(0, 7) // 限制输入长度
  437. input2Ref.value.focus() // 聚焦到第二个输入框
  438. }
  439. }
  440. const checkInput1 = (event) => {
  441. if (event.key === 'Backspace' && input1.value.length === 0) {
  442. input2.value = '' // 清空第二个输入框
  443. input1Ref.value.focus() // 聚焦回到第一个输入框
  444. }
  445. }
  446. const handleInput2 = () => {
  447. // 这里可以添加类似的逻辑,但通常不需要,因为我们假设第二个输入框不会自动跳转回去
  448. if (input2.value.length >= 7) {
  449. input2.value = input2.value.slice(0, 7)
  450. }
  451. }
  452. const checkInput2 = (event) => {
  453. if (event.key === 'Backspace' && input2.value.length === 0) {
  454. input1Ref.value.focus() // 如果需要从第二个输入框清空后聚焦回第一个输入框
  455. }
  456. }
  457. const saveTitle = () => {
  458. var iframe = document.getElementById('gameIframe')
  459. var iframeWindow = iframe.contentWindow || window.frames['yourIframeId']
  460. if (iframeWindow) {
  461. iframeWindow.saveTitle(input1.value.length >= 7 ? input1.value + '\n' + input2.value : input1.value )
  462. isShowToastFromGame.value = false
  463. }
  464. }
  465. onMounted(() => {
  466. window.closeGame = () => {
  467. isShowGamePage.value = false
  468. }
  469. window.isShowToastFromGame = () =>{
  470. isShowToastFromGame.value = true
  471. }
  472. })
  473. const {
  474. windowSizeInCssForRef,
  475. windowSizeWhenDesignForRef,
  476. } = useSizeAdapt()
  477. const windowWidthDesign = 1560
  478. const windowHeightDesign = 844
  479. const scrollTarget = ref(null)
  480. const { width: windowWidth, height: windowHeight } = useWindowSize()
  481. const time = ref()
  482. onMounted(() => {
  483. // windowWidth.value = document.documentElement.clientWidth
  484. // windowHeight.value = document.documentElement.clientHeight
  485. window.addEventListener(
  486. "resize",
  487. () => {
  488. //@ts-ignore
  489. clearTimeout(time.value)
  490. //@ts-ignore
  491. time.value = window.setTimeout(() => {
  492. // 根元素
  493. const dom = document.querySelector("#app")
  494. if (dom && document.documentElement.clientWidth < 1000) {
  495. dom.style.height = document.documentElement.clientHeight + "px"
  496. dom.style.width = document.documentElement.clientWidth + "px"
  497. }
  498. }, 100)
  499. },
  500. true
  501. )
  502. })
  503. const maxTranslateLength = computed(() => {
  504. return windowHeight.value * windowWidthDesign / windowHeightDesign
  505. })
  506. const { onSwipeLeft, onswipeRight, haveSwipedThisTime, translateLength, currentAnchorIdx, goingToAnchorIdx } = useSmoothSwipe({
  507. scrollTargetRef: scrollTarget,
  508. maxTranslateLength,
  509. viewportWidth: windowWidth,
  510. anchorPosList: [
  511. maxTranslateLength.value * 236 / windowWidthDesign - windowWidth.value / 2,
  512. maxTranslateLength.value * 967 / windowWidthDesign - windowWidth.value / 2,
  513. maxTranslateLength.value * 1840 / windowWidthDesign - windowWidth.value / 2,
  514. // maxTranslateLength.value - windowWidth.value
  515. ],
  516. initialAnchorIdx: Number(route.query.anchorIdx) || 0
  517. })
  518. const bgInitialLeft = -30
  519. const bgLeft = ref(bgInitialLeft)
  520. const bgSpeedFactor = 0.8 * 0.8 * 0.8 * 0.8
  521. watch(translateLength, (v) => {
  522. bgLeft.value = bgInitialLeft - v * bgSpeedFactor
  523. }, {
  524. immediate: true,
  525. })
  526. const layer4SpeedFactor = 0.8 * 0.8 * 0.8
  527. const layer4InitialLeft = 0
  528. const layer4Left = ref(layer4InitialLeft)
  529. watch(translateLength, (v) => {
  530. layer4Left.value = layer4InitialLeft - v * layer4SpeedFactor
  531. }, {
  532. immediate: true,
  533. })
  534. const layer3SpeedFactor = 0.8 * 0.8
  535. const layer3InitialLeft = 0
  536. const layer3Left = ref(layer3InitialLeft)
  537. watch(translateLength, (v) => {
  538. layer3Left.value = layer3InitialLeft - v * layer3SpeedFactor
  539. }, {
  540. immediate: true,
  541. })
  542. const layer2SpeedFactor = 0.8
  543. const layer2InitialLeft = 0
  544. const layer2Left = ref(layer2InitialLeft)
  545. watch(translateLength, (v) => {
  546. layer2Left.value = layer2InitialLeft - v * layer2SpeedFactor
  547. }, {
  548. immediate: true,
  549. })
  550. const layer1InitialLeft = 0
  551. const layer1Left = ref(layer1InitialLeft)
  552. watch(translateLength, (v) => {
  553. layer1Left.value = layer1InitialLeft - v
  554. }, {
  555. immediate: true,
  556. })
  557. const isShowOperationTip = ref(true)
  558. const unwatch = watch(translateLength, (v) => {
  559. isShowOperationTip.value = false
  560. unwatch()
  561. // if (Math.abs(v - (scrollerEl.value.scrollHeight - scrollerEl.value.clientHeight)) <= 1) {
  562. // router.push({
  563. // name: 'MoreContent',
  564. // })
  565. // }
  566. })
  567. const videoFadeAtShuangGouEl = ref(null)
  568. const isShowVideoFadeAtShuangGou = ref(false)
  569. function onClickShuangGouEntry() {
  570. isShowVideoFadeAtShuangGou.value = true
  571. nextTick(() => {
  572. videoFadeAtShuangGouEl.value.play()
  573. })
  574. }
  575. const videoFadeAtMoZhuEl = ref(null)
  576. const isShowVideoFadeAtMoZhu = ref(false)
  577. function onClickEntryAtMoZhu(pathName) {
  578. isShowVideoFadeAtMoZhu.value = true
  579. nextTick(() => {
  580. videoFadeAtMoZhuEl.value.addEventListener('ended', () => {
  581. router.push({
  582. name: pathName,
  583. })
  584. })
  585. videoFadeAtMoZhuEl.value.play()
  586. })
  587. }
  588. const videoFadeAtPage3El = ref(null)
  589. const isShowVideoFadeAtPage3 = ref(false)
  590. // function onClickEntryAtMoZhu(pathName) {
  591. // isShowVideoFadeAtMoZhu.value = true
  592. // nextTick(() => {
  593. // videoFadeAtMoZhuEl.value.addEventListener('ended', () => {
  594. // router.push({
  595. // name: pathName,
  596. // })
  597. // })
  598. // videoFadeAtMoZhuEl.value.play()
  599. // })
  600. // }
  601. watch(goingToAnchorIdx, (v) => {
  602. if (v === 2) {
  603. // 跳转到尾页
  604. // setTimeout(() => {
  605. // isShowVideoFadeAtPage3.value = true
  606. // nextTick(() => {
  607. // videoFadeAtPage3El.value.addEventListener('ended', () => {
  608. // router.push({
  609. // name: 'Game',
  610. // })
  611. // })
  612. // videoFadeAtPage3El.value.play()
  613. // })
  614. // }, 850)
  615. }
  616. })
  617. </script>
  618. <style lang="less" scoped>
  619. .button-common-style {
  620. font-family: KaiTi, KaiTi;
  621. font-weight: 400;
  622. font-size: calc(16px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  623. writing-mode: vertical-lr;
  624. letter-spacing: 0.2em;
  625. white-space: pre;
  626. color: #B8AE7A;
  627. }
  628. .group-title-common-style {
  629. font-family: KingHwa_OldSong, KingHwa_OldSong;
  630. font-weight: 400;
  631. font-size: calc(48px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  632. color: #474747;
  633. writing-mode: vertical-lr;
  634. letter-spacing: 0.2em;
  635. white-space: pre;
  636. }
  637. .more-content {
  638. position: absolute;
  639. left: 0;
  640. top: 0;
  641. width: 100%;
  642. height: 100%;
  643. user-select: none;
  644. >.scroll-target {
  645. height: 100%;
  646. width: 100%;
  647. display: flex;
  648. gap: 100px;
  649. overflow: hidden;
  650. >img.bg {
  651. position: absolute;
  652. height: 100%;
  653. }
  654. >.layer-4 {
  655. position: absolute;
  656. height: 100%;
  657. >.bamboo-4_01 {
  658. position: absolute;
  659. left: calc(0 * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  660. bottom: 0;
  661. height: calc(300px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  662. }
  663. >.bamboo-4_02 {
  664. position: absolute;
  665. bottom: 0;
  666. left: calc(120px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  667. height: calc(380px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  668. }
  669. >.bamboo-4_03 {
  670. position: absolute;
  671. bottom: 0;
  672. left: calc(880px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  673. height: calc(518px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  674. }
  675. >.bamboo-4_04 {
  676. position: absolute;
  677. bottom: 0;
  678. left: calc(870px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  679. height: 100%;
  680. }
  681. >.bamboo-4_05 {
  682. position: absolute;
  683. bottom: 0;
  684. left: calc(450px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  685. height: 100%;
  686. }
  687. >.bamboo-4_06 {
  688. position: absolute;
  689. bottom: 0;
  690. left: calc(520px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  691. height: 100%;
  692. }
  693. >.bamboo-4_07 {
  694. position: absolute;
  695. bottom: 0;
  696. left: calc(1000px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  697. height: 100%;
  698. }
  699. >.bamboo-4_08 {
  700. position: absolute;
  701. bottom: 0;
  702. height: calc(380px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  703. left: calc(1553px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  704. }
  705. >.bamboo-4_09 {
  706. position: absolute;
  707. bottom: 0;
  708. left: calc(1345px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  709. height: 100%;
  710. }
  711. >.bamboo-4_10 {
  712. position: absolute;
  713. bottom: 0;
  714. left: calc(1403px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  715. height: 100%;
  716. }
  717. >.bamboo-4_11 {
  718. position: absolute;
  719. bottom: 0;
  720. left: calc(1403px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  721. height: 100%;
  722. }
  723. >.bamboo-4_12 {
  724. position: absolute;
  725. bottom: 0;
  726. left: calc(1403px * v-bind('layer4SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  727. height: 100%;
  728. }
  729. }
  730. >.layer-3 {
  731. position: absolute;
  732. height: 100%;
  733. >.bamboo-3_01 {
  734. position: absolute;
  735. top: 0;
  736. height: 100%;
  737. left: calc(393px * v-bind('layer3SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  738. }
  739. >.bamboo-3_02 {
  740. position: absolute;
  741. top: 0;
  742. height: 100%;
  743. left: calc(880px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  744. }
  745. >.bamboo-3_03 {
  746. position: absolute;
  747. top: 0;
  748. height: 100%;
  749. left: calc(1290px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  750. }
  751. >.bamboo-3_04 {
  752. position: absolute;
  753. top: 0;
  754. height: 100%;
  755. left: calc(867px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  756. }
  757. }
  758. >.layer-2 {
  759. position: absolute;
  760. height: 100%;
  761. >.bamboo-2_01 {
  762. position: absolute;
  763. top: 0;
  764. height: 100%;
  765. left: calc(0px * v-bind('layer2SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  766. }
  767. >.bamboo-2_03 {
  768. position: absolute;
  769. top: 0;
  770. height: 100%;
  771. left: calc(420px * v-bind('layer2SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  772. }
  773. >.bamboo-2_02 {
  774. position: absolute;
  775. top: 0;
  776. height: 100%;
  777. left: calc(920px * v-bind('layer2SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  778. }
  779. // >.bamboo-2_03{
  780. // position: absolute;
  781. // top: 0;
  782. // height: 100%;
  783. // left: calc(920px * v-bind('layer2SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  784. // }
  785. >.bamboo-2_04 {
  786. position: absolute;
  787. top: 0;
  788. height: 100%;
  789. left: calc(1281px * v-bind('layer2SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  790. }
  791. >.bamboo-2_04-1 {
  792. position: absolute;
  793. top: 0;
  794. height: 100%;
  795. left: calc(1863px * v-bind('layer2SpeedFactor') * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  796. }
  797. >.bamboo-2_05 {
  798. position: absolute;
  799. top: 0;
  800. height: 100%;
  801. left: calc(997px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  802. }
  803. }
  804. >.layer-1 {
  805. position: absolute;
  806. height: 100%;
  807. >.bamboo-1_01 {
  808. position: absolute;
  809. top: 0;
  810. height: 100%;
  811. left: 0;
  812. }
  813. >.hotspot {
  814. position: absolute;
  815. top: calc(385px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  816. left: calc(71px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  817. }
  818. >.shuang-gou-she-se-group {
  819. position: absolute;
  820. top: calc(245px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  821. left: calc(216px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  822. >button.watch-detail {
  823. position: absolute;
  824. top: calc(182px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  825. left: 0;
  826. background-image: url(@/assets/images/fade-chapter-btn-bg-big.png);
  827. background-size: contain;
  828. background-repeat: no-repeat;
  829. background-position: center center;
  830. padding-top: calc(3px / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  831. .button-common-style();
  832. }
  833. >div.group-title {
  834. position: absolute;
  835. top: 0;
  836. left: calc(41px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  837. ;
  838. .group-title-common-style();
  839. >img.deco {
  840. position: absolute;
  841. bottom: 0.9em;
  842. right: -0.05em;
  843. width: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  844. height: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  845. }
  846. }
  847. }
  848. >.bamboo-1_02 {
  849. position: absolute;
  850. top: 0;
  851. height: 100%;
  852. left: calc(352px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  853. }
  854. >.mo-zhu-group {
  855. position: absolute;
  856. top: calc(245px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  857. left: calc(936px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  858. >.button-group {
  859. position: absolute;
  860. top: calc(75px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  861. left: 0;
  862. display: flex;
  863. flex-direction: column;
  864. gap: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  865. >button {
  866. .button-common-style();
  867. background-image: url(@/assets/images/fade-chapter-btn-bg-small.png);
  868. background-size: contain;
  869. background-repeat: no-repeat;
  870. background-position: center center;
  871. padding-top: calc(3px / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  872. }
  873. }
  874. >div.group-title {
  875. position: absolute;
  876. top: 0;
  877. left: calc(41px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  878. ;
  879. .group-title-common-style();
  880. >img.deco {
  881. position: absolute;
  882. bottom: 0.9em;
  883. right: 0.1em;
  884. width: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  885. height: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  886. }
  887. }
  888. }
  889. >.wei-ye-group {
  890. position: absolute;
  891. top: calc(170px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  892. left: calc(1776px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  893. font-family: 'KingHwa_OldSong';
  894. color: white;
  895. z-index: 2;
  896. width: calc(200 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  897. // background: green;
  898. >.game-box {
  899. width: calc(200 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  900. background: url(@/assets/images/game-bg.png);
  901. background-size: 100% 100%;
  902. padding: calc(70 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  903. white-space: nowrap;
  904. display: flex;
  905. justify-content: center;
  906. align-items: center;
  907. margin-top: calc(-10 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  908. margin-left: calc(-60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  909. font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  910. }
  911. >.online-box {
  912. width: calc(200 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  913. background: url(@/assets/images/online-scene-bg.png);
  914. background-size: 100% 100%;
  915. padding: calc(70 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  916. white-space: nowrap;
  917. display: flex;
  918. justify-content: center;
  919. align-items: center;
  920. margin-top: calc(-10 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  921. margin-left: calc(40 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  922. font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  923. }
  924. }
  925. >.bamboo-1_03 {
  926. position: absolute;
  927. top: 0;
  928. height: 100%;
  929. left: calc(960px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  930. }
  931. >.bamboo-1_04 {
  932. position: absolute;
  933. top: 0;
  934. height: 100%;
  935. left: calc(1336px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  936. }
  937. >.bamboo-1_05 {
  938. position: absolute;
  939. top: 0;
  940. height: 100%;
  941. left: calc(1891px * v-bind('windowHeight') / v-bind('windowHeightDesign'));
  942. }
  943. }
  944. }
  945. >.pagination {
  946. position: absolute;
  947. left: 50%;
  948. transform: translateX(-50%);
  949. bottom: calc(22 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  950. }
  951. >.operation-tip {
  952. position: absolute;
  953. right: calc(44 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  954. bottom: calc(74 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  955. }
  956. >.fade-to-other-page {
  957. position: absolute;
  958. left: 0;
  959. top: 0;
  960. width: 100%;
  961. height: 100%;
  962. object-fit: cover;
  963. object-position: top;
  964. }
  965. >.game-box {
  966. width: 100%;
  967. height: 100%;
  968. position: fixed;
  969. top: 0;
  970. left: 0;
  971. z-index: 100;
  972. >iframe {
  973. width: 100%;
  974. height: 100%;
  975. position: absolute;
  976. top: 0;
  977. left: 0;
  978. }
  979. .edit-box {
  980. width: 125%;
  981. height: 35vh;
  982. display: flex;
  983. flex-direction: column;
  984. justify-content: center;
  985. align-items: center;
  986. background: url(@/assets/images/game-tip.png);
  987. background-size: 100% 100%;
  988. position: absolute;
  989. top: 50%;
  990. left: 50%;
  991. transform: translate(-50%, -50%);
  992. z-index: 2;
  993. font-family: 'KaiTi';
  994. >.input-box {
  995. width: 50%;
  996. display: flex;
  997. flex-direction: column;
  998. margin-bottom: 10%;
  999. margin-right: 5%;
  1000. >input {
  1001. width: 100%;
  1002. height: 45px;
  1003. background: none;
  1004. border: none;
  1005. font-size: 20px;
  1006. white-space: pre-wrap;
  1007. color: white;
  1008. border-bottom: 1px solid rgba(255, 255, 255, 0.548);
  1009. font-family: 'KaiTi';
  1010. letter-spacing: 2px;
  1011. }
  1012. .tips {
  1013. font-family: 'KaiTi';
  1014. font-size: 14px;
  1015. margin-top: calc(5 /v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1016. color: rgba(255, 255, 255, 0.418);
  1017. }
  1018. }
  1019. >textarea {
  1020. width: 34%;
  1021. height: 40%;
  1022. background: none;
  1023. border: none;
  1024. font-size: 20px;
  1025. white-space: pre-wrap;
  1026. }
  1027. >.cencel-btn {
  1028. // width: calc(70 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1029. // height: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1030. background: url(@/assets/images/game-tip-cancel.png);
  1031. background-size: 100% 100%;
  1032. display: flex;
  1033. justify-content: center;
  1034. align-items: center;
  1035. color: #FFFFFF;
  1036. position: absolute;
  1037. left: 30%;
  1038. bottom: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1039. padding: 5px 10px;
  1040. font-family: 'KaiTi';
  1041. }
  1042. >.yes-btn {
  1043. // width: calc(70 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1044. // height: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1045. background: url(@/assets/images/game-tip-yes.png);
  1046. background-size: 100% 100%;
  1047. display: flex;
  1048. justify-content: center;
  1049. align-items: center;
  1050. color: #F4E09D;
  1051. position: absolute;
  1052. right: 38%;
  1053. bottom: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  1054. padding: 5px 10px;
  1055. font-family: 'KaiTi';
  1056. }
  1057. }
  1058. }
  1059. >.scene-box {
  1060. width: 100%;
  1061. height: 100%;
  1062. position: fixed;
  1063. position: fixed;
  1064. top: 0;
  1065. left: 0;
  1066. z-index: 100;
  1067. >.scene-back {
  1068. position: absolute;
  1069. left: 20px;
  1070. top: 25px;
  1071. transform: scale(1.2);
  1072. z-index: 2;
  1073. }
  1074. >iframe {
  1075. width: 100%;
  1076. height: 100%;
  1077. position: absolute;
  1078. top: 0;
  1079. left: 0;
  1080. }
  1081. }
  1082. }
  1083. </style>