Rutube custom seek time

Скрипт, задающий время перемотки по нажатию стрелок на клавиатуре

目前为 2024-11-11 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Rutube custom seek time
  3. // @description Скрипт, задающий время перемотки по нажатию стрелок на клавиатуре
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.0.2
  6. // @author 4ndefined
  7. // @run-at document-end
  8. // @match *://rutube.ru/*
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=rutube.ru
  10. // @grant none
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. // Время перемотки в секундах
  18. const SEEK_SECONDS = 5;
  19.  
  20. // Исправление размера видео (вкл = 1, выкл = 0)
  21. const ENABLE_STYLES_FIX = 1;
  22.  
  23. const video = document.querySelector('[data-testid="video-portal"]');
  24.  
  25. window.addEventListener('keydown', vidCtrl, true);
  26.  
  27. if (ENABLE_STYLES_FIX) {
  28. injectStyles();
  29. }
  30.  
  31. function vidCtrl(e) {
  32. const vid = document.querySelector('video');
  33. const key = e.code;
  34.  
  35. e.preventDefault();
  36. e.stopImmediatePropagation();
  37.  
  38. if (key === 'ArrowLeft') {
  39. vid.currentTime -= SEEK_SECONDS;
  40. if (vid.currentTime < 0) {
  41. vid.pause();
  42. vid.currentTime = 0;
  43. }
  44. } else if (key === 'ArrowRight') {
  45. vid.currentTime += SEEK_SECONDS;
  46. if (vid.currentTime > vid.duration) {
  47. vid.pause();
  48. vid.currentTime = 0;
  49. }
  50. } else if (key === 'Space') {
  51. if (vid.paused || vid.ended) {
  52. vid.play();
  53. } else {
  54. vid.pause();
  55. }
  56. }
  57. }
  58.  
  59. function injectStyles() {
  60. const styles = `
  61. .wdp-video-wrapper-module__videoWrapper {
  62. padding: 0 !important;
  63. height: calc(100vh - 88px);
  64. }
  65. `;
  66.  
  67. document.head.insertAdjacentHTML("beforeend", `<style type="text/css" id="rutubeEnchacedStyles">${styles}</style>`)
  68. }
  69.  
  70. })();