useYoutubePlayer.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { ref } from "vue";
  2. type Player = {
  3. error: boolean;
  4. errorMessage: string;
  5. player: any;
  6. paused: boolean;
  7. playerReady: boolean;
  8. autoPlayed: boolean;
  9. duration: string;
  10. currentTime: number;
  11. playbackRate: number;
  12. videoNote: string;
  13. volume: number;
  14. muted: boolean;
  15. showRateDropdown: boolean;
  16. };
  17. export const useYoutubePlayer = () => {
  18. const player = ref<Player>({
  19. error: false,
  20. errorMessage: "",
  21. player: null,
  22. paused: true,
  23. playerReady: false,
  24. autoPlayed: false,
  25. duration: "0.000",
  26. currentTime: 0,
  27. playbackRate: 1,
  28. videoNote: "",
  29. volume: 0,
  30. muted: false,
  31. showRateDropdown: false
  32. });
  33. const updatePlayer = _player => {
  34. player.value = Object.assign(player.value, _player);
  35. };
  36. const loadVideoById = id => {
  37. player.value.player.loadVideoById(id);
  38. };
  39. const playVideo = () => {
  40. if (player.value.player && player.value.player.playVideo) {
  41. player.value.player.playVideo();
  42. }
  43. player.value.paused = false;
  44. };
  45. const pauseVideo = () => {
  46. if (player.value.player && player.value.player.pauseVideo) {
  47. player.value.player.pauseVideo();
  48. }
  49. player.value.paused = true;
  50. };
  51. const stopVideo = () => {
  52. if (player.value.player && player.value.player.pauseVideo) {
  53. player.value.player.pauseVideo();
  54. player.value.player.seekTo(0);
  55. }
  56. };
  57. const setPlaybackRate = (rate?: number) => {
  58. if (typeof rate === "number") {
  59. player.value.playbackRate = rate;
  60. player.value.player.setPlaybackRate(rate);
  61. } else if (
  62. player.value.player.getPlaybackRate() !== undefined &&
  63. player.value.playbackRate !== player.value.player.getPlaybackRate()
  64. ) {
  65. player.value.player.setPlaybackRate(player.value.playbackRate);
  66. player.value.playbackRate = player.value.player.getPlaybackRate();
  67. }
  68. };
  69. return {
  70. player,
  71. updatePlayer,
  72. loadVideoById,
  73. playVideo,
  74. pauseVideo,
  75. stopVideo,
  76. setPlaybackRate
  77. };
  78. };