Prechádzať zdrojové kódy

文物详情使用swiper

任一存 3 rokov pred
rodič
commit
a275e2a231

+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "yuhuatai-mobile",
-  "version": "0.1.20221028.1830",
+  "version": "0.1.20221030.1830",
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve --mode dev",
@@ -14,6 +14,7 @@
     "core-js": "^3.8.3",
     "mars3d": "3.4.1",
     "node-polyfill-webpack-plugin": "^2.0.1",
+    "swiper": "^8.4.4",
     "v-viewer": "^1.6.4",
     "vue": "^2.6.14",
     "vue-router": "^3.5.1",

BIN
src/assets/images/arrow-left.png


BIN
src/assets/images/arrow-right.png


+ 117 - 3
src/components/RelicDetail.vue

@@ -11,7 +11,7 @@
         frameborder="0"
         class="display-3d"
       />
-      <div
+      <!-- <div
         v-if="dimNumber === 2"
         v-viewer="{
           button: true,
@@ -37,7 +37,48 @@
           alt=""
           draggable="false"
         >
+      </div> -->
+
+      <div
+        v-if="dimNumber === 2"
+        class="swiper-wrapper-mine"
+      >
+        <div
+          class="swiper-root"
+        >
+          <div
+            v-viewer="{
+              button: true,
+              navbar: false,
+              title: false,
+              toolbar: false,
+              tooltip: false,
+              movable: true,
+              zoomable: true,
+              rotatable: true,
+              scalable: true,
+              transition: false,
+              fullscreen: false,
+              keyboard: true,
+              loop: false,
+            }"
+            class="swiper-wrapper"
+          >
+            <img
+              v-for="(item, index) in imageList"
+              :key="index"
+              class="swiper-slide"
+              :src="item"
+              alt=""
+              draggable="false"
+            >
+          </div>
+          <div class="swiper-pagination" />
+          <div class="swiper-button-prev" />
+          <div class="swiper-button-next" />
+        </div>
       </div>
+
       <div class="btn-group">
         <button
           @click="isShowDesc = true"
@@ -94,6 +135,9 @@
 </template>
 
 <script>
+import Swiper from 'swiper/swiper-bundle.esm.js'
+import 'swiper/swiper-bundle.css'
+
 export default {
   props: {
     id: {
@@ -113,6 +157,21 @@ export default {
     }
   },
   mounted() {
+    this.$nextTick(() => {
+      new Swiper('.swiper-root', {
+      // If we need pagination
+        pagination: {
+          el: '.swiper-pagination',
+        },
+
+        // Navigation arrows
+        navigation: {
+          nextEl: '.swiper-button-next',
+          prevEl: '.swiper-button-prev',
+        },
+      })
+    })
+
     this.title = this.$route.query.name
     this.dimNumber = this.$route.query.dimNumber
 
@@ -185,13 +244,68 @@ export default {
     > .photos {
       width: 100%;
       max-height: 60%;
-      img {
+      > img {
         width: 100%;
         height: 100%;
         object-fit: contain;
       }
     }
-    .btn-group {
+    .swiper-wrapper-mine {
+      width: calc(100% - 1.67rem * 2 - 1.83rem * 2 - 1.67rem * 2);
+      height: 60%;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      position: relative;
+      .swiper-root {
+        overflow: hidden;
+        height: 100%;
+        .swiper-wrapper {
+          // 用类选择器不会生效
+          img {
+            object-fit: contain;
+          }
+        }
+        .swiper-pagination {
+          top: 100%;
+          bottom: initial;
+          height: 0.42rem;
+          /deep/.swiper-pagination-bullet {
+            width: 5.34rem;
+            height: 0.42rem;
+            background-color: #999999;
+            margin-right: 0.79rem;
+            // background-color: #930909;
+            border-radius: initial;
+          }
+          /deep/.swiper-pagination-bullet.swiper-pagination-bullet-active {
+            background-color: #930909;
+          }
+        }
+        .swiper-button-prev {
+          left: calc(-1.67rem - 1.83rem);
+          width: 1.83rem;
+          height: 3.58rem;
+          background-image: url(@/assets/images/arrow-left.png);
+          background-size: contain;
+          &::after {
+            content: '';
+          }
+        }
+        .swiper-button-next {
+          right: calc(-1.67rem - 1.83rem);
+          width: 1.83rem;
+          height: 3.58rem;
+          background-image: url(@/assets/images/arrow-right.png);
+          background-size: contain;
+          &::after {
+            content: '';
+          }
+
+        }
+      }
+    }
+    > .btn-group {
       flex: 0 0 auto;
       > button {
         width: 6.25rem;

+ 45 - 0
src/components/TestView.vue

@@ -0,0 +1,45 @@
+<template>
+  <div class="test-view">
+    <div
+      class="swiper"
+    >
+      <!-- Additional required wrapper -->
+      <div class="swiper-wrapper">
+        <!-- Slides -->
+        <div class="swiper-slide">
+          Slide 1
+        </div>
+        <div class="swiper-slide">
+          Slide 2
+        </div>
+        <div class="swiper-slide">
+          Slide 3
+        </div>
+      </div>
+      <div class="swiper-pagination" />
+      <div class="swiper-button-prev" />
+      <div class="swiper-button-next" />
+    </div>
+  </div>
+</template>
+
+<script>
+import Swiper from 'swiper/swiper-bundle.esm.js'
+import 'swiper/swiper-bundle.css'
+export default {
+  mounted() {
+    new Swiper('.swiper', {
+      // If we need pagination
+      pagination: {
+        el: '.swiper-pagination',
+      },
+
+      // Navigation arrows
+      navigation: {
+        nextEl: '.swiper-button-next',
+        prevEl: '.swiper-button-prev',
+      },
+    })
+  }
+}
+</script>

+ 6 - 0
src/router/index.js

@@ -8,6 +8,7 @@ import SwkkView from "@/views/SwkkView.vue"
 import ObliqueView from "@/views/ObliqueView.vue"
 import PanoView from "@/views/PanoView.vue"
 import PanoList from "@/components/PanoList.vue"
+import TestView from "@/components/TestView.vue"
 
 Vue.use(VueRouter)
 
@@ -30,6 +31,11 @@ const routes = [
     }
   },
   {
+    path: '/test-view',
+    name: 'TestView',
+    component: TestView,
+  },
+  {
     path: '/swkk-fade-in',
     name: 'SwkkFadeIn',
     component: SwkkFadeIn,

+ 20 - 0
yarn.lock

@@ -4093,6 +4093,13 @@ dom-serializer@^1.0.1:
     domhandler "^4.2.0"
     entities "^2.0.0"
 
+dom7@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.npmmirror.com/dom7/-/dom7-4.0.4.tgz#8b68c5d8e5e2ed0fddb1cb93e433bc9060c8f3fb"
+  integrity sha512-DSSgBzQ4rJWQp1u6o+3FVwMNnT5bzQbMb+o31TjYYeRi05uAcpF8koxdfzeoe5ElzPmua7W7N28YJhF7iEKqIw==
+  dependencies:
+    ssr-window "^4.0.0"
+
 domain-browser@^4.22.0:
   version "4.22.0"
   resolved "https://r2.cnpmjs.org/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f"
@@ -7365,6 +7372,11 @@ sprintf-js@~1.0.2:
   resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
 
+ssr-window@^4.0.0, ssr-window@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/ssr-window/-/ssr-window-4.0.2.tgz#dc6b3ee37be86ac0e3ddc60030f7b3bc9b8553be"
+  integrity sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==
+
 ssri@^8.0.1:
   version "8.0.1"
   resolved "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
@@ -7545,6 +7557,14 @@ svgo@^2.7.0:
     picocolors "^1.0.0"
     stable "^0.1.8"
 
+swiper@^8.4.4:
+  version "8.4.4"
+  resolved "https://registry.npmmirror.com/swiper/-/swiper-8.4.4.tgz#868ccad5384624e84143b469c75bc54ba004e668"
+  integrity sha512-jA/8BfOZwT8PqPSnMX0TENZYitXEhNa7ZSNj1Diqh5LZyUJoBQaZcqAiPQ/PIg1+IPaRn/V8ZYVb0nxHMh51yw==
+  dependencies:
+    dom7 "^4.0.4"
+    ssr-window "^4.0.2"
+
 table@^6.0.9:
   version "6.8.0"
   resolved "https://registry.npmmirror.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"