index.js 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { ref } from 'vue';
  2. import createStore from '@zjxpcyc/vue-tiny-store';
  3. const useAudio = () => {
  4. const audioRef = ref();
  5. const audioSrc = ref();
  6. const playing = ref(false);
  7. const setAudio = audio => audioRef.value = audio;
  8. const isCurrent = src => audioSrc.value === src;
  9. const play = (src) => {
  10. if (audioRef.value) {
  11. if (!isCurrent(src)) {
  12. if (playing.value) {
  13. playing.value = false;
  14. stop();
  15. }
  16. audioSrc.value = src;
  17. audioRef.value.src = src;
  18. }
  19. if (playing.value) return;
  20. audioRef.value.play();
  21. playing.value = true;
  22. }
  23. }
  24. const stop = () => {
  25. if (audioRef.value) {
  26. audioRef.value.pause();
  27. playing.value = false;
  28. }
  29. }
  30. const toggle = (src) => {
  31. if (isCurrent(src)) {
  32. if (playing.value) {
  33. stop();
  34. } else {
  35. play(src);
  36. }
  37. } else {
  38. play(src);
  39. }
  40. }
  41. const stopCheck = src => {
  42. if (!isCurrent(src) && playing.value) {
  43. stop();
  44. }
  45. }
  46. const onEnded = () => {
  47. playing.value = false;
  48. }
  49. return {
  50. setAudio,
  51. playing,
  52. audioSrc,
  53. isCurrent,
  54. play,
  55. stop,
  56. toggle,
  57. stopCheck,
  58. onEnded,
  59. }
  60. };
  61. const useMap = () => {
  62. const isReady = ref(false);
  63. const updateIsReady = (val) => {
  64. isReady.value = val;
  65. }
  66. return [isReady, updateIsReady];
  67. }
  68. const store = createStore({ audio: useAudio, map: useMap });
  69. export default store;