zhaomengfu.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952
  1. <template>
  2. <view class="container">
  3. <view class="loading" v-if="loadingState" :class="[loadingOutAnime?'loadingOut':'']">
  4. <view class="loadingBox" v-if="loadPointState">
  5. <span class="span1"></span>
  6. <span class="span2"></span>
  7. <span class="span3"></span>
  8. <span class="span4"></span>
  9. <span class="span5"></span>
  10. <span class="span6"></span>
  11. </view>
  12. <image class="loadingText" @load="loadImgEnd" :src="loadingText" mode="aspectFit"></image>
  13. </view>
  14. <view class="yunBg" :class="[yunBgState?'yunBgOut':'']" v-if="yunShowState">
  15. <video id="videoYunDom" :src="yunVideoPath" :loop="false" :controls="false" :muted="true" objectFit='cover'
  16. :show-progress='false' :custom-cache="false" :enable-progress-gesture='false' :show-play-btn='false'
  17. :show-fullscreen-btn='false' @loadedmetadata="videoYunLoadingEnd"></video>
  18. </view>
  19. <view class="containerBg" @touchmove="touchStart">
  20. <video id="videoBgDom" :src="bgVideoPath" :loop="true" :controls="false" :muted="true" objectFit='cover'
  21. :show-progress='false' :custom-cache="false" :enable-progress-gesture='false' :show-play-btn='false'
  22. :show-fullscreen-btn='false' @loadedmetadata="videoBgLoadingEnd"></video>
  23. <view class="point" v-if="pointShow" v-for="(item,index) in pointList" :key="item.title"
  24. :style="{width:item.width,height:item.height,left:item.left,top:item.top}"
  25. @click="pointClick(item,index)">
  26. <image v-show="!item.showState" class="pointImg" :src="item.img" mode="aspectFill"></image>
  27. <image v-show="item.showState" class="pointImgA" :src="item.imgA" mode="aspectFill"></image>
  28. </view>
  29. <view class="openBook" @click="clickOpenBook">
  30. <image :src="bookUrl" mode="aspectFit"></image>
  31. </view>
  32. <view class="bookPlane" v-show="bookOpenState">
  33. <view class="bookClose" @click="clickCloseBook">
  34. <image :src="bookCloseUrl" mode="aspectFit"></image>
  35. </view>
  36. <!-- 书页 -->
  37. <view class="swiperContent">
  38. <view class="uni-margin-wrap">
  39. <swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay"
  40. :interval="interval" :duration="duration">
  41. <swiper-item>
  42. <view class="swiper-itemA uni-bg-red">
  43. <image :src="'https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/pic'+0+'.png'"
  44. mode="aspectFill"></image>
  45. </view>
  46. </swiper-item>
  47. <swiper-item v-for="(item,index) in swiperList" :key="item">
  48. <view class="swiper-item uni-bg-red">
  49. <image :src="'https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/pic'+(item+1)+'.png'"
  50. mode="aspectFill"></image>
  51. </view>
  52. </swiper-item>
  53. </swiper>
  54. </view>
  55. </view>
  56. </view>
  57. <view class="animeBox" :style="{left:animeLine[animeIndex].x,top:animeLine[animeIndex].y}">
  58. <image :src="shipImg" alt=""></image>
  59. </view>
  60. </view>
  61. <view class="changeAudio" :class="[audioState?'changeAudioPlay':'']" @click="changeAudio">
  62. <image :src="audioImgA" v-show="audioState" mode="aspectFit"></image>
  63. <image :src="audioImgB" v-show="!audioState" mode="aspectFit"></image>
  64. </view>
  65. <view class="content" v-show="contentOpenState">
  66. <view class="videoLayer" v-if="openType=='video'">
  67. <view class="videoCloseTips">
  68. <image :src="videoCloseTips" mode="aspectFit"></image>
  69. </view>
  70. </view>
  71. <view class="videoBox" :class="[openType=='video'?'videoShow':'videoNone']">
  72. <view class="closeVideoLayer" @click="closeContent"></view>
  73. <view class="videoBorder">
  74. <view class="videoTitle">
  75. <image :src="videoTitle" mode="aspectFit"></image>
  76. </view>
  77. <video id="videoDom" :src="videoPath" :controls="true" :play-strategy="0" :autoplay="false"
  78. :custom-cache="false" objectFit="fill" :show-progress='true' enable-progress-gesture='false'
  79. :direction="90" :show-fullscreen-btn="true" :show-loading="true" :show-play-btn='false'
  80. @play="videoPlay" @error="videoPlayErr"></video>
  81. </view>
  82. </view>
  83. <view class="imageBox" v-if="openType=='image'">
  84. <view class="textBox">
  85. <view class="closeImgContent" @click="closeImgContentFn"></view>
  86. <image :src="textImg" mode="aspectFit"></image>
  87. </view>
  88. </view>
  89. </view>
  90. </view>
  91. </template>
  92. <script>
  93. import request from "@/utils/request.js"
  94. export default {
  95. data() {
  96. return {
  97. loadPointState: false,
  98. loadingState: true,
  99. loadingOutAnime: false, //加载退场动画
  100. loadingCount: 0,
  101. bookOpenState: false,
  102. bookUrl: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/book.png",
  103. bookCloseUrl: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/bookClose.png",
  104. loadingText: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/loading2.jpg",
  105. baseUrl: "",
  106. bgVideoPath: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/zmfbg.mp4",
  107. videoTitle: "",
  108. textImg: "",
  109. yunBgState: false,
  110. yunShowState: true,
  111. yunVideoPath: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/zmfyun.mp4",
  112. audioImgA: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/audioOn.png",
  113. audioImgB: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/audioOff.png",
  114. currentIndex: 0, //当前被点击的动画索引
  115. animeIndex: 0, //当前动画播放的位置
  116. audioState: true,
  117. clickState: true, //控制动画结束才能在点击
  118. videoContext: "", //视频组件
  119. videoPath: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/11.mp4",
  120. videoYunDomCtx: "",
  121. videoBgCtx: "",
  122. pointShow: false,
  123. contentOpenState: false, //内容打开状态
  124. openType: "video", //打开的类型
  125. btnClickIndex: 0, //被点击按钮的下标
  126. shipImg: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/ship.png",
  127. videoCloseTips: "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/videoCloseTips.png",
  128. pointList: [{
  129. "title": "1",
  130. "width": "234rpx",
  131. "height": "190rpx",
  132. "showState": false,
  133. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/01C.png",
  134. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/01D.png",
  135. "left": "90rpx",
  136. "top": "268rpx",
  137. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/01.mp4",
  138. "type": "video",
  139. "index": 600
  140. },
  141. {
  142. "title": "2",
  143. "width": "119rpx",
  144. "height": "140rpx",
  145. "showState": false,
  146. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/02C.png",
  147. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/02D.png",
  148. "left": "72rpx",
  149. "top": "536rpx",
  150. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/02.mp4",
  151. "type": "video",
  152. "index": 440
  153. },
  154. {
  155. "title": "3",
  156. "width": "34rpx",
  157. "height": "90rpx",
  158. "showState": false,
  159. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/03C.png",
  160. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/03D.png",
  161. "left": "269rpx",
  162. "top": "590rpx",
  163. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/text03.png",
  164. "type": "image",
  165. "index": 420
  166. },
  167. {
  168. "title": "4",
  169. "width": "110rpx",
  170. "height": "124rpx",
  171. "showState": false,
  172. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/04C.png",
  173. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/04D.png",
  174. "left": "139rpx",
  175. "top": "719rpx",
  176. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/04.mp4",
  177. "type": "video",
  178. "index": 360
  179. },
  180. {
  181. "title": "5",
  182. "width": "113rpx",
  183. "height": "94rpx",
  184. "showState": false,
  185. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/05C.png",
  186. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/05D.png",
  187. "left": "200rpx",
  188. "top": "837rpx",
  189. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/text05.png",
  190. "type": "image",
  191. "index": 295
  192. },
  193. {
  194. "title": "6",
  195. "width": "114rpx",
  196. "height": "105rpx",
  197. "showState": false,
  198. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/06C.png",
  199. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/06D.png",
  200. "left": "379rpx",
  201. "top": "791rpx",
  202. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/text06.png",
  203. "type": "image",
  204. "index": 295
  205. },
  206. {
  207. "title": "7",
  208. "width": "131rpx",
  209. "height": "109rpx",
  210. "showState": false,
  211. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/07C.png",
  212. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/07D.png",
  213. "left": "531rpx",
  214. "top": "955rpx",
  215. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/text07.png",
  216. "type": "image",
  217. "index": 130
  218. },
  219. {
  220. "title": "8",
  221. "width": "105rpx",
  222. "height": "90rpx",
  223. "showState": false,
  224. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/08C.png",
  225. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/08D.png",
  226. "left": "399rpx",
  227. "top": "1048rpx",
  228. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/08.mp4",
  229. "type": "video",
  230. "index": 100
  231. },
  232. {
  233. "title": "9",
  234. "width": "125rpx",
  235. "height": "99rpx",
  236. "showState": false,
  237. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/09C.png",
  238. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/09D.png",
  239. "left": "292rpx",
  240. "top": "930rpx",
  241. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/text09.png",
  242. "type": "image",
  243. "index": 200
  244. },
  245. {
  246. "title": "10",
  247. "width": "115rpx",
  248. "height": "133rpx",
  249. "showState": false,
  250. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/10C.png",
  251. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/10D.png",
  252. "left": "602rpx",
  253. "top": "1068rpx",
  254. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/10.mp4",
  255. "type": "video",
  256. "index": 40
  257. },
  258. {
  259. "title": "11",
  260. "width": "147rpx",
  261. "height": "139rpx",
  262. "showState": false,
  263. "img": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/11C.png",
  264. "imgA": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/11D.png",
  265. "left": "498rpx",
  266. "top": "1285rpx",
  267. "data": "https://dadu.oss-cn-hangzhou.aliyuncs.com/static/zhaomengfu/11.mp4",
  268. "type": "video",
  269. "index": 0
  270. }
  271. ],
  272. animeLine: [],
  273. T: "", //当前定时器
  274. aI: 0, //动画帧索引
  275. animeState: false, //是否进行动画
  276. animeStart: 0, //当前动画开始的数组下标
  277. animeEnd: 0, //当前动画结束的数组下标
  278. animeDirection: 1,
  279. saveAnime: [],
  280. indicatorDots: true,
  281. autoplay: true,
  282. interval: 2000,
  283. duration: 500,
  284. swiperList: 9,
  285. }
  286. },
  287. methods: {
  288. async initData() {
  289. this.baseUrl = this.$g.baseUrl
  290. this.audioImg = `${this.$g.baseUrl}/static/zhaomengfu/audio.png`
  291. this.videoContext = uni.createVideoContext('videoDom', this)
  292. this.videoYunDomCtx = uni.createVideoContext('videoYunDom', this)
  293. this.videoBgCtx = uni.createVideoContext('videoBgDom', this)
  294. let res = await request({
  295. url: "/api/getAnimeLine",
  296. method: "GET",
  297. data: {
  298. code: "getAnime"
  299. },
  300. })
  301. this.animeLine = res.data.data
  302. },
  303. loadImgEnd(e) {
  304. this.loadPointState = true
  305. },
  306. clickOpenBook() {
  307. this.bookOpenState = true
  308. },
  309. clickCloseBook() {
  310. this.bookOpenState = false
  311. },
  312. closeContent() {
  313. this.audioState = true
  314. this.innerAudioContext.play()
  315. this.videoContext.stop()
  316. this.videoPath = ""
  317. this.contentOpenState = false
  318. },
  319. closeImgContentFn() {
  320. this.contentOpenState = false
  321. },
  322. createAudio() {
  323. this.innerAudioContext = uni.createInnerAudioContext()
  324. this.innerAudioContext.loop = true
  325. this.innerAudioContext.src = `${this.$g.baseUrl}/static/zhaomengfu/audio.mp3`
  326. },
  327. changeAudio() {
  328. if (this.audioState) {
  329. this.innerAudioContext.pause()
  330. // console.log(JSON.stringify(this.saveAnime))
  331. } else {
  332. this.innerAudioContext.play()
  333. }
  334. this.audioState = !this.audioState
  335. },
  336. videoYunLoadingEnd() {
  337. this.loadingCount++
  338. if (this.loadingCount == 2) {
  339. this.yunAnimeStart()
  340. }
  341. },
  342. yunAnimeStart() {
  343. this.loadingOutAnime = true
  344. let tX = setTimeout(() => {
  345. this.loadingState = false
  346. this.videoYunDomCtx.play()
  347. this.yunBgState = true
  348. clearTimeout(tX)
  349. }, 1000)
  350. let yunT = setTimeout(() => {
  351. this.yunShowState = false
  352. this.pointShow = true
  353. clearTimeout(yunT)
  354. }, 4000)
  355. },
  356. videoBgLoadingEnd() {
  357. this.loadingCount++
  358. this.videoBgCtx.play()
  359. if (this.loadingCount == 2) {
  360. this.yunAnimeStart()
  361. }
  362. },
  363. videoPlay() {
  364. if (this.innerAudioContext) {
  365. this.innerAudioContext.pause()
  366. this.audioState = false
  367. }
  368. },
  369. videoPlayErr(){
  370. this.videoBgCtx.play()
  371. },
  372. pointClick(data, index) {
  373. if (this.clickState) {
  374. this.pointList[this.btnClickIndex].showState = false
  375. data.showState = true
  376. this.btnClickIndex = index
  377. this.animeStart = this.currentIndex
  378. this.animeEnd = data.index
  379. this.openType = data.type
  380. if (this.currentIndex - data.index == 0) {
  381. this.contentOpenState = true
  382. this.openType = data.type
  383. if (this.openType == 'video') {
  384. this.videoTitle = `${this.$g.baseUrl}/static/zhaomengfu/titlev${data.title}.png`
  385. this.videoPath = data.data
  386. let t = setTimeout(() => {
  387. // this.videoContext.pause()
  388. this.videoContext.play();
  389. clearTimeout(t)
  390. }, 1000)
  391. }
  392. if (this.openType == 'image') {
  393. this.textImg = `${this.$g.baseUrl}/static/zhaomengfu/text${data.title}.png`
  394. }
  395. return
  396. }
  397. if (this.openType == 'video') {
  398. this.videoTitle = `${this.$g.baseUrl}/static/zhaomengfu/titlev${data.title}.png`
  399. this.videoPath = data.data
  400. }
  401. if (this.openType == 'image') {
  402. this.textImg = `${this.$g.baseUrl}/static/zhaomengfu/text${data.title}.png`
  403. }
  404. if (this.currentIndex - data.index > 0) {
  405. this.animeDirection = -1
  406. }
  407. if (this.currentIndex - data.index < 0) {
  408. this.animeDirection = 1
  409. }
  410. this.clickState = false
  411. this.animeState = true
  412. }
  413. // console.log(data)
  414. },
  415. animeRender() {
  416. setInterval(() => {
  417. if (this.animeState) {
  418. this.animeStart += this.animeDirection
  419. // console.log(this.animeIndex)
  420. this.animeIndex = this.animeStart
  421. if (this.animeStart == this.animeEnd) {
  422. this.currentIndex = this.animeEnd
  423. this.animeState = false
  424. this.clickState = true
  425. this.contentOpenState = true
  426. if (this.openType == 'video') {
  427. // this.videoContext.pause()
  428. this.videoContext.play();
  429. }
  430. }
  431. }
  432. }, 10)
  433. },
  434. touchStart(e) {
  435. // this.animeLine = []
  436. // let x = this.rpxTopx(e.touches[0].pageX)
  437. // let y = this.rpxTopx(e.touches[0].pageY)
  438. // let json1 = {
  439. // "x": `${e.touches[0].pageX-40.5}rpx`,
  440. // "y": `${e.touches[0].pageY-42.5}rpx`
  441. // }
  442. // this.saveAnime.push(json1)
  443. // this.animeLine.push(json1)
  444. // this.aI++
  445. // console.log(this.aI)
  446. },
  447. touchCilick() {
  448. // console.log(this.aI)
  449. },
  450. rpxTopx(px) {
  451. let deviceWidth = wx.getSystemInfoSync().windowWidth; //获取设备屏幕宽度
  452. let rpx = (750 / deviceWidth) * Number(px)
  453. return Math.floor(rpx);
  454. }
  455. },
  456. onLoad() {
  457. uni.hideHomeButton()
  458. this.initData()
  459. this.createAudio()
  460. this.animeRender()
  461. },
  462. onHide() {
  463. this.audioState = false
  464. this.innerAudioContext.pause()
  465. clearInterval(this.T)
  466. },
  467. onShow() {
  468. if (this.innerAudioContext) {
  469. this.audioState = true
  470. this.innerAudioContext.play()
  471. }
  472. },
  473. onUnload() {
  474. this.innerAudioContext.stop()
  475. this.innerAudioContext.destroy()
  476. }
  477. }
  478. </script>
  479. <style scoped>
  480. .container {
  481. width: 100vw;
  482. height: 100vh;
  483. overflow: hidden;
  484. }
  485. .container .loading {
  486. position: absolute;
  487. top: 0;
  488. left: 0;
  489. width: 100vw;
  490. height: 100vh;
  491. z-index: 9999999;
  492. background: #4c4c4c;
  493. display: flex;
  494. justify-content: center;
  495. align-items: center;
  496. }
  497. .videoShow{
  498. display: flex !important;
  499. }
  500. .videoNone{
  501. display: none !important;
  502. }
  503. .container .loading .loadingBox {
  504. position: absolute;
  505. width: 105rpx;
  506. height: 41rpx;
  507. display: flex;
  508. top: 345rpx;
  509. left: 459rpx;
  510. z-index: 1;
  511. opacity: 0;
  512. justify-content: space-around;
  513. align-items: center;
  514. animation: 0.8s loadingBoxAnime 0.5s linear forwards;
  515. }
  516. @keyframes loadingBoxAnime {
  517. from {
  518. opacity: 0;
  519. }
  520. to {
  521. opacity: 1;
  522. }
  523. }
  524. .container .loading .loadingBox span {
  525. width: 8rpx;
  526. height: 8rpx;
  527. background: #c8841a;
  528. border-radius: 50%;
  529. }
  530. .container .loading .loadingBox .span1 {
  531. animation: 0.8s spanAnime 0.2s alternate infinite;
  532. }
  533. .container .loading .loadingBox .span2 {
  534. animation: 0.8s spanAnime 0.4s alternate infinite;
  535. }
  536. .container .loading .loadingBox .span3 {
  537. animation: 0.8s spanAnime 0.6s alternate infinite;
  538. }
  539. .container .loading .loadingBox .span4 {
  540. animation: 0.8s spanAnime 0.8s alternate infinite;
  541. }
  542. .container .loading .loadingBox .span5 {
  543. animation: 0.8s spanAnime 1s alternate infinite;
  544. }
  545. .container .loading .loadingBox .span6 {
  546. animation: 0.8s spanAnime 1.2s alternate infinite;
  547. }
  548. @keyframes spanAnime {
  549. from {
  550. transform: scale(1.5);
  551. }
  552. to {
  553. transform: scale(0.7);
  554. }
  555. }
  556. .container .loading .loadingText {
  557. position: absolute;
  558. top: 0%;
  559. left: 0%;
  560. width: 750rpx;
  561. height: 1624rpx;
  562. will-change: transform;
  563. }
  564. .container .yunBg {
  565. position: absolute;
  566. left: 0;
  567. top: 0;
  568. width: 750rpx;
  569. height: 1624rpx;
  570. z-index: 99999;
  571. }
  572. .container .yunBg video {
  573. width: 100%;
  574. height: 100%;
  575. }
  576. .container .yunBgOut {
  577. will-change: opacity;
  578. animation: 1s yunBgOutAnime 2s linear forwards;
  579. }
  580. @keyframes yunBgOutAnime {
  581. from {
  582. opacity: 1;
  583. }
  584. to {
  585. opacity: 0;
  586. }
  587. }
  588. .container .containerBg {
  589. width: 750rpx;
  590. height: 1624rpx;
  591. position: absolute;
  592. left: 0;
  593. top: 0;
  594. overflow: hidden;
  595. opacity: 0;
  596. animation: 1s containerBgAnime linear 1s forwards;
  597. }
  598. @keyframes containerBgAnime {
  599. from {
  600. opacity: 0;
  601. }
  602. to {
  603. opacity: 1;
  604. }
  605. }
  606. .container .containerBg #videoBgDom {
  607. width: 100%;
  608. height: 100%;
  609. }
  610. .container .containerBg .point {
  611. position: absolute;
  612. width: 5vw;
  613. height: 5vw;
  614. z-index: 9999;
  615. opacity: 0;
  616. animation: 0.5s pointAnime linear forwards;
  617. }
  618. @keyframes pointAnime {
  619. from {
  620. opacity: 0;
  621. }
  622. to {
  623. opacity: 1;
  624. }
  625. }
  626. .container .containerBg .point .pointImg {
  627. animation: 1s pointImgAnime linear forwards;
  628. }
  629. .container .containerBg .point .pointImgA {
  630. animation: 1s pointImgAnimeA linear forwards;
  631. }
  632. @keyframes pointImgAnime {
  633. from {
  634. opacity: 0.8;
  635. transform: scale(1.1);
  636. }
  637. to {
  638. opacity: 1;
  639. transform: scale(1);
  640. }
  641. }
  642. @keyframes pointImgAnimeA {
  643. from {
  644. opacity: 0.8;
  645. transform: scale(0.9);
  646. }
  647. to {
  648. opacity: 1;
  649. transform: scale(1);
  650. }
  651. }
  652. .container .containerBg .openBook {
  653. position: absolute;
  654. width: 55rpx;
  655. height: 220rpx;
  656. right: 0;
  657. top: 555rpx;
  658. z-index: 9999;
  659. }
  660. .container .containerBg .openBook image {
  661. width: 100%;
  662. height: 100%;
  663. }
  664. .container .containerBg .bookPlane {
  665. position: absolute;
  666. width: 100vw;
  667. height: 100vh;
  668. left: 0;
  669. top: 0;
  670. z-index: 9999;
  671. background: rgba(70, 72, 71, 0.63)
  672. }
  673. .container .containerBg .bookPlane .bookClose {
  674. position: absolute;
  675. right: 90rpx;
  676. top: 440rpx;
  677. width: 41rpx;
  678. height: 41rpx;
  679. }
  680. .container .containerBg .bookPlane .bookClose image {
  681. width: 100%;
  682. height: 100%;
  683. }
  684. .uni-margin-wrap {
  685. width: 690rpx;
  686. width: 100%;
  687. }
  688. .swiperContent {
  689. width: 100vw;
  690. height: 560rpx;
  691. position: absolute;
  692. top: 500rpx;
  693. left: 0;
  694. }
  695. .swiper {
  696. height: 600rpx;
  697. }
  698. .swiper-itemA {
  699. display: flex;
  700. justify-content: center;
  701. align-items: center;
  702. width: 287rpx;
  703. height: 558rpx;
  704. margin: 0 auto;
  705. }
  706. .swiper-itemA image {
  707. width: 100%;
  708. height: 100%;
  709. }
  710. .swiper-item {
  711. display: flex;
  712. justify-content: center;
  713. align-items: center;
  714. width: 507rpx;
  715. height: 558rpx;
  716. line-height: 300rpx;
  717. text-align: center;
  718. margin: 0 auto;
  719. }
  720. .swiper-item image {
  721. width: 100%;
  722. height: 100%;
  723. }
  724. .container .containerBg .animeBox {
  725. width: 81rpx;
  726. height: 84rpx;
  727. position: absolute;
  728. will-change: left, top;
  729. }
  730. .container .containerBg .animeBox image {
  731. width: 100%;
  732. height: 100%;
  733. }
  734. .container .changeAudio {
  735. position: absolute;
  736. right: 45rpx;
  737. top: 105rpx;
  738. width: 47rpx;
  739. height: 47rpx;
  740. z-index: 99999;
  741. }
  742. .container .changeAudio image {
  743. width: 100%;
  744. height: 100%;
  745. }
  746. .container .changeAudioPlay {
  747. animation: 1s changeAudioAnime linear infinite;
  748. }
  749. @keyframes changeAudioAnime {
  750. from {
  751. transform: rotate(0deg);
  752. }
  753. to {
  754. transform: rotate(360deg);
  755. }
  756. }
  757. .container .content {
  758. position: absolute;
  759. z-index: 99;
  760. width: 750rpx;
  761. height: 1624rpx;
  762. background: #0000008a;
  763. animation: 1s contentAnime linear forwards;
  764. }
  765. @keyframes contentAnime {
  766. from {
  767. opacity: 0;
  768. }
  769. to {
  770. opacity: 1;
  771. }
  772. }
  773. .container .content .videoLayer {
  774. width: 100vw;
  775. height: 100vh;
  776. position: absolute;
  777. top: 0;
  778. left: 0;
  779. display: flex;
  780. justify-content: center;
  781. align-items: center;
  782. }
  783. .container .content .videoLayer .videoCloseTips {
  784. position: absolute;
  785. top: 990rpx;
  786. left: 50%;
  787. transform: translateX(-50%);
  788. width: 199rpx;
  789. height: 26rpx;
  790. animation: 1s videoCloseTipsAnime linear 2s alternate infinite;
  791. }
  792. @keyframes videoCloseTipsAnime {
  793. from {
  794. opacity: 0.5;
  795. }
  796. to {
  797. opacity: 1;
  798. }
  799. }
  800. .container .content .videoLayer .videoCloseTips image {
  801. width: 100%;
  802. height: 100%;
  803. }
  804. .container .content .videoBox {
  805. position: absolute;
  806. top: 0;
  807. left: 0;
  808. width: 100vw;
  809. height: 100vh;
  810. display: flex;
  811. justify-content: center;
  812. align-items: center;
  813. }
  814. .container .content .videoBox .closeVideoLayer {
  815. position: absolute;
  816. top: 0;
  817. left: 0;
  818. width: 100vw;
  819. height: 100vh;
  820. }
  821. .container .content .videoBox .videoBorder {
  822. position: relative;
  823. width: 100vw;
  824. }
  825. .container .content .videoBox .videoBorder .videoTitle {
  826. position: absolute;
  827. top: -50rpx;
  828. left: 50%;
  829. transform: translateX(-50%);
  830. max-width: 740rpx;
  831. min-width: 644rpx;
  832. height: 37rpx;
  833. }
  834. .container .content .videoBox .videoBorder .videoTitle image {
  835. width: 100%;
  836. height: 100%;
  837. }
  838. .container .content .videoBox .videoBorder video {
  839. width: 100vw;
  840. border-top: 2px solid #a9f9e5;
  841. border-bottom: 2px solid #a9f9e5;
  842. }
  843. .container .containerBg .point image {
  844. width: 100%;
  845. height: 100%;
  846. will-change: transform;
  847. }
  848. .container .content .imageBox {
  849. position: absolute;
  850. z-index: 99;
  851. width: 100vw;
  852. height: 100vh;
  853. }
  854. .container .content .imageBox .textBox {
  855. position: absolute;
  856. right: 135rpx;
  857. top: 430rpx;
  858. width: 537rpx;
  859. height: 646rpx;
  860. }
  861. .container .content .imageBox .textBox image {
  862. width: 100%;
  863. height: 100%;
  864. }
  865. .container .content .imageBox .textBox .closeImgContent {
  866. position: absolute;
  867. right: 14rpx;
  868. top: 0rpx;
  869. width: 55rpx;
  870. height: 55rpx;
  871. z-index: 99;
  872. }
  873. </style>