黄金右键

按住"→"键倍速播放, 松开"→"键恢复原样, 灵活追剧看视频~ 支持b站、YouTube、腾讯视频、优酷...

目前为 2021-06-10 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 黄金右键
  3. // @description 按住"→"键倍速播放, 松开"→"键恢复原样, 灵活追剧看视频~ 支持b站、YouTube、腾讯视频、优酷...
  4. // @namespace http://tampermonkey.net/
  5. // @version 1.0.5
  6. // @author SkyJin
  7. // @include http://*
  8. // @include https://*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. 'use strict';
  14.  
  15. let down_count = 0
  16. const faster_rate = 3
  17. let normal_rate = 1
  18. const add_time = 7
  19. let page_video
  20.  
  21. const tryPageVideo = () => Array.prototype.find.call(document.getElementsByTagName('video'), e => e.offsetWidth > 9)
  22. const getPageVideo = () => {
  23. return new Promise(resolve => {
  24. const timer = setInterval(() => {
  25. const page_video = tryPageVideo()
  26. if (page_video) {
  27. clearInterval(timer)
  28. resolve(page_video)
  29. }
  30. }, 500);
  31. })
  32. };
  33. const checkPageVideo = async () => {
  34. if (page_video.offsetWidth <= 9) {
  35. page_video = await getPageVideo()
  36. if (page_video.offsetWidth <= 9) {
  37. console.error('播放器检查失败,请检查当前页面是否存在html5播放器')
  38. return false
  39. }
  40. }
  41. return true
  42. }
  43. const relativeEvent = {
  44. _stopper: e => e.stopPropagation(),
  45. // 目前针对腾讯视频
  46. shouldPrevent: location.origin.indexOf('qq.com') > -1 || location.origin.indexOf('wetv.vip') > -1,
  47. prevent () {
  48. document.body.addEventListener('ratechange', this._stopper, true)
  49. document.body.addEventListener('timeupdate', this._stopper, true)
  50. },
  51. allow () {
  52. document.body.removeEventListener('ratechange', this._stopper, true)
  53. document.body.removeEventListener('timeupdate', this._stopper, true)
  54. }
  55. }
  56. const downEvent = async e => {
  57. if (e.keyCode !== 39) return
  58. e.stopPropagation()
  59.  
  60. // 计数+1
  61. down_count++
  62.  
  63. // 长按右键-开始
  64. if (down_count === 2 && await checkPageVideo()) {
  65. relativeEvent.shouldPrevent && relativeEvent.prevent()
  66. normal_rate = page_video.playbackRate
  67. page_video.playbackRate = faster_rate
  68. console.log('加速播放中')
  69. }
  70. }
  71. const upEvent = async e => {
  72. if (e.keyCode !== 39) return
  73. e.stopPropagation()
  74.  
  75. // 单击右键时
  76. if (down_count === 1 && await checkPageVideo()) {
  77. page_video.currentTime += add_time
  78. console.log('前进' + add_time + '秒')
  79. }
  80.  
  81. // 长按右键-结束
  82. if (page_video.playbackRate !== normal_rate) {
  83. page_video.playbackRate = normal_rate
  84. relativeEvent.shouldPrevent && relativeEvent.allow()
  85. }
  86.  
  87. // 计数-重置
  88. down_count = 0
  89. }
  90. const init = async () => {
  91. page_video = await getPageVideo()
  92. document.body.addEventListener('keydown', downEvent, true)
  93. document.body.parentElement.addEventListener('keyup', upEvent, true)
  94. }
  95.  
  96. init()
  97. })();