鱼派播放器增强

鱼派播放器增强版!优化使用体验!

  1. // ==UserScript==
  2. // @name 鱼派播放器增强
  3. // @namespace https://github.com/HereIsYui
  4. // @version 1.0.0
  5. // @description 鱼派播放器增强版!优化使用体验!
  6. // @author Yui
  7. // @match https://fishpi.cn/cr
  8. // @icon https://assets.yuimeta.com/music/favicon.png
  9. // @grant GM_addStyle
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // Your code here...
  17. GM_addStyle('#musicBox{bottom: -50px !important;height:50px !important;} #musicBox.show{bottom:0 !important;} .music-box{height:40px !important;} .music-controller{width:120px !important} .music-detail{height:40px !important}');
  18. let playEle = document.querySelector('.music-box');
  19. let detailEle = document.querySelector('.music-detail');
  20. let controllerEle = document.querySelector('.music-box>.music-controller');
  21. let lastControllerEle = document.querySelectorAll('.music-controller');
  22. lastControllerEle = lastControllerEle[lastControllerEle.length-1]
  23. // 添加个播放按钮
  24. let playHTML = document.createElement('div');
  25. playHTML.className="music-play";
  26. playHTML.innerHTML = '<img class="music-play-icon" src="https://assets.yuimeta.com/music/circle_play.png" alt="">';
  27. playHTML.onclick = function(){ChatRoom.playSound.togglePlay()};
  28. controllerEle.insertBefore(playHTML,controllerEle.lastElementChild);
  29. // 添加个封面
  30. let coverHTML = document.createElement('div');
  31. coverHTML.className="music-img";
  32. coverHTML.innerHTML = '<img class="music-img-item" src="https://assets.yuimeta.com/music/cat.gif" alt="">';
  33. playEle.insertBefore(coverHTML,detailEle);
  34. // 添加音量控制
  35. let volumeHTML = document.createElement('div');
  36. volumeHTML.className="music-voice";
  37. volumeHTML.style="padding: 2px;box-sizing: border-box";
  38. volumeHTML.innerHTML = '<img class="music-voice-icon" src="https://assets.yuimeta.com/music/volume_3.png" alt=""><div class="music-voice-box"><input type="range" value="100" max="100" min="0" onchange="ChatRoom.playSound.changeVoice(this)"></div>'
  39. lastControllerEle.prepend(volumeHTML);
  40. // 覆盖原本的播放事件
  41. ChatRoom.playSound.init = function(){
  42. let radioEle = document.querySelector('#music-core-item');
  43. let playIcon = document.querySelector('.music-play-icon');
  44. let playBox = document.querySelector('.music-box');
  45. let currentEle = document.querySelector('.music-current');
  46. let durationEle = document.querySelector('.music-duration');
  47. let titleEle = document.querySelector('.music-title');
  48. let coverEle = document.querySelector('.music-img-item');
  49. this.ele = radioEle;
  50. radioEle.addEventListener('ended',()=>{
  51. // console.log('播放完成');
  52. this.playing = false;
  53. clearInterval(this.timer);
  54. playIcon.src = 'https://assets.yuimeta.com/music/circle_play.png';
  55. playBox.classList.remove('playing');
  56. this.autoNext();
  57. });
  58. radioEle.addEventListener('play',()=>{
  59. // console.log('播放');
  60. playIcon.src = 'https://assets.yuimeta.com/music/circle_pause.png';
  61. playBox.classList.add('playing');
  62. this.timer = setInterval(()=>{
  63. currentEle.innerHTML = this.secondsToTime(this.ele.currentTime);
  64. });
  65. });
  66. radioEle.addEventListener('pause',()=>{
  67. // console.log('暂停');
  68. clearInterval(this.timer);
  69. playIcon.src = 'https://assets.yuimeta.com/music/circle_play.png';
  70. playBox.classList.remove('playing');
  71. });
  72. radioEle.addEventListener('canplay',()=>{
  73. // console.log('加载完成');
  74. currentEle.innerHTML = this.secondsToTime(this.ele.currentTime);
  75. durationEle.innerHTML = this.secondsToTime(this.ele.duration);
  76. titleEle.innerHTML = this.list[this.index].title;
  77. let cover = this.list[this.index].cover;
  78. coverEle.src = cover === '' ? 'https://assets.yuimeta.com/music/cat.gif' : cover;
  79. });
  80. },
  81. ChatRoom.playSound.play = function(e){
  82. let music = e.parentElement.dataset;
  83. this.add(e,false);
  84. if(!music.source.startsWith('http://music.163.com/song')){
  85. music.source = "http://music.163.com/song/media/outer/url?id=" + music.source;
  86. }
  87. this.ele.src = music.source;
  88. this.playing = false;
  89. this.togglePlay();
  90. !this.isShow && this.show();
  91. }
  92. ChatRoom.playSound.playIndex = function(idx){
  93. if(!this.list[idx].source.startsWith('http://music.163.com/song')){
  94. this.list[idx].source = "http://music.163.com/song/media/outer/url?id=" + this.list[idx].source;
  95. }
  96. this.ele.src = this.list[idx].source;
  97. this.playing = false;
  98. this.index = idx;
  99. this.togglePlay();
  100. }
  101. ChatRoom.playSound.togglePlay = function(){
  102. this.playing = !this.playing;
  103. if(this.playing){
  104. this.ele.play();
  105. }else{
  106. this.ele.pause();
  107. }
  108. }
  109. ChatRoom.playSound.changeVoice = function(voice){
  110. // console.log(voice.value);
  111. let volume = voice.value;
  112. let volumeEle = document.querySelector('.music-voice-icon');
  113. if(volume > 80){
  114. volumeEle.src = 'https://assets.yuimeta.com/music/volume_3.png';
  115. }else if(volume > 30){
  116. volumeEle.src = 'https://assets.yuimeta.com/music/volume_2.png';
  117. }else if(volume > 0){
  118. volumeEle.src = 'https://assets.yuimeta.com/music/volume_1.png';
  119. }else{
  120. volumeEle.src = 'https://assets.yuimeta.com/music/volume_off.png';
  121. }
  122. this.ele.volume = volume / 100;
  123. }
  124. ChatRoom.playSound.init();
  125. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址