Home.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936
  1. <template>
  2. <div class="home">
  3. <div class="main">
  4. <div v-show="selectedTitle !== '揭開看看吧!'" :class="['mainCon', { noImg: !activeObj.images[myInd]?.url }]">
  5. <audio id="myAudio" v-if="audio" v-show="isOneAduio" :src="urlToFitFu(audio)" controls></audio>
  6. <!-- 如果只有一个模块 -->
  7. <!-- <div
  8. class="oneTabNum"
  9. v-if="
  10. flooTab.length === 1 &&
  11. data[myType] &&
  12. data[myType].length &&
  13. data[myType].length > 1
  14. "
  15. >
  16. {{ myInd + 1 }} / {{ data[myType].length }}
  17. </div> -->
  18. <!-- 底部的tab -->
  19. <!-- <div class="flooTabBox" v-if="flooTab.length > 1">
  20. <div
  21. @click="myType = item.type"
  22. class="tabRow"
  23. :class="{ tabRowAc: myType === item.type }"
  24. v-for="item in flooTab"
  25. :key="item.id"
  26. >
  27. <img
  28. :src="
  29. require(`@/assets/images/pc/icon${item.id}${
  30. myType === item.type ? 'Ac' : ''
  31. }.png`)
  32. "
  33. alt=""
  34. />
  35. {{ item.name }}
  36. <span
  37. v-if="
  38. data[item.type] &&
  39. data[item.type].length &&
  40. data[item.type].length > 1
  41. "
  42. >{{ item.type === myType ? myInd + 1 + "/" : null
  43. }}{{ data[item.type].length }}</span
  44. >
  45. </div>
  46. </div> -->
  47. <!-- 主要内容 -->
  48. <div class="contenBoxMain">
  49. <img class="logo" src="../assets/logo.png" alt="" />
  50. <div class="contenBox" v-show="!onImg" :class="{ contenBoxAc: index === myInd }" v-for="(item, index) in filteredImages" :key="item.url">
  51. <!-- 模型页面 -->
  52. <!-- <div class="modelBox" v-if="myType === 'model'">
  53. <iframe
  54. :src="urlToFitFu(item)"
  55. frameborder="0"
  56. v-if="index === myInd"
  57. ></iframe>
  58. </div> -->
  59. <!-- 视频页面 -->
  60. <!-- <div class="videoBox" v-else-if="myType === 'video'">
  61. <video
  62. controls
  63. :src="urlToFitFu(item.url)"
  64. v-if="index === myInd"
  65. ></video>
  66. </div> -->
  67. <!-- 图片页面 v-if="myType === 'img'"-->
  68. <div class="imgBox">
  69. <div class="smImgBox">
  70. <video
  71. ref="videoRef"
  72. v-if="(/\.(mp4|webm|ogg|mov)$/i.test(item.url) && curLanguage === 'zh-hk') || (/\.(mp4|webm|ogg|mov)$/i.test(item.url_en) && curLanguage === 'en') || (/\.(mp4|webm|ogg|mov)$/i.test(item.url_pe) && curLanguage === 'pe')"
  73. :src="curLanguage === 'zh-hk' ? item.url : curLanguage === 'en' ? item.url_en : item.url_pe"
  74. controls
  75. />
  76. <img v-if="/\.(jpg|jpeg|png)$/i.test(item.url)" v-lazy="item.url" alt="" @click="lookImg(item.url)" />
  77. </div>
  78. </div>
  79. </div>
  80. <div class="tips" v-if="filteredImages.length < 1">
  81. {{ curLanguage === "zh-hk" ? "暂无内容" : curLanguage === "en" ? "No content" : "Nenhum conteúdo ainda" }}
  82. </div>
  83. <!-- 左右箭头 -->
  84. <div @click="cutMyInd(-1, myInd === 0)" class="leftJJ awccJJ" :class="{ noClick: myInd === 0 }" v-show="!onImg" v-if="activeObj.images && filteredImages.length > 1"></div>
  85. <div @click="cutMyInd(1, myInd === filteredImages.length - 1)" class="rightJJ awccJJ" v-show="!onImg" :class="{ noClick: myInd === filteredImages.length - 1 }" v-if="activeObj.images && filteredImages.length > 1"></div>
  86. </div>
  87. <div class="listBox">
  88. <div class="changeList">
  89. <div class="list">
  90. <div
  91. class="item"
  92. @click="
  93. activeObj = element;
  94. myInd = 0;
  95. "
  96. v-show="list.length > 1"
  97. v-for="(element, index) in list"
  98. :key="index"
  99. :class="{ active: element.id == activeObj.id }"
  100. >
  101. {{ element.title }}
  102. </div>
  103. </div>
  104. </div>
  105. <!-- 音频图标 v-if="audio && !isOneAduio"-->
  106. <div :class="onImg ? 'iconLists' : 'iconList'">
  107. <!-- <div
  108. class="audioIcon"
  109. @click="audioSta = !audioSta"
  110. :title="audioSta ? '关闭音频' : '打开音频'"
  111. >
  112. <img
  113. :src="
  114. require(`@/assets/images/pc/audio${
  115. !audioSta ? 'Ac' : ''
  116. }.png`)
  117. "
  118. alt=""
  119. />
  120. </div> -->
  121. <!-- <div class="audioIcon" @click="showLanlist">
  122. <div class="ppList" v-show="isShowLanlist">
  123. <div
  124. v-for="item in languageList"
  125. :key="item.key"
  126. @click="hanleType(item)"
  127. :style="{
  128. color: item.key == language ? '#0F7562' : '#00221C',
  129. }"
  130. >
  131. {{ item.name }}
  132. </div>
  133. </div>
  134. <img :src="require(`@/assets/images/pc/yuyan.png`)" alt="" />
  135. </div> -->
  136. <div
  137. class="audioIcon"
  138. @click="showAudlist"
  139. :style="{
  140. opacity: curLanguage === 'zh-hk' && audioList.length > 0 ? 1 : 0,
  141. pointerEvents: curLanguage === 'zh-hk' && audioList.length > 0 ? 'auto' : 'none',
  142. }"
  143. >
  144. <div class="ppList auList" v-show="isShowAudlist">
  145. <div
  146. v-for="item in audioList"
  147. :key="item.key"
  148. @click="handleAudio(item)"
  149. :style="{
  150. color: item.key === audioType ? '#0F7562' : '#00221C',
  151. }"
  152. >
  153. {{ item.name }}
  154. </div>
  155. </div>
  156. <img :src="require(`@/assets/images/pc/yuyin.png`)" alt="" />
  157. </div>
  158. <div class="audioIcon" @click="autoAudioSta = !autoAudioSta" :title="autoAudioSta ? '关闭自动续播' : '打开自动续播'" v-show="audioList.length > 0">
  159. <img :src="require(`@/assets/images/pc/auto${!autoAudioSta ? 'Ac' : ''}.png`)" alt="" />
  160. </div>
  161. </div>
  162. </div>
  163. <!-- 下面的文字介绍 -->
  164. <div class="flooTxt" :class="{ onImg: !!onImg }" v-if="activeObj.images[myInd]">
  165. <div class="flooTxtBox">
  166. <div class="myTitle" v-html="showText('title')"></div>
  167. <div class="myTxt" v-html="showText('text')" style="display: none"></div>
  168. </div>
  169. </div>
  170. </div>
  171. <Book :lookImg="lookImg" :list="list" :curLang="curLanguage" v-show="selectedTitle === '揭開看看吧!'" />
  172. </div>
  173. <!-- 查看图片 -->
  174. <viewer class="viewerCla" ref="viewer" :images="lookPics">
  175. <img :src="lookPics[0]" alt="" />
  176. </viewer>
  177. </div>
  178. </template>
  179. <script>
  180. // import { hotList } from "./data.js";
  181. import Book from "@/components/Book.vue";
  182. export default {
  183. name: "Home",
  184. data() {
  185. return {
  186. selectedTitle: this.$route.query.title,
  187. m: this.$route.query.m,
  188. id: this.$route.query.id,
  189. languageList: [],
  190. audioList: [],
  191. language: "",
  192. // 音频地址
  193. audio: "",
  194. audioType: "",
  195. // 如果只有单独的音频
  196. isOneAduio: false,
  197. // 音频状态
  198. audioSta: false,
  199. // 自动续播
  200. autoAudioSta: false,
  201. //无图,模式
  202. onImg: false,
  203. myInd: 0,
  204. // 当前 type
  205. list: [],
  206. // 查看图片
  207. lookPics: [],
  208. activeObj: {
  209. id: 1,
  210. images: [],
  211. },
  212. isShowLanlist: false,
  213. isShowAudlist: false,
  214. curLanguage: this.$route.query.curLang || localStorage.getItem("locale"),
  215. };
  216. },
  217. watch: {
  218. myType() {
  219. this.myInd = 0;
  220. },
  221. myInd(newVal, oldVal) {
  222. if (!this.activeObj.images || newVal < 0 || newVal >= this.activeObj.images.length) {
  223. this.audio = "";
  224. return;
  225. }
  226. let item = this.activeObj.images[this.myInd];
  227. this.resetList(item);
  228. // 切换暂停播放视频
  229. if (this.selectedTitle.includes("視頻") && this.$refs.videoRef?.[oldVal]) {
  230. console.log("----oldVal", oldVal);
  231. this.$refs.videoRef[oldVal].pause();
  232. }
  233. },
  234. activeObj(newVal) {
  235. this.resetList(newVal.images[this.myInd]);
  236. },
  237. // 音频的开启和关闭
  238. audioSta(val) {
  239. const dom = document.querySelector("#myAudio");
  240. console.log("----val", this.audio, val, dom);
  241. if (val) {
  242. dom.play();
  243. dom.onended = () => {
  244. // console.log("----音频播放完毕");
  245. if (this.autoAudioSta) {
  246. this.cutMyInd(1, this.myInd === this.activeObj.images.length - 1);
  247. } else {
  248. this.audioSta = false;
  249. }
  250. };
  251. } else dom.pause();
  252. },
  253. autoAudioSta(val) {
  254. this.audioSta = val;
  255. },
  256. },
  257. computed: {
  258. filteredImages() {
  259. if (!this.activeObj?.images) return [];
  260. const isVideo = (item) => {
  261. return (/\.(mp4|webm|ogg|mov)$/i.test(item.url) && this.curLanguage === "zh-hk") || (/\.(mp4|webm|ogg|mov)$/i.test(item.url_en) && this.curLanguage === "en") || (/\.(mp4|webm|ogg|mov)$/i.test(item.url_pe) && this.curLanguage === "pe");
  262. };
  263. const isImage = (item) => /\.(jpg|jpeg|png)$/i.test(item.url);
  264. const isTitle = (item) => {
  265. return item.title_zh || item.title_zhhk || item.title_pe || item.title_en;
  266. };
  267. const filterArr = this.activeObj.images.filter((item) => {
  268. return isVideo(item) || isImage(item) || isTitle(item);
  269. });
  270. console.log(
  271. this.activeObj.images.filter((item) => {
  272. return isVideo(item) || isImage(item);
  273. })
  274. );
  275. // return filterArr.filter((i, index) => {
  276. // return index <= this.myInd + 3;
  277. // });
  278. if (this.selectedTitle.includes("視頻")) {
  279. return this.activeObj.images.filter((item) => {
  280. return isVideo(item) || isImage(item);
  281. });
  282. }
  283. return filterArr;
  284. },
  285. },
  286. components: {
  287. Book,
  288. },
  289. methods: {
  290. handlePlay() {
  291. console.log("----this.$refs.videoRef", this.$refs.videoRef);
  292. const currentVideo = this.$refs.videoRef?.[this.myInd];
  293. if (!currentVideo) return;
  294. currentVideo.requestFullscreen();
  295. if (currentVideo.paused) {
  296. currentVideo.play().catch((err) => {
  297. console.error("视频播放失败:", err);
  298. });
  299. } else {
  300. currentVideo.pause();
  301. }
  302. },
  303. hanleType(item) {
  304. this.language = item.key;
  305. // this.$i18n.locale = 'fr';
  306. },
  307. handleAudio(item) {
  308. let data = this.activeObj.images[this.myInd];
  309. this.audio = data[item.key];
  310. this.audioType = item.key;
  311. this.audioSta = false;
  312. this.$nextTick(() => {
  313. this.audioSta = true;
  314. });
  315. localStorage.setItem("cnPreference", item.key);
  316. },
  317. showText(type) {
  318. let item = this.activeObj.images[this.myInd];
  319. let objTitle = {
  320. "zh-cn": item.title_zh,
  321. "zh-hk": item.title_zhhk,
  322. pe: item.title_pe,
  323. en: item.title_en,
  324. not: " ",
  325. };
  326. let objText = {
  327. "zh-cn": item.text_zh,
  328. "zh-hk": item.text_zhhk,
  329. pe: item.text_pe,
  330. en: item.text_en,
  331. };
  332. if (type == "title") {
  333. return objTitle[this.language];
  334. } else {
  335. return objText[this.language];
  336. }
  337. },
  338. // 本地化 url 适配
  339. urlToFitFu(url) {
  340. return url.url || url;
  341. // const resUrl = url;
  342. // if (url.includes("https://super.4dage.com")) {
  343. // return url.replace("https://super.4dage.com", "");
  344. // } else if (url.includes("http://super.4dage.com")) {
  345. // return url.replace("http://super.4dage.com", "");
  346. // } else return resUrl;
  347. },
  348. // 点击左右箭头
  349. cutMyInd(num, flag) {
  350. if (flag) return;
  351. this.myInd += num;
  352. this.audioSta = false;
  353. if (this.autoAudioSta)
  354. this.$nextTick(() => {
  355. this.audioSta = true;
  356. });
  357. // this.activeObj = this.activeObj.images[this.myInd];
  358. },
  359. // 点击查看大图
  360. lookImg(url) {
  361. let dom = this.$refs.viewer.$viewer;
  362. this.lookPics = [url.url || url];
  363. console.log(this.lookPics);
  364. dom.show();
  365. },
  366. resetList(item) {
  367. this.languageList = [];
  368. this.audioList = [];
  369. const isHk = item?.title_zhhk || item?.text_zhhk;
  370. const isEn = item?.title_en || item?.text_en;
  371. const isPe = item?.title_pe || item?.text_pe;
  372. isHk && this.languageList.push({ name: "繁體中文", key: "zh-hk" });
  373. isEn && this.languageList.push({ name: "English", key: "en" });
  374. isPe && this.languageList.push({ name: "Português", key: "pe" });
  375. this.curLanguage === "zh-hk" && item?.mp3_zh && this.audioList.push({ name: "普通話", key: "mp3_zh" });
  376. this.curLanguage === "zh-hk" && item?.mp3_zhhk && this.audioList.push({ name: "粵語", key: "mp3_zhhk" });
  377. this.curLanguage === "en" && item?.mp3_en && this.audioList.push({ name: "English", key: "mp3_en" });
  378. this.curLanguage === "pe" && item?.mp3_pe && this.audioList.push({ name: "Português", key: "mp3_pe" });
  379. console.log(this.audioList, "this.audioList");
  380. const cnPreference = localStorage.getItem("cnPreference");
  381. console.log(cnPreference === "mp3_zh", 'cnPreference === "mp3_zh"');
  382. this.audio = (this.curLanguage === "zh-hk" && (cnPreference === "mp3_zh" ? item?.mp3_zh : item?.mp3_zhhk)) || (this.curLanguage === "en" && item?.mp3_en) || (this.curLanguage === "pe" && item?.mp3_pe) || "";
  383. console.log(this.audio, "-----------audio");
  384. this.audioType = this.curLanguage === "zh-hk" && item?.mp3_zhhk ? cnPreference || "mp3_zhhk" : this.curLanguage === "en" && item?.mp3_en ? "mp3_en" : this.curLanguage === "pe" && item?.mp3_pe ? "mp3_pe" : "";
  385. this.language = this.curLanguage === "zh-hk" && isHk ? "zh-hk" : this.curLanguage === "en" && isEn ? "en" : this.curLanguage === "pe" && isPe ? "pe" : "not";
  386. console.log(this.language, "===============");
  387. // this.$nextTick(() => {
  388. // this.autoAudioSta = true;
  389. // });
  390. },
  391. getData() {
  392. // https://www.4dmodel.com/
  393. // let url = `https://houseoss.4dkankan.com/project/aoMenScene/static/hot/${
  394. // 线上数据
  395. // let url = `/static/data/${
  396. //本地化部署
  397. // this.m
  398. // }/data.json?time=${Math.random()}`;
  399. // let result = (await this.$http.get(url)).data;
  400. console.log("..................123", window.hotList);
  401. const resData = window.hotList.find((item) => item.key === this.selectedTitle)?.contentList;
  402. console.log("..................", resData);
  403. this.list = resData;
  404. let showData = resData && resData[0];
  405. let item = showData?.images[this.myInd];
  406. this.resetList(item);
  407. this.activeObj = {
  408. ...showData,
  409. };
  410. },
  411. showLanlist() {
  412. this.isShowLanlist = !this.isShowLanlist;
  413. },
  414. showAudlist() {
  415. this.isShowAudlist = !this.isShowAudlist;
  416. },
  417. },
  418. mounted() {
  419. this.getData();
  420. },
  421. };
  422. </script>
  423. <style lang="less" scoped>
  424. .home {
  425. .viewerCla img {
  426. display: none;
  427. }
  428. width: 100%;
  429. height: 100%;
  430. background-color: rgba(255, 252, 247, 0.6);
  431. backdrop-filter: blur(10px);
  432. position: relative;
  433. #myAudio {
  434. z-index: 11;
  435. position: absolute;
  436. top: 50%;
  437. left: 50%;
  438. transform: translate(-50%, -50%);
  439. width: 500px;
  440. height: 60px;
  441. }
  442. .main {
  443. width: 70%;
  444. margin: 0 auto;
  445. height: 87%;
  446. padding-top: 95px;
  447. .mainCon {
  448. background-image: url("../assets/bg.png");
  449. background-size: 100% 100%;
  450. border-radius: 6px;
  451. overflow: hidden;
  452. width: 100%;
  453. height: 100%;
  454. .oneTabNum {
  455. z-index: 10;
  456. position: absolute;
  457. bottom: 30px;
  458. left: 50%;
  459. transform: translateX(-50%);
  460. font-size: 14px;
  461. }
  462. .flooTabBox {
  463. z-index: 10;
  464. position: absolute;
  465. bottom: 30px;
  466. left: 50%;
  467. transform: translateX(-50%);
  468. display: flex;
  469. .tabRow {
  470. cursor: pointer;
  471. display: flex;
  472. align-items: center;
  473. margin: 0 12px;
  474. font-size: 12px;
  475. background-color: #dedede;
  476. padding: 0px 14px;
  477. height: 36px;
  478. border-radius: 18px;
  479. & > img {
  480. margin-right: 6px;
  481. }
  482. }
  483. .tabRowAc {
  484. background-color: #b90c0c;
  485. pointer-events: none;
  486. color: #d6b970;
  487. }
  488. }
  489. .contenBoxMain {
  490. position: relative;
  491. width: 100%;
  492. height: 70%;
  493. .logo {
  494. position: absolute;
  495. left: 52px;
  496. top: 37px;
  497. height: 60px;
  498. }
  499. .tips {
  500. display: flex;
  501. width: 100%;
  502. height: 100%;
  503. justify-content: center;
  504. align-items: center;
  505. color: #fff;
  506. font-size: 22px;
  507. font-weight: 700;
  508. }
  509. }
  510. .listBox {
  511. position: relative;
  512. top: -54%;
  513. width: 72%;
  514. margin: 0 auto;
  515. display: flex;
  516. justify-content: space-between;
  517. align-items: center;
  518. .iconList,
  519. .iconLists {
  520. display: flex;
  521. .audioIcon {
  522. z-index: 10;
  523. cursor: pointer;
  524. width: 62px;
  525. position: relative;
  526. img {
  527. width: 100%;
  528. }
  529. .ppList {
  530. padding: 8px 10px;
  531. width: 99px;
  532. position: absolute;
  533. top: 66px;
  534. left: -46px;
  535. background: #fff;
  536. opacity: 0.85;
  537. border-radius: 8px;
  538. div {
  539. height: 30px;
  540. line-height: 30px;
  541. font-family: Source Han Serif CN;
  542. font-weight: 600;
  543. font-size: 14px;
  544. color: #00221c;
  545. opacity: 0.85;
  546. text-align: center;
  547. border-bottom: 1px solid #d2c9c1;
  548. &:last-child {
  549. border: none;
  550. }
  551. }
  552. }
  553. .auList {
  554. left: 6px;
  555. }
  556. }
  557. }
  558. .changeList {
  559. margin-left: 95px;
  560. .list {
  561. display: flex;
  562. align-items: center;
  563. .active {
  564. opacity: 1;
  565. color: #02362c;
  566. }
  567. div {
  568. height: 100%;
  569. padding: 8px 7px 10px 7px;
  570. min-width: 70px;
  571. text-align: center;
  572. background: #dde5e2;
  573. border-radius: 7px;
  574. font-family: Source Han Serif CN;
  575. font-weight: 500;
  576. font-size: 14px;
  577. color: #02362c;
  578. line-height: 14px;
  579. opacity: 0.79;
  580. margin-right: 20px;
  581. }
  582. }
  583. }
  584. }
  585. .contenBox {
  586. width: 51%;
  587. height: 80%;
  588. position: absolute;
  589. top: auto;
  590. left: calc(50% - 315px);
  591. opacity: 0;
  592. pointer-events: none;
  593. transition: all 0.5s;
  594. bottom: 0 !important;
  595. left: 50% !important;
  596. transform: translate(-50%, 28px);
  597. .modelBox,
  598. .videoBox,
  599. .imgBox {
  600. width: 100%;
  601. height: 100%;
  602. object-fit: contain;
  603. }
  604. .modelBox {
  605. iframe {
  606. width: 100%;
  607. height: 100%;
  608. }
  609. }
  610. .videoBox {
  611. // padding: 100px 100px 120px;
  612. video {
  613. width: 100%;
  614. height: 100%;
  615. object-fit: contain;
  616. }
  617. }
  618. .imgBox {
  619. // padding: 100px 100px 120px;
  620. .smImgBox {
  621. position: relative;
  622. width: 100%;
  623. height: 100%;
  624. & > img,
  625. & > video {
  626. // pointer-events: none;
  627. width: 100%;
  628. height: 100%;
  629. object-fit: contain;
  630. }
  631. & > img {
  632. cursor: zoom-in;
  633. }
  634. }
  635. }
  636. }
  637. .contenBoxAc {
  638. opacity: 1;
  639. pointer-events: auto;
  640. }
  641. .awccJJ {
  642. cursor: pointer;
  643. position: fixed;
  644. top: 50%;
  645. left: 50%;
  646. transform: translate(-563px, -60px);
  647. width: 48px;
  648. height: 60px;
  649. background-image: url("../assets/images/icon/left.png");
  650. background-size: 100% 100%;
  651. &:focus {
  652. outline: none;
  653. }
  654. }
  655. .rightJJ {
  656. transform: translate(526px, -60px);
  657. background-image: url("../assets/images/icon/right.png");
  658. }
  659. .noClick {
  660. cursor: default;
  661. opacity: 0.4;
  662. }
  663. .flooTxt {
  664. margin-top: 20px;
  665. width: 80%;
  666. height: 135px;
  667. margin: 0 auto;
  668. // position: relative;
  669. top: -137px;
  670. .flooTxtBox {
  671. width: 100%;
  672. height: 100%;
  673. overflow-y: auto;
  674. .myTitle {
  675. color: #dde5e2;
  676. font-size: 22px;
  677. font-weight: 700;
  678. line-height: 38px;
  679. margin-bottom: 10px;
  680. text-align: justify;
  681. text-indent: 2em;
  682. }
  683. .myTxt {
  684. font-family: Adobe Heiti Std;
  685. font-weight: normal;
  686. font-size: 19px;
  687. color: #dde5e2;
  688. line-height: 31px;
  689. * {
  690. text-indent: 2em;
  691. }
  692. }
  693. &::-webkit-scrollbar {
  694. /*滚动条整体样式*/
  695. width: 3px; /*高宽分别对应横竖滚动条的尺寸*/
  696. height: 1px;
  697. }
  698. &::-webkit-scrollbar-thumb {
  699. /*滚动条里面小方块*/
  700. border-radius: 10px;
  701. -webkit-box-shadow: inset 0 0 5px transparent;
  702. background: #2f714a;
  703. }
  704. &::-webkit-scrollbar-track {
  705. /*滚动条里面轨道*/
  706. -webkit-box-shadow: inset 0 0 5px transparent;
  707. border-radius: 10px;
  708. background: transparent;
  709. }
  710. }
  711. }
  712. }
  713. .noImg {
  714. .contenBoxMain {
  715. height: 16%;
  716. .contenBox {
  717. display: none;
  718. }
  719. .tips {
  720. display: none;
  721. }
  722. }
  723. .listBox {
  724. position: initial;
  725. }
  726. .flooTxt {
  727. width: 51%;
  728. height: 48%;
  729. }
  730. }
  731. .onImg {
  732. top: -600px !important;
  733. height: 360px;
  734. }
  735. .flooTxtOne {
  736. height: 600px;
  737. }
  738. }
  739. }
  740. // 移动端
  741. @media screen and (max-width: 1000px) {
  742. .home {
  743. .logo {
  744. display: none;
  745. }
  746. #myAudio {
  747. width: 90vw;
  748. max-width: 500px;
  749. }
  750. .main {
  751. width: 90%;
  752. height: 85%;
  753. padding: 0;
  754. position: absolute;
  755. top: 50%;
  756. left: 50%;
  757. transform: translate(-50%, -50%);
  758. .mainCon {
  759. border-radius: 8px 8px 0 0;
  760. background-image: url("../assets/images/mobileBg.png");
  761. .contenBoxMain {
  762. height: 42%;
  763. max-height: 260px;
  764. .contenBox {
  765. width: calc(100% - 84px);
  766. height: 165px;
  767. transform: translate(-50%, 0);
  768. .videoBox {
  769. padding: 0px 0;
  770. position: relative;
  771. video {
  772. width: 96%;
  773. max-height: 100%;
  774. height: auto;
  775. position: absolute;
  776. top: 50%;
  777. left: 2%;
  778. transform: translateY(-50%);
  779. }
  780. }
  781. .imgBox {
  782. // padding: 60px 50px 80px;
  783. .smImgBox {
  784. cursor: default;
  785. }
  786. }
  787. }
  788. .awccJJ {
  789. left: 0;
  790. width: 28px;
  791. top: 50%;
  792. bottom: 0;
  793. transform: translateY(-59px);
  794. height: 57px;
  795. cursor: default;
  796. background-image: url("../assets/images/icon/left.png");
  797. }
  798. .rightJJ {
  799. left: auto;
  800. right: 0;
  801. background-image: url("../assets/images/icon/right.png");
  802. }
  803. }
  804. .listBox {
  805. width: 76%;
  806. top: -188px;
  807. height: 0;
  808. .changeList {
  809. width: 100%;
  810. height: 30px;
  811. margin: 0;
  812. .list {
  813. gap: 5px;
  814. }
  815. div {
  816. font-size: 8px !important;
  817. .item {
  818. padding: 6px 4px !important;
  819. min-width: 35px;
  820. margin: 0;
  821. }
  822. }
  823. }
  824. .iconList {
  825. align-items: center;
  826. gap: 6px;
  827. .audioIcon {
  828. cursor: default;
  829. width: 30px;
  830. height: 30px;
  831. & > img {
  832. width: 30px;
  833. }
  834. .auList {
  835. left: -180px !important;
  836. }
  837. .ppList {
  838. top: 35px !important;
  839. left: -75px !important;
  840. }
  841. }
  842. }
  843. }
  844. .flooTabBox {
  845. width: 100%;
  846. bottom: 20px;
  847. justify-content: center;
  848. .tabRow {
  849. cursor: default;
  850. margin: 0 6px;
  851. padding: 0 10px;
  852. height: 32px;
  853. & > img {
  854. width: 16px;
  855. }
  856. }
  857. }
  858. .flooTxt {
  859. margin-top: 0;
  860. padding: 20px 0 15px;
  861. height: 52%;
  862. // background-color: #fff;
  863. border-radius: 0 0 8px 8px;
  864. top: -383px;
  865. .flooTxtBox {
  866. .myTitle {
  867. text-align: justify;
  868. text-indent: 2em;
  869. font-size: 18px;
  870. text-indent: 2em;
  871. }
  872. .myTxt {
  873. font-size: 14px;
  874. line-height: 22px;
  875. }
  876. }
  877. }
  878. }
  879. .noImg {
  880. .contenBoxMain {
  881. height: 10%;
  882. }
  883. .listBox {
  884. top: -7px;
  885. .iconList {
  886. .audioIcon {
  887. .auList {
  888. left: -4px !important;
  889. }
  890. }
  891. }
  892. }
  893. .flooTxt {
  894. height: 75%;
  895. width: 80%;
  896. }
  897. }
  898. .flooTxtOne {
  899. height: 100%;
  900. }
  901. }
  902. }
  903. }
  904. </style>