liushengqiang il y a 1 an
Parent
commit
9a8cfdae2d

+ 15 - 15
package-lock.json

@@ -25,7 +25,7 @@
         "vant": "^4.1.2",
         "vue": "^3.2.47",
         "vue-router": "^4.1.6",
-        "vue3-lottie": "^2.5.0",
+        "vue3-lottie": "^2.7.4",
         "ws": "^8.13.0"
       },
       "devDependencies": {
@@ -3995,9 +3995,9 @@
       "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ=="
     },
     "node_modules/lottie-web": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.11.0.tgz",
-      "integrity": "sha512-9vSt0AtdOH98GKDXwD5LPfFg9Pcmxt5+1BllAbudKM5iqPxpJnJUfuGaP45OyudDrESCOBgsjnntVUTygBNlzw=="
+      "version": "5.12.2",
+      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz",
+      "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg=="
     },
     "node_modules/lower-case": {
       "version": "2.0.2",
@@ -5244,12 +5244,12 @@
       }
     },
     "node_modules/vue3-lottie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/vue3-lottie/-/vue3-lottie-2.5.0.tgz",
-      "integrity": "sha512-JwlTzykr4ofPnSXsTAPt571RDrtQNy66H8w/zYBVHNgrCRG4RINI30c/oJx3Dj+XpxuktpKzgfI08tv1FjYkAQ==",
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/vue3-lottie/-/vue3-lottie-2.7.4.tgz",
+      "integrity": "sha512-EJATgpaWXyqdKxaSY2Q3lK4tTkxTSssKTqBmsIEG7Yj8jT75RGF6zhsoBc/kT10X41vt2HEpjPYmEQfKt6JfOw==",
       "dependencies": {
         "lodash-es": "^4.17.21",
-        "lottie-web": "^5.8.1"
+        "lottie-web": "5.12.2"
       },
       "engines": {
         "node": ">=12"
@@ -8137,9 +8137,9 @@
       "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ=="
     },
     "lottie-web": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.11.0.tgz",
-      "integrity": "sha512-9vSt0AtdOH98GKDXwD5LPfFg9Pcmxt5+1BllAbudKM5iqPxpJnJUfuGaP45OyudDrESCOBgsjnntVUTygBNlzw=="
+      "version": "5.12.2",
+      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz",
+      "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg=="
     },
     "lower-case": {
       "version": "2.0.2",
@@ -9048,12 +9048,12 @@
       }
     },
     "vue3-lottie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/vue3-lottie/-/vue3-lottie-2.5.0.tgz",
-      "integrity": "sha512-JwlTzykr4ofPnSXsTAPt571RDrtQNy66H8w/zYBVHNgrCRG4RINI30c/oJx3Dj+XpxuktpKzgfI08tv1FjYkAQ==",
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/vue3-lottie/-/vue3-lottie-2.7.4.tgz",
+      "integrity": "sha512-EJATgpaWXyqdKxaSY2Q3lK4tTkxTSssKTqBmsIEG7Yj8jT75RGF6zhsoBc/kT10X41vt2HEpjPYmEQfKt6JfOw==",
       "requires": {
         "lodash-es": "^4.17.21",
-        "lottie-web": "^5.8.1"
+        "lottie-web": "5.12.2"
       }
     },
     "webidl-conversions": {

+ 1 - 1
package.json

@@ -25,7 +25,7 @@
     "vant": "^4.1.2",
     "vue": "^3.2.47",
     "vue-router": "^4.1.6",
-    "vue3-lottie": "^2.5.0",
+    "vue3-lottie": "^2.7.4",
     "ws": "^8.13.0"
   },
   "devDependencies": {

+ 12 - 0
src/page-instrument/view-figner/index.module.less

@@ -409,6 +409,18 @@
     padding: 0 10px 6px 10px;
 }
 
+.loading{
+    position: absolute;
+    left: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 5;
+}
+
 
 .imgs {
     position: relative;

+ 30 - 8
src/page-instrument/view-figner/index.tsx

@@ -22,12 +22,14 @@ import { Howl } from "howler";
 import { storeData } from "/src/store";
 import { api_back } from "/src/helpers/communication";
 import Hammer from "hammerjs";
-import { Button, Icon, Popup, Space } from "vant";
+import { Button, Icon, Loading, Popup, Space } from "vant";
 import GuideIndex from "./guide/guide-index";
 import { getQuery } from "/src/utils/queryString";
 import { browser } from "/src/utils";
 import { usePageVisibility } from "@vant/use";
 import { watch } from "vue";
+import { Vue3Lottie } from "vue3-lottie";
+import refesh_anim from "./refresh_anim.json";
 
 export default defineComponent({
 	name: "viewFigner",
@@ -71,6 +73,7 @@ export default defineComponent({
 			tips: [] as IFIGNER_INSTRUMENT_Note[],
 
 			tnoteShow: false,
+			loadingSoundFonts: true,
 		});
 		const fingerData = reactive({
 			relationshipIndex: 0,
@@ -103,20 +106,31 @@ export default defineComponent({
 			console.log("🚀 ~ subject:", subject);
 			fingerData.subject = await getFingeringConfig(subject);
 		};
-		const getSounFonts = () => {
+		const createAudio = (url: string) => {
+			return new Promise((resolve) => {
+				const noteAudio = new Howl({
+					src: url,
+					loop: true,
+					onload: () => {
+						resolve(noteAudio);
+					},
+				});
+			});
+		};
+		const getSounFonts = async () => {
 			const pathname = /(192|localhost)/.test(location.origin) ? "/" : location.pathname;
+			data.loadingSoundFonts = true;
 			for (let i = 0; i < data.notes.length; i++) {
 				const note = data.notes[i];
-				// console.log("🚀 ~ note:", i)
+				// console.log("🚀 ~ note:", i);
 				let url = `${pathname}soundfonts/${data.subject}/`;
 				url += note.realName;
 				url += ".mp3";
-				const noteAudio = new Howl({
-					src: url,
-					loop: true,
-				});
-				data.soundFonts[note.realKey] = noteAudio;
+				data.soundFonts[note.realKey] = await createAudio(url);
 			}
+			setTimeout(() => {
+				data.loadingSoundFonts = false;
+			}, 300)
 			// console.log("🚀 ~ data.soundFonts:", data.soundFonts);
 		};
 		onBeforeMount(() => {
@@ -411,6 +425,14 @@ export default defineComponent({
 								))}
 							</div>
 						</div>
+						{data.loadingSoundFonts && (
+							<div class={styles.loading}>
+								<Vue3Lottie
+									style={{ width: "100px", height: "100px" }}
+									animationData={refesh_anim}
+								></Vue3Lottie>
+							</div>
+						)}
 					</div>
 					{!!data.tones.length && (
 						<>

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
src/page-instrument/view-figner/refresh_anim.json


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff