Img.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <div class="Img">
  3. <div class="txt">
  4. <h3>{{ info.name }}</h3>
  5. <p v-show="info.age">年代:{{ info.age }}</p>
  6. <p v-show="info.sort">类别:{{ info.sort }}</p>
  7. <p v-show="info.size">尺寸:<span v-html="info.size"></span></p>
  8. <p v-show="info.grain">质地:{{ info.grain }}</p>
  9. <p v-show="info.estate">级别:{{ info.estate }}</p>
  10. </div>
  11. <div class="close" @click="$emit('close')"></div>
  12. <viewer class="viewerCla" ref="viewer" :images="lookPics">
  13. <img :src="lookPics[0]" alt="" />
  14. </viewer>
  15. <template v-if="info.imgNum>1">
  16. <div class="imgMain">
  17. <div class="swiper-container">
  18. <div class="swiper-wrapper">
  19. <div class="swiper-slide" v-for="i in info.imgNum" :key="i"
  20. @click="lookImg(`goodsData/2D/${info.bs} (${i}).jpg`)">
  21. <img v-lazy="`goodsData/2D/${info.bs} (${i}).jpg`" alt="" />
  22. </div>
  23. </div>
  24. </div>
  25. <div class="swiper-button-prev swiper-button-white"></div>
  26. <div class="swiper-button-next swiper-button-white"></div>
  27. </div>
  28. <div class="swiper-pagination"></div>
  29. </template>
  30. <div class="imgMain2" v-else>
  31. <img v-lazy="`goodsData/2D/${info.bs}.jpg`" alt="" @click="lookImg(`goodsData/2D/${info.bs}.jpg`)" />
  32. </div>
  33. </div>
  34. </template>
  35. <script>
  36. import Swiper from "@/assets/Swiper/swiper.js";
  37. export default {
  38. name: "Img",
  39. //import引入的组件需要注入到对象中才能使用
  40. components: {},
  41. props: {
  42. info: {
  43. type: Object,
  44. default: () => { },
  45. },
  46. },
  47. data() {
  48. //这里存放数据
  49. return {
  50. lookPics: [],
  51. };
  52. },
  53. //监听属性 类似于data概念
  54. computed: {},
  55. //监控data中的数据变化
  56. watch: {},
  57. //方法集合
  58. methods: {
  59. // 点击查看大图
  60. lookImg(url) {
  61. let dom = this.$refs.viewer.$viewer;
  62. this.lookPics = [url];
  63. dom.show();
  64. },
  65. },
  66. //生命周期 - 创建完成(可以访问当前this实例)
  67. created() { },
  68. //生命周期 - 挂载完成(可以访问DOM元素)
  69. mounted() {
  70. if (this.info.imgNum) {
  71. new Swiper(".swiper-container", {
  72. slidesPerView: 1,
  73. // 如果需要前进后退按钮
  74. navigation: {
  75. nextEl: ".swiper-button-next",
  76. prevEl: ".swiper-button-prev",
  77. },
  78. pagination: {
  79. el: ".swiper-pagination",
  80. type: "fraction",
  81. },
  82. });
  83. }
  84. },
  85. beforeCreate() { }, //生命周期 - 创建之前
  86. beforeMount() { }, //生命周期 - 挂载之前
  87. beforeUpdate() { }, //生命周期 - 更新之前
  88. updated() { }, //生命周期 - 更新之后
  89. beforeDestroy() { }, //生命周期 - 销毁之前
  90. destroyed() { }, //生命周期 - 销毁完成
  91. activated() { }, //如果页面有keep-alive缓存功能,这个函数会触发
  92. };
  93. </script>
  94. <style lang='less' scoped>
  95. @import "../../../assets/Swiper/swiper.css";
  96. .viewerCla img {
  97. display: none;
  98. }
  99. .Img {
  100. position: fixed;
  101. top: 0;
  102. left: 0;
  103. width: 100%;
  104. height: 100%;
  105. background-image: url("../../../assets/img/Goods/GoodsBac.png");
  106. background-size: 100% 100%;
  107. .swiper-pagination {
  108. width: 100%;
  109. bottom: 40px;
  110. }
  111. /deep/.swiper-pagination-bullet {
  112. margin: 0 4px;
  113. background-color: #930909;
  114. }
  115. .txt {
  116. position: absolute;
  117. top: 44px;
  118. left: 40px;
  119. width: 300px;
  120. h3 {
  121. font-size: 20px;
  122. color: #930909;
  123. line-height: 28px;
  124. }
  125. p {
  126. font-size: 16px;
  127. color: #666666;
  128. margin: 15px 0;
  129. }
  130. }
  131. .close {
  132. position: absolute;
  133. width: 60px;
  134. height: 60px;
  135. cursor: pointer;
  136. top: 44px;
  137. right: 40px;
  138. background-image: url("../../../assets/img/Goods/close2.png");
  139. background-size: 100% 100%;
  140. }
  141. .imgMain {
  142. position: absolute;
  143. top: 50%;
  144. left: 50%;
  145. transform: translate(-50%, -50%);
  146. width: 1400px;
  147. height: 600px;
  148. .swiper-button-next {
  149. outline: none;
  150. width: 40px;
  151. height: 60px;
  152. background-image: url("../../../assets/img/Goods/right.png");
  153. background-size: 100% 100%;
  154. color: transparent;
  155. }
  156. .swiper-button-prev {
  157. outline: none;
  158. width: 40px;
  159. height: 60px;
  160. background-image: url("../../../assets/img/Goods/left.png");
  161. background-size: 100% 100%;
  162. color: transparent;
  163. }
  164. }
  165. .imgMain2 {
  166. position: absolute;
  167. top: 50%;
  168. left: 50%;
  169. transform: translate(-50%, -50%);
  170. width: 1400px;
  171. height: 600px;
  172. text-align: center;
  173. &>img {
  174. cursor: pointer;
  175. width: 900px;
  176. height: 600px;
  177. object-fit: contain;
  178. }
  179. }
  180. .swiper-container {
  181. width: 900px;
  182. height: 600px;
  183. margin: 0 auto;
  184. .swiper-slide {
  185. width: 900px;
  186. height: 600px;
  187. &>img {
  188. cursor: pointer;
  189. width: 100%;
  190. height: 100%;
  191. object-fit: contain;
  192. }
  193. }
  194. }
  195. }
  196. </style>