Rbottom.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. <template>
  2. <div class="Rbottom" :style="`${leftList[1].done ? 'bottom:0px' : ''}`">
  3. <!--热点列表div -->
  4. <div class="hotBox" :class="{ activeHotBox: hotListShow }">
  5. <div class="hot_main">
  6. <!-- 关闭按钮 -->
  7. <div class="hot_close" @click="hotListShow = false"></div>
  8. <!-- 标题 -->
  9. <div class="hot_title">热点列表</div>
  10. <!-- 输入框 -->
  11. <div class="hot_search" @keyup.enter="mySearch">
  12. <!-- <input type="text" v-model="hotTxt"> -->
  13. <el-input type="text" placeholder="请输关键字" v-model="hotTxt" maxlength="30" show-word-limit>
  14. </el-input>
  15. <div class="hot_btn" @click="mySearch">搜索</div>
  16. </div>
  17. <!-- 历史记录 -->
  18. <div class="hot_his" v-show="hotHisList.length > 0">
  19. <div class="hot_hisRow" @click="selectHis(item)" v-for="(item, index) in hotHisList" :key="index">{{ item }}
  20. </div>
  21. <!-- 清除 -->
  22. <div class="hot_clearHis" @click="clearHotHis">清除历史记录</div>
  23. </div>
  24. <!-- 热点列表 -->
  25. <div class="hot_listNone" v-show="hotListShowData.length === 0">
  26. 暂无内容
  27. </div>
  28. <div v-show="hotListShowData.length !== 0" class="hot_list"
  29. :style="`height:${hotHisList.length === 0 ? '540px' : '450px'}`">
  30. <div class="hot_listRow" @click="openHot(item)" v-for="item in hotListShowData" :key="item.sid">{{
  31. item.title?.split('&')[0]
  32. }}</div>
  33. </div>
  34. </div>
  35. </div>
  36. <audio src="@/assets/media/bacMusic.mp3" loop id="bacMusic"></audio>
  37. <div class="box1">
  38. <div class="mainll mainrr">
  39. <div v-show="list.length !== 0 || item.type > 2" @click="leftCutClick(item.type)" class="row"
  40. :class="{ active2: item.done }" v-for="item in leftList" :key="item.type">
  41. <img :src="
  42. require(`@/assets/img/LeftTop/inco${item.type}${item.done ? 'Ac' : ''
  43. }.png`)
  44. " alt="" />
  45. <p>{{ item.name }}</p>
  46. </div>
  47. <!-- 热点列表 -->
  48. <div class="row" :class="{ active2: hotListShow }" @click="hotListShow = true">
  49. <img :src="
  50. require(`@/assets/img/LeftTop/incoHot${hotListShow ? 'Ac' : ''
  51. }.png`)
  52. " alt="" />
  53. <p>热点列表</p>
  54. </div>
  55. </div>
  56. <div class="mainrr">
  57. <div class="row" @click="rightClisk(item.type)" v-for="item in rightList" :key="item.type" :class="{
  58. active2:
  59. (music && item.type === 2) ||
  60. (like && item.type === 3) ||
  61. (share && item.type === 4) ||
  62. (isFullscreen && item.type === 5),
  63. }">
  64. <img :src="require(`@/assets/img/Goods/inco${item.type}Ac.png`)" alt="" v-if="music && item.type === 2" />
  65. <img :src="require(`@/assets/img/Goods/inco${item.type}Ac.png`)" alt="" v-else-if="like && item.type === 3" />
  66. <img :src="require(`@/assets/img/Goods/inco${item.type}Ac.png`)" alt=""
  67. v-else-if="share && item.type === 4" />
  68. <img :src="require(`@/assets/img/Goods/inco${item.type}Ac.png`)" alt=""
  69. v-else-if="isFullscreen && item.type === 5" />
  70. <img :src="require(`@/assets/img/Goods/inco${item.type}.png`)" alt="" v-else />
  71. <transition name="likeAddAnimate">
  72. <div class="likeMove" v-show="like && item.type === 3">+ 1</div>
  73. </transition>
  74. <p>
  75. {{ item.name }}
  76. </p>
  77. </div>
  78. </div>
  79. </div>
  80. <div class="box2" :style="`${leftList[1].done ? '' : 'height:0px;padding:0;opacity:0'}`">
  81. <div class="swiper-container">
  82. <div class="swiper-wrapper" v-if="list.length">
  83. <div @click="cutGoods(index)" class="swiper-slide" v-for="(item, index) in list"
  84. :class="{ active: (acList === index && playing) || (clickBottomAc && acList === index) }" :key="index">
  85. <img :src="item.list[0].enter.cover" alt="" />
  86. <div class="plan" v-show="(acList === index && playing) || (clickBottomAc && acList === index)"
  87. :style="{ width: progressPart + '%' }"></div>
  88. <p :class="{
  89. txtActive: (acList === index && playing) || (clickBottomAc && acList === index),
  90. }">
  91. {{ item.name }}
  92. </p>
  93. </div>
  94. <div class="swiper-slide" style="pointer-events: none"></div>
  95. </div>
  96. <div class="swiper-scrollbar"></div>
  97. </div>
  98. </div>
  99. <!-- 分享页面 -->
  100. <div class="shareBox" :class="{ shareBoxShow: share }">
  101. <div class="shareMain">
  102. <div class="close" @click="share = false"></div>
  103. <h3>分享</h3>
  104. <p>
  105. 请使用手机扫描二维码或
  106. <br />
  107. 复制分享链接
  108. </p>
  109. <img src="@/assets/img/Goods/Rcode.jpg" alt="" />
  110. <div class="btnn" @click="copyPcTxt">复制分享链接</div>
  111. </div>
  112. </div>
  113. </div>
  114. </template>
  115. <script>
  116. import { getHotHis, setHotHis, clearHotHis } from '../utils/storage'
  117. import { addNumAPI } from "@/utils/api";
  118. import Swiper from "./swiper.js";
  119. export default {
  120. name: "Rbottom",
  121. components: {},
  122. props: ["acList", "progressPart", "playing", "clickBottomAc"],
  123. data() {
  124. //这里存放数据
  125. return {
  126. rightList: [
  127. { name: "首页", type: 1 },
  128. { name: "声音", type: 2 },
  129. { name: "点赞", type: 3 },
  130. { name: "分享", type: 4 },
  131. { name: "全屏", type: 5 },
  132. ],
  133. rightType: "",
  134. music: false,
  135. like: false,
  136. share: false,
  137. isFullscreen: false,
  138. // --------------
  139. hotList: [],
  140. hotListShowData: [],
  141. hotHisList: [],
  142. hotTxt: '',
  143. hotListShow: false,
  144. leftList: [
  145. { name: "自动漫游", type: 1, done: false },
  146. { name: "场景导览", type: 2, done: false },
  147. { name: "全景漫游", type: 3, done: true },
  148. { name: "迷你模型", type: 4, done: false },
  149. { name: "顶部俯视", type: 5, done: false },
  150. ],
  151. list: [],
  152. Swiper: null,
  153. };
  154. },
  155. //监听属性 类似于data概念
  156. computed: {},
  157. //监控data中的数据变化
  158. watch: {
  159. hotListShow(val) {
  160. if (val) {
  161. if (this.leftList[0].done) {
  162. this.$emit("stopPlay", true);
  163. this.leftList[0].done = false
  164. if (window.bacMusic) {
  165. setTimeout(() => {
  166. this.music = true;
  167. }, 100);
  168. }
  169. }
  170. } else {
  171. this.hotListShowData = [...this.hotList]
  172. this.hotTxt = ''
  173. let dom = document.querySelector('.hot_list')
  174. if (dom) dom.scrollTop = 0
  175. }
  176. },
  177. acList(val) {
  178. let temp = val - 2;
  179. if (temp < 0) temp = 0;
  180. this.Swiper.slideTo(temp);
  181. },
  182. music(val) {
  183. let dom = document.querySelector("#bacMusic");
  184. if (val) dom.play();
  185. else dom.pause();
  186. },
  187. },
  188. //方法集合
  189. methods: {
  190. // 给父组件调用,拿到热点数据
  191. getHotListToFather(data) {
  192. this.hotList = data.filter(v => v.title.split("&")[2] || !v.title.includes("&"))
  193. this.hotListShowData = [...this.hotList]
  194. },
  195. openHot(item) {
  196. this.$emit('openHot', item)
  197. },
  198. selectHis(val) {
  199. this.hotHisList = this.hotHisList.filter(v => v !== val)
  200. this.hotTxt = val
  201. this.hotHisList.unshift(val)
  202. setHotHis(this.hotHisList)
  203. this.hotListShowData = this.hotList.filter(v => v.title.split("&")[0].includes(this.hotTxt))
  204. this.$nextTick(() => {
  205. setTimeout(() => {
  206. let dom = document.querySelector('.hot_list')
  207. if (dom) dom.scrollTop = 0
  208. }, 20);
  209. })
  210. },
  211. clearHotHis() {
  212. clearHotHis()
  213. this.hotHisList = []
  214. },
  215. mySearch() {
  216. if (this.hotTxt.trim() === '') {
  217. this.hotListShowData = [...this.hotList]
  218. } else {
  219. this.hotListShowData = this.hotList.filter(v => v.title.split("&")[0].includes(this.hotTxt))
  220. this.hotHisList = this.hotHisList.filter(v => v !== this.hotTxt)
  221. this.hotHisList.unshift(this.hotTxt)
  222. if (this.hotHisList.length > 14) this.hotHisList.length = 14
  223. setHotHis(this.hotHisList)
  224. }
  225. this.$nextTick(() => {
  226. setTimeout(() => {
  227. let dom = document.querySelector('.hot_list')
  228. if (dom) dom.scrollTop = 0
  229. }, 20);
  230. })
  231. },
  232. cutGoods(index) {
  233. this.$emit("update:clickBottomAc", false);
  234. this.$emit("daoLanCut", index);
  235. this.leftList[0].done = false;
  236. if (window.bacMusic) {
  237. setTimeout(() => {
  238. this.music = true;
  239. }, 100);
  240. }
  241. },
  242. leftCutClick(type) {
  243. this.$emit("cutKankan", type - 1);
  244. if (type === 1) {
  245. let dom = document.querySelector("#bacMusic");
  246. if (!this.leftList[0].done) {
  247. // 防止多次点击自动漫游
  248. let mainApp = document.querySelector("#app");
  249. mainApp.style.pointerEvents = "none";
  250. // 自动漫游开始的时候的音乐播放状态
  251. window.bacMusic = !dom.paused;
  252. setTimeout(() => {
  253. this.music = false;
  254. }, 200);
  255. } else {
  256. if (window.bacMusic) {
  257. setTimeout(() => {
  258. this.music = true;
  259. }, 100);
  260. }
  261. }
  262. this.leftList[1].done = true;
  263. this.leftList[0].done = !this.leftList[0].done;
  264. } else if (type === 2) {
  265. this.leftList[1].done = !this.leftList[1].done;
  266. } else if (type >= 4) {
  267. this.$emit("stopPlay", true);
  268. }
  269. },
  270. // 给父组件调用的控制音乐播放的方法
  271. opMusic(val) {
  272. this.music = val;
  273. },
  274. // 给父组件操作控制左边按钮的方法
  275. leftCut(index) {
  276. if (index > 2) {
  277. if (window.bacMusic) {
  278. setTimeout(() => {
  279. this.music = true;
  280. }, 100);
  281. }
  282. this.leftList.forEach((v, i) => {
  283. if (i === index) v.done = true;
  284. else v.done = false;
  285. });
  286. } else if (index === -1) {
  287. if (window.bacMusic) {
  288. setTimeout(() => {
  289. this.music = true;
  290. }, 100);
  291. }
  292. this.leftList[0].done = false;
  293. } else if (index === 2) {
  294. this.leftList[2].done = true;
  295. this.leftList[3].done = this.leftList[4].done = false;
  296. }
  297. },
  298. // 点击全屏
  299. fullShow() {
  300. let element = document.documentElement;
  301. if (this.isFullscreen) {
  302. if (document.exitFullscreen) {
  303. document.exitFullscreen();
  304. } else if (document.webkitCancelFullScreen) {
  305. document.webkitCancelFullScreen();
  306. } else if (document.mozCancelFullScreen) {
  307. document.mozCancelFullScreen();
  308. } else if (document.msExitFullscreen) {
  309. document.msExitFullscreen();
  310. }
  311. } else {
  312. if (element.requestFullscreen) {
  313. element.requestFullscreen();
  314. } else if (element.webkitRequestFullScreen) {
  315. element.webkitRequestFullScreen();
  316. } else if (element.mozRequestFullScreen) {
  317. element.mozRequestFullScreen();
  318. } else if (element.msRequestFullscreen) {
  319. element.msRequestFullscreen();
  320. }
  321. }
  322. // 改变当前全屏状态
  323. this.isFullscreen = !this.isFullscreen;
  324. },
  325. rightClisk(type) {
  326. if (type === 1) window.location.replace("/YHT/index.html#/Home");
  327. else if (type === 2) {
  328. let dom = document.querySelector("#bacMusic");
  329. window.bacMusic = dom.paused;
  330. this.music = !this.music;
  331. this.$emit("stopPlay");
  332. } else if (type === 3) {
  333. if (this.like) return;
  334. this.like = true;
  335. setTimeout(() => {
  336. this.like = false;
  337. }, 2000);
  338. addNumAPI("star");
  339. } else if (type === 4) {
  340. this.$emit("stopPlay");
  341. this.share = true;
  342. } else this.fullShow();
  343. },
  344. //点击复制链接
  345. copyPcTxt() {
  346. // 存储传递过来的数据
  347. let OrderNumber = window.location.origin + "/YHT/index.html";
  348. // 创建一个input 元素
  349. // createElement() 方法通过指定名称创建一个元素
  350. let newInput = document.createElement("input");
  351. // 讲存储的数据赋值给input的value值
  352. newInput.value = OrderNumber;
  353. // appendChild() 方法向节点添加最后一个子节点。
  354. document.body.appendChild(newInput);
  355. // 选中input元素中的文本
  356. // select() 方法用于选择该元素中的文本。
  357. newInput.select();
  358. // 执行浏览器复制命令
  359. // execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令
  360. document.execCommand("Copy");
  361. // 清空输入框
  362. newInput.remove();
  363. alert("复制成功");
  364. },
  365. // 初始化轮播图
  366. baseSw(data) {
  367. this.list = data;
  368. this.$nextTick(() => {
  369. this.Swiper = new Swiper(".Rbottom .swiper-container", {
  370. slidesPerView: 9,
  371. spaceBetween: 25,
  372. scrollbar: {
  373. el: ".swiper-scrollbar",
  374. },
  375. });
  376. });
  377. },
  378. },
  379. //生命周期 - 创建完成(可以访问当前this实例)
  380. created() {
  381. this.hotHisList = getHotHis()
  382. },
  383. //生命周期 - 挂载完成(可以访问DOM元素)
  384. mounted() {
  385. // 监听esc事件
  386. document.addEventListener("webkitfullscreenchange", (e) => {
  387. if (!e.currentTarget.webkitIsFullScreen) this.isFullscreen = false;
  388. });
  389. document.addEventListener("fullscreenchange", (e) => {
  390. if (!document.fullscreenElement) this.isFullscreen = false;
  391. });
  392. document.addEventListener("MSFullscreenChange", (e) => {
  393. if (!document.msFullscreenElement) this.isFullscreen = false;
  394. });
  395. document.addEventListener("mozfullscreenchange", (e) => {
  396. if (!document.mozFullScreenElement) this.isFullscreen = false;
  397. });
  398. },
  399. beforeCreate() { }, //生命周期 - 创建之前
  400. beforeMount() { }, //生命周期 - 挂载之前
  401. beforeUpdate() { }, //生命周期 - 更新之前
  402. updated() { }, //生命周期 - 更新之后
  403. beforeDestroy() { }, //生命周期 - 销毁之前
  404. destroyed() { }, //生命周期 - 销毁完成
  405. activated() { }, //如果页面有keep-alive缓存功能,这个函数会触发
  406. };
  407. </script>
  408. <style lang='less' scoped>
  409. .swiper-scrollbar {
  410. height: 4px;
  411. background-color: #fff;
  412. overflow: hidden;
  413. }
  414. /deep/.swiper-scrollbar-drag {
  415. background-color: #930909;
  416. }
  417. @import "./swiper.css";
  418. .likeAddAnimate-enter-active,
  419. .likeAddAnimate-leave-active {
  420. transition: all 2s ease;
  421. }
  422. .likeAddAnimate-enter,
  423. .likeAddAnimate-leave {
  424. transform: translateY(0) scale(0);
  425. opacity: 0;
  426. }
  427. .likeAddAnimate-enter-to,
  428. .likeAddAnimate-leave-to {
  429. transform: translateY(-50px) scale(1.2);
  430. opacity: 1;
  431. }
  432. .Rbottom {
  433. transition: all 0.5s;
  434. z-index: 11;
  435. position: absolute;
  436. bottom: 24px;
  437. right: 0px;
  438. width: 100%;
  439. // 热点列表页面
  440. .hotBox {
  441. transition: opacity .3s;
  442. opacity: 0;
  443. pointer-events: none;
  444. position: fixed;
  445. z-index: 99;
  446. top: 0;
  447. left: 0;
  448. width: 100%;
  449. height: 100%;
  450. backdrop-filter: blur(4px);
  451. .hot_main {
  452. padding: 25px 50px 15px;
  453. position: absolute;
  454. top: 50%;
  455. left: 50%;
  456. transform: translate(-50%, -50%);
  457. width: 1100px;
  458. height: 700px;
  459. background-image: url('../assets/img/LeftTop/hotBox.png');
  460. background-size: 100% 100%;
  461. .hot_close {
  462. cursor: pointer;
  463. position: absolute;
  464. background-image: url('../assets/img/Goods/shareClose.png');
  465. background-size: 100% 100%;
  466. right: -20px;
  467. top: -20px;
  468. z-index: 11;
  469. width: 48px;
  470. height: 48px;
  471. }
  472. .hot_title {
  473. font-size: 24px;
  474. color: #D8B275;
  475. margin-bottom: 15px;
  476. }
  477. .hot_search {
  478. display: flex;
  479. height: 40px;
  480. justify-content: space-between;
  481. .el-input {
  482. width: 860px;
  483. /deep/input {
  484. background-color: transparent;
  485. border-radius: 20px;
  486. border: 1px solid #D8B275;
  487. color: #fff;
  488. }
  489. /deep/.el-input__count-inner {
  490. background-color: transparent;
  491. color: #fff;
  492. }
  493. }
  494. .hot_btn {
  495. width: 100px;
  496. height: 40px;
  497. background-color: #D8B275;
  498. border-radius: 20px;
  499. cursor: pointer;
  500. text-align: center;
  501. line-height: 40px;
  502. color: #930909;
  503. font-size: 14px;
  504. }
  505. }
  506. .hot_his {
  507. display: flex;
  508. flex-wrap: wrap;
  509. position: relative;
  510. padding-right: 120px;
  511. .hot_clearHis {
  512. position: absolute;
  513. bottom: 0;
  514. right: 0;
  515. cursor: pointer;
  516. padding-left: 20px;
  517. background: url('../assets/img/LeftTop/delete.png') left center no-repeat;
  518. background-size: 17px 17px;
  519. color: #fff;
  520. font-size: 14px;
  521. }
  522. .hot_hisRow {
  523. height: 30px;
  524. line-height: 30px;
  525. padding: 0 8px;
  526. background-color: #EEEEEE;
  527. margin-right: 15px;
  528. margin-top: 15px;
  529. cursor: pointer;
  530. border-radius: 15px;
  531. max-width: 110px;
  532. overflow: hidden;
  533. text-overflow: ellipsis;
  534. white-space: nowrap;
  535. }
  536. }
  537. .hot_list::-webkit-scrollbar {
  538. /*滚动条整体样式*/
  539. width: 5px;
  540. /*高宽分别对应横竖滚动条的尺寸*/
  541. height: 1px;
  542. }
  543. .hot_list::-webkit-scrollbar-thumb {
  544. /*滚动条里面小方块*/
  545. border-radius: 1px;
  546. -webkit-box-shadow: inset 0 0 5px transparent;
  547. background: #d8b275;
  548. }
  549. .hot_list::-webkit-scrollbar-track {
  550. /*滚动条里面轨道*/
  551. -webkit-box-shadow: inset 0 0 5px transparent;
  552. border-radius: 10px;
  553. background: transparent;
  554. }
  555. .hot_listNone {
  556. width: 100%;
  557. height: 450px;
  558. display: flex;
  559. justify-content: center;
  560. align-items: center;
  561. font-size: 20px;
  562. color: #fff;
  563. }
  564. .hot_list {
  565. padding-right: 15px;
  566. margin-top: 28px;
  567. height: 450px;
  568. overflow-y: auto;
  569. .hot_listRow {
  570. cursor: pointer;
  571. border-bottom: 1px solid #fff;
  572. height: 50px;
  573. line-height: 48px;
  574. color: #fff;
  575. font-size: 16px;
  576. &:nth-of-type(1) {
  577. border-top: 1px solid #fff;
  578. }
  579. &:hover {
  580. color: #d8b275;
  581. border-bottom: 1px solid #d8b275;
  582. position: relative;
  583. &::before {
  584. content: '';
  585. position: absolute;
  586. top: -1px;
  587. left: 0;
  588. width: 100%;
  589. height: 1px;
  590. background-color: #D8B275;
  591. }
  592. }
  593. }
  594. }
  595. }
  596. }
  597. .activeHotBox {
  598. opacity: 1;
  599. pointer-events: auto;
  600. }
  601. .box1 {
  602. padding: 0 25px;
  603. width: 100%;
  604. display: flex;
  605. justify-content: space-between;
  606. .mainrr {
  607. display: flex;
  608. .row {
  609. position: relative;
  610. cursor: pointer;
  611. width: 50px;
  612. text-align: center;
  613. margin-left: 18px;
  614. color: #fff;
  615. &>img {
  616. width: 50px;
  617. }
  618. p {
  619. font-size: 12px;
  620. }
  621. .likeMove {
  622. color: #930909;
  623. position: absolute;
  624. top: 10px;
  625. width: 100%;
  626. text-align: center;
  627. }
  628. }
  629. .active2 {
  630. color: #930909;
  631. font-weight: 700;
  632. p {
  633. font-size: 12px;
  634. }
  635. }
  636. }
  637. .mainll {
  638. .row {
  639. width: 80px;
  640. margin-left: 0;
  641. }
  642. }
  643. }
  644. .box2 {
  645. overflow: hidden;
  646. transition: height 0.5s;
  647. margin-top: 5px;
  648. width: 100%;
  649. height: 170px;
  650. background-color: #d8b275;
  651. padding: 15px 25px 0;
  652. .swiper-container {
  653. cursor: grab;
  654. height: 100%;
  655. .swiper-slide {
  656. cursor: pointer;
  657. height: 120px;
  658. img {
  659. width: 100%;
  660. height: 110px;
  661. object-fit: cover;
  662. }
  663. p {
  664. text-align: center;
  665. height: 30px;
  666. line-height: 30px;
  667. color: #ffffff;
  668. font-size: 14px;
  669. }
  670. .plan {
  671. height: 4px;
  672. background-color: #930909;
  673. }
  674. .txtActive {
  675. color: #930909;
  676. }
  677. }
  678. .active {
  679. img {
  680. border: 3px solid #930909;
  681. }
  682. }
  683. }
  684. }
  685. }
  686. .shareBox {
  687. z-index: 11;
  688. position: fixed;
  689. top: 0;
  690. left: 0;
  691. width: 100%;
  692. height: 100%;
  693. opacity: 0;
  694. pointer-events: none;
  695. backdrop-filter: blur(4px);
  696. transition: opacity 0.5s;
  697. .shareMain {
  698. padding: 40px 30px 0;
  699. position: absolute;
  700. top: 50%;
  701. left: 50%;
  702. transform: translate(-50%, -50%);
  703. width: 450px;
  704. height: 650px;
  705. background-image: url("../assets/img/Goods/shareBac.png");
  706. background-size: 100% 100%;
  707. text-align: center;
  708. .close {
  709. width: 48px;
  710. height: 48px;
  711. cursor: pointer;
  712. position: absolute;
  713. right: -24px;
  714. top: -24px;
  715. background-image: url("../assets/img/Goods/shareClose.png");
  716. background-size: 100% 100%;
  717. }
  718. h3 {
  719. text-align: left;
  720. color: #d8b275;
  721. font-size: 24px;
  722. margin-bottom: 50px;
  723. }
  724. p {
  725. font-size: 20px;
  726. color: #ffffff;
  727. margin-bottom: 40px;
  728. }
  729. img {
  730. width: 240px;
  731. margin-bottom: 50px;
  732. }
  733. .btnn {
  734. cursor: pointer;
  735. width: 280px;
  736. margin: 0 auto;
  737. height: 60px;
  738. border-radius: 30px;
  739. border: 2px solid #d8b275;
  740. line-height: 58px;
  741. font-size: 20px;
  742. color: #ffffff;
  743. }
  744. }
  745. }
  746. .shareBoxShow {
  747. opacity: 1;
  748. pointer-events: auto;
  749. }
  750. </style>