useAudio.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import {
  2. reactive,
  3. ref
  4. } from 'vue';
  5. import { onHide, onUnload} from "@dcloudio/uni-app"
  6. export function useAudio (url) {
  7. const innerAudioContext = ref(null);
  8. function createAudio() {
  9. const innerAudioContext = uni.createInnerAudioContext();
  10. innerAudioContext.autoplay = false;
  11. innerAudioContext.src = url;
  12. innerAudioContext.onPlay(() => {
  13. // 播放
  14. uni.$emit('play-audio');
  15. });
  16. innerAudioContext.onError((res) => {
  17. uni.$emit('play-error')
  18. });
  19. innerAudioContext.onEnded(() => {
  20. // 播放结束
  21. uni.$emit('play-audio-ended')
  22. })
  23. return innerAudioContext;
  24. }
  25. onHide(() => {
  26. innerAudioContext.value.stop();
  27. })
  28. onUnload(() => {
  29. innerAudioContext.value.stop();
  30. })
  31. // 展开食物停止播放
  32. uni.$on('swiper-change', () => {
  33. innerAudioContext.value.stop();
  34. })
  35. innerAudioContext.value = createAudio();
  36. function handlePlay() {
  37. innerAudioContext.value.destroy();
  38. innerAudioContext.value = null;
  39. innerAudioContext.value = createAudio();
  40. innerAudioContext.value.play()
  41. }
  42. return {
  43. innerAudioContext,
  44. handlePlay
  45. }
  46. }