wangguoyu 5 月之前
父节点
当前提交
1f80d83f65
共有 1 个文件被更改,包括 128 次插入0 次删除
  1. 128 0
      components/question/yingyu/danxuanCeshi.vue

+ 128 - 0
components/question/yingyu/danxuanCeshi.vue

@@ -0,0 +1,128 @@
+<template>
+	<view v-if="question" class="ezy-yingyu-danxuan-box">
+		<!-- 标题区域 -->
+		<view class="yingyu-danxuan-title"></view>
+		<view v-html="data.name">
+		</view>
+		<!-- 选项区域 -->
+		<view v-for="(item,index) in data.contents" class="yingyu-danxuan-option-box" :key="index">
+			<text class="option-change">{{item.number}}</text>
+			<text class="option-question">{{item.neirong}}</text>
+			<i class="yingyu-canplay-img" @click="audioCreat(item,index)"></i>
+		</view>
+	</view>
+</template>
+
+<script setup>
+	import {
+		ref,
+		reactive,
+		watch
+	} from 'vue';
+	import {
+		useQuestionTools
+	} from "../useQuestionTools"
+
+	import textReplaceIconVue from './textReplaceIcon.vue'
+
+	const {
+		getLetterByIndex
+	} = useQuestionTools();
+
+	const props = defineProps({
+		question: {
+			type: Object,
+		},
+		showError: {
+			type: Boolean,
+			default: false
+		},
+		placeholders: { // 占位符
+			type: Array,
+			required: true
+		},
+		code: {
+			type: String,
+		}
+	})
+	const data = reactive({
+		name: '', //题干数据
+		contents: [], // 选项数据
+	})
+	watch(() => props.question, (val) => formatData(val), {
+		immediate: true
+	})
+
+	function formatData(val) {
+
+		if (val) {
+			data.name = val.name;
+			data.contents = val.optList.map((item, index) => {
+
+				return {
+					neirong: item.neirong,
+					audio: item.audio,
+					number: getLetterByIndex(index)
+				}
+			})
+		}
+	}
+	let audioContext = null;
+	let isPlaying = false;
+	let currentIndex = -1;
+
+
+function initAudioContext() {
+  if (!audioContext) {
+    audioContext = uni.createInnerAudioContext();
+    
+    // 监听音频播放状态
+    audioContext.onPlay(() => {
+      isPlaying = true;
+      console.log('音频开始播放');
+    });
+    
+    audioContext.onPause(() => {
+      isPlaying = false;
+      console.log('音频暂停播放');
+    });
+    
+    audioContext.onStop(() => {
+      isPlaying = false;
+      console.log('音频停止播放');
+    });
+    
+    audioContext.onEnded(() => {
+      isPlaying = false;
+      console.log('音频播放结束');
+    });
+  }
+}
+function playAudio(src) {
+  if (!audioContext) {
+    initAudioContext();
+  }
+  audioContext.src = src;
+  audioContext.play();
+}
+function audioCreat(item, index) {
+  // 如果 index 变化了,或者当前没有音频在播放,就播放新音频
+  if (index !== currentIndex || !isPlaying) {
+    // 如果之前有音频在播放,先暂停
+    if (isPlaying) {
+      audioContext.pause();
+    }
+    // 更新当前索引和播放状态
+    currentIndex = index;
+    playAudio(item.audio);
+  } else {
+    // 如果 index 没变化且音频正在播放,就暂停音频
+    if (isPlaying) {
+      audioContext.pause();
+    } else {
+      // 如果 index 没变化但音频没播放,就播放音频
+      playAudio(item.audio);
+    }
+  }
+}
+</script>