learnContent.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <view>
  3. <!-- 单词区 -->
  4. <selectWordsVue :active-words="activeWords" :activeWord="activeWord"></selectWordsVue>
  5. <selectTypesVue activeSelect="1"></selectTypesVue>
  6. <view>{{activeWord.name}}</view>
  7. <view>{{activeWord.yinbiao}}</view>
  8. <view @click="playMainAudio">{{activeWord.yinpin}}</view>
  9. <view>{{activeWord.jianyi}}</view>
  10. <view @click="goXiangjie">详解 ></view>
  11. <view v-for="(item,index) in activeWord.yinjie" :key="index">
  12. <view>{{item.cigen}}</view>
  13. <view>{{item.yinbiao}}</view>
  14. <view>{{item.yinpin}}</view>
  15. </view>
  16. <view>自然拼读</view>
  17. <view>音节拆分</view>
  18. <view v-if="tabFlag ==1">
  19. <view>词根助记</view>
  20. <view>
  21. {{activeWord.cigen}}
  22. </view>
  23. </view>
  24. <view @click="clearFun">
  25. asdfasdfasfasdfdasdfasdfasfadsfasdfadsfasdfasd
  26. </view>
  27. </view>
  28. </template>
  29. <script setup>
  30. import selectWordsVue from './selectWords.vue';
  31. import selectTypesVue from './selectTypes.vue';
  32. import audioManager from './audioManager'
  33. import {
  34. reactive,
  35. ref,
  36. onMounted
  37. } from 'vue';
  38. const props = defineProps({
  39. activeWord: {
  40. type: Object,
  41. },
  42. pageData: {
  43. type: Object,
  44. },
  45. activeWords: {
  46. type: Array
  47. },
  48. })
  49. let tabFlag = ref(1)
  50. // setTimeout(() => {
  51. // console.log('activeWord',props.activeWord)
  52. // })
  53. const goXiangjie = () => {
  54. uni.redirectTo({
  55. url: '/pages/newEnglish/components/xiangjie?jieId='+props.pageData.jieId+'&wordId='+props.pageData.activeId
  56. })
  57. }
  58. const audioInfo = ref(null)
  59. // 初始化并缓存音频
  60. const initAudio = async () => {
  61. // 1. 从缓存获取已有信息
  62. const cachedInfo = audioManager.getAudioInfoFromStorage(props.activeWord.id)
  63. if (cachedInfo) {
  64. audioInfo.value = cachedInfo
  65. }
  66. // 2. 预加载所有音频(无论是否已有缓存)
  67. await audioManager.cacheWordAudios(props.activeWord)
  68. // 3. 更新音频信息
  69. audioInfo.value = audioManager.getAudioInfoFromStorage(props.activeWord.id)
  70. }
  71. // 播放主音频
  72. const playMainAudio = () => {
  73. if (audioInfo.value && audioInfo.value.main) {
  74. audioManager.playAudio(audioInfo.value.main)
  75. }
  76. }
  77. // 播放音节音频
  78. const playSyllable = (syllable) => {
  79. audioManager.playAudio(syllable)
  80. }
  81. // 播放频度音频
  82. const playFrequency = (frequency) => {
  83. audioManager.playAudio(frequency)
  84. }
  85. const clearFun = (frequency) => {
  86. audioManager.clearAllCache()
  87. }
  88. onMounted(() => {
  89. initAudio()
  90. })
  91. </script>
  92. <style>
  93. </style>