Greasy Fork镜像 支持简体中文。

NicoWheelVolume

マウスのボタン+ホイールで、どこでも音量調整 for ニコニコ動画とYouTube

  1. // ==UserScript==
  2. // @name NicoWheelVolume
  3. // @namespace https://github.com/segabito/
  4. // @description マウスのボタン+ホイールで、どこでも音量調整 for ニコニコ動画とYouTube
  5. // @include http://www.nicovideo.jp/watch/*
  6. // @include http://www.youtube.com/watch*
  7. // @include https://www.youtube.com/watch*
  8. // @version 1.1.1
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. // * ver 1.1.1
  13. // - https://~ 追加
  14.  
  15. // * ver 1.1.0
  16. // - 便利だったのでYouTubeにも対応した
  17.  
  18. // TODO: Chrome対応
  19.  
  20. (function(window) {
  21. var document = window.document;
  22.  
  23. var monkey = function() {
  24. var player = null;
  25. function getPlayer() {
  26. if (player) return player;
  27.  
  28. if (window.WatchApp) {
  29. return player = document.getElementById('external_nicoplayer');
  30. } else
  31. if (window.yt) {
  32. return player = document.getElementById('movie_player');
  33. } else {
  34. return player = document.getElementById('flvplayer');
  35. }
  36. }
  37. function getSiteType() {
  38. if (location.host.indexOf('nicovideo') >= 0) {
  39. return 'niconico';
  40. } else {
  41. return 'youtube';
  42. }
  43. }
  44. function volume(v) {
  45. var site = getSiteType(), player = getPlayer();
  46.  
  47. if (!player) return;
  48.  
  49. if (site === 'niconico') {
  50. if (typeof v === 'number') {
  51. player.ext_setVolume(Math.max(0, Math.min(v * 1, 100)));
  52. }
  53. return player.ext_getVolume();
  54. } else {
  55. if (typeof v === 'number') {
  56. player.setVolume(Math.max(0, Math.min(v * 1, 100)));
  57. }
  58. return player.getVolume();
  59. }
  60. }
  61.  
  62. var isChanged = false;
  63. document.body.addEventListener('wheel', function(e) {
  64. if (typeof e.buttons === 'number') {
  65. if (e.buttons < 1) return;
  66. } else {
  67. return;
  68. }
  69. // なんで固定値じゃなくて比率で増減するの?について
  70. //
  71. // 投稿動画は動画ごとの音量が統一されていないため、
  72. // 音量最大付近でもよく聞こえない動画もあれば、音量最小付近でもうるさい動画もある。
  73. // 固定値による増減だと、後者の音量を調節しづらいので、現在値からの比率で増減させる。
  74. //
  75. //
  76. // なんで音量アップと音量ダウンの比率が異なるの?について
  77. //
  78. // 音量を下げる時は「うわっ音でけぇ!」
  79. // 音量を上げる時は「ちょっと上げようかな?」
  80. // という場面が多いので、下げる速度のほうが速い。
  81. // (とはいえ、これが最適だ!という比率を計算したわけではない。適当)
  82. //
  83. var v = volume(), delta = e.deltaY * -1;
  84. isChanged = true;
  85. if (delta > 0) {
  86. v = Math.max(v, 1);
  87. r = (v < 5) ? 1.3 : 1.1;
  88. v = volume(v * r);
  89. } else {
  90. v = volume(Math.floor(v / 1.2));
  91. }
  92. e.preventDefault();
  93. }, false);
  94. document.body.addEventListener('contextmenu', function (e) {
  95. if (isChanged) {
  96. e.preventDefault();
  97. }
  98. isChanged = false;
  99. }, false);
  100. };
  101.  
  102. var script = document.createElement("script");
  103. script.setAttribute("type", "text/javascript");
  104. script.appendChild(document.createTextNode("(" + monkey + ")()"));
  105. document.body.appendChild(script);
  106. })(unsafeWindow || window);

QingJ © 2025

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