Greasy Fork

Greasy Fork is available in English.

学外语视频外挂悬浮可点复制翻译字幕(google搜视频在线播-配合欧路词典),Learn-foreign-language-video-clickable-copying-subtitle

电脑建议配合欧路词典划词翻译(查看图片展示设置) , 加减按钮调节字幕偏移时间(有的视频插入了广告导致字幕错位) , 显示按钮:电脑鼠标移动或者移动端触摸屏幕 , 字幕内鼠标滑轮滚动视频快进 , F全屏快捷键,(暂时不好用后期修复) , (alt + s) 快捷键隐藏字幕 , 移动端建议 (需要魔法-iphone下载m3u3免费资源下载器(safari插件),safari长按浏览器网络视频下载) , 地址 : https://translation-of-video-subtitles-by-extracting-words.vercel.app/ , iphone 建议使用快捷指令获取剪贴板翻译 , 安卓手机建议使用屏幕取词软件

当前为 2023-12-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         学外语视频外挂悬浮可点复制翻译字幕(google搜视频在线播-配合欧路词典),Learn-foreign-language-video-clickable-copying-subtitle
// @description  电脑建议配合欧路词典划词翻译(查看图片展示设置) , 加减按钮调节字幕偏移时间(有的视频插入了广告导致字幕错位) , 显示按钮:电脑鼠标移动或者移动端触摸屏幕 , 字幕内鼠标滑轮滚动视频快进 ,  F全屏快捷键,(暂时不好用后期修复) , (alt + s) 快捷键隐藏字幕 , 移动端建议 (需要魔法-iphone下载m3u3免费资源下载器(safari插件),safari长按浏览器网络视频下载)  , 地址 : https://translation-of-video-subtitles-by-extracting-words.vercel.app/ , iphone 建议使用快捷指令获取剪贴板翻译 , 安卓手机建议使用屏幕取词软件
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @require      https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js
// @require      https://unpkg.com/default-passive-events
// @include      *
// @match        *://*/*
// @namespace    http://tampermonkey.net/
// @version      2023.12.30.14.58.06
// @icon         https://www.google.com/s2/favicons?sz=64&domain=greasyfork.org
// @author       You
// ==/UserScript==

(()=>{"use strict";const P=e=>{console.log("%c"+e,`
      background-color: #811f21;
      color: white;
      line-height:1.5rem;
      padding:0 0.5rem;
    `)};function z(e){var t;t=e,!(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement)||t!==document.fullscreenElement&&t!==document.mozFullScreenElement&&t!==document.webkitFullscreenElement&&t!==document.msFullscreenElement?(t=e,P("全屏视频"),t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen(),void 0!==window.ActiveXObject&&null!=(e=new ActiveXObject("WScript.Shell"))&&e.SendKeys("{F11}")):(P("退出全屏视频"),document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen())}window.addEventListener("load",(function(){P("视频外挂西悬浮可点复制翻译字幕-floating-plug-in-for-clickable-subtitle-copying"),$("iframe").each((function(){$(this).attr("allowfullscreen","true")})),navigator.mediaSession.setActionHandler("previoustrack",(function(){document.querySelector("video").currentTime-=3})),navigator.mediaSession.setActionHandler("nexttrack",(function(){document.querySelector("video").currentTime+=3}));let i="",s=null;document.addEventListener("selectionchange",(()=>{const e=window?.getSelection()?.toString()||"";e&&/\s/.test(e)&&(s&&window?.clearTimeout(s),s=setTimeout((async()=>{await(navigator?.clipboard?.writeText(e)),window?.getSelection()?.removeAllRanges(),i="",P("1秒后清除剪贴板成功")}),1e3))}));const t=$("video");var e=t.parent(),n=(e=(e.addClass("videoWrapper"),e.css({position:"relative"}),t.append("<style>video::cue{opacity: 0 !important}</style>"),t.attr("controls","true"),t.attr("playsInline","true"),t.attr("autopictureinpicture","true"),$("<button class='switchButton'>全屏<br/>(F)</button>")),e.on("click",(function(e){e.stopPropagation(),P("全屏开关点击"),z(document.querySelector(".videoWrapper"))})),{"z-index":"2147483647",color:"#fff",position:"absolute",transition:"all 0.2s ease-in-out"}),o={margin:"1vw",display:"block",padding:"0.5vw","border-radius":".5vw","background-color":"#1118","font-size":"1.5vw",cursor:"pointer","user-select":"text","line-height":"2.5rem !important",color:"#fffb",transition:"all 0.2s ease-in-out","backdrop-filter":"blur(4px)"},a=(e.css({...o}),$("<button class='switchButton'>显隐<br/>(alt+s)</button>"));let r=!1;const l=$("<div class='floating_plug_in_for_clickable_subtitle_copying' style='display: none;'></div>"),c=(a.css({...o}),()=>{r=!r,l.css({display:r?"block":"none"})});a.on("click",(function(e){e.stopPropagation(),P("字幕显示开关点击"),c()})),l.click((function(e){P("字幕外层点击"),e.stopPropagation()})),l.on("mousedown",(e=>{e.stopPropagation(),t?.[0].pause(),P("视频暂停")})),l.on("touchstart",(e=>{e.stopPropagation(),t?.[0].pause(),P("视频暂停")}));let u=!1;l.on("mouseup",(async e=>{e.stopPropagation();e=await(navigator?.clipboard?.readText());console.log("window?.getSelection()?.toString() :",i,"-||-",e),window?.getSelection()?.toString()||i===e?(t?.[0].pause(),P("视频暂停")):u||(t?.[0].play(),P("视频播放"))})),l.on("touchend",(async e=>{e.stopPropagation();e=await(navigator?.clipboard?.readText());console.log("window?.getSelection()?.toString() :",i,"-||-",e),window?.getSelection()?.toString()||i===e?(t?.[0].pause(),P("视频暂停")):u||(t?.[0].play(),P("视频播放"))})),l.css({...n,"backdrop-filter":"blur(8px)",mask:"linear-gradient(180deg, black 0%, rgba(0, 0, 0, 1) 80%,rgba(0, 0, 0, 0.0) 95%)",border:"2px solid #aaa8",transform:"translateX(-50%)","user-select":"text",width:"60vw",bottom:"0",left:"50%",padding:"3vw 3vw 10vh 3vw","font-size":" 3vw","text-align":" center","border-radius":"3vw 3vw 0 0"});var d=$('<track  class="videoTrack" kind = "subtitles" default /> '),p=(d=(t.prepend(d),d.on("loadeddata",(e=>{e.stopPropagation(),P("轨道数据缓存")})),$(`
  <div>
    <input 
      id='subtitle_input' 
      style='font-size: 2vw;' 
      class='clickable_subtitle_input_file'
      type='file' 
      accept='.vtt'
      placeholder="上传字幕文件(.vtt)"
    ></input>
    <label style='font-size: 2vw;' for='subtitle_input'>请上传该视频字幕文件(.vtt)</label>  
  </div> 
  `)),d.css({"font-size":" 2vw","background-color":"#0004","order-radius":" 2vw !important",padding:"1vw 4vw",display:"flex","justify-content":"space-between","align-items":"center"}),$(`
  <span>字幕文件转格式.srt->:</span>
  <a 
    style='color:#fff;' 
    href='https://converter.app/cn/srt-vtt/' 
    target='转格式'
  > (.vtt)网站0</a>
  <a 
    style='color:#fff;' 
    href='https://converter.app/cn/srt-vtt/' 
    target='转格式'
  > (.vtt)网站1</a>
  <a 
    style='color:#fff;' 
    href='https://subtitletools.com/convert-subtitles-to-plain-text-online' 
    target='转格式'
  > (.txt)网站2</a>
  <a 
    style='color:#fff;' 
    href='https://converts.me/tools/conversion/subtitle/srt-to-txt' 
    target='转格式'
  > (.txt)网站3</a>
  `));p.css({"line-height":"5vw"}),d.css({"font-size":"2vw","line-height":"5vw"}),d.on("change",(e=>{e.stopPropagation();e=e.target.files[0];e&&(document.querySelector(".videoTrack").src=URL.createObjectURL(e))}));let m=0,v=-1,g=-1;function b(e){P($(this).text()+"被点击了"),$(this).css({"background-color":"#fff3","border-radius":"1vw"}),i=e?.target?.textContent.match(/\b[\w]+\b/)?.[0],navigator?.clipboard?.writeText(i)?.then((()=>{P("复制成功 "+i),clearTimeout(s),s=setTimeout((()=>{navigator?.clipboard?.writeText("")?.then((()=>{P("1秒后清除剪贴板成功 "+i)}))?.catch((()=>{P("1秒后清除剪贴板失败 "+i)}))}),1e3)}))?.catch((()=>{P("复制失败 "+i)}))}t.on("timeupdate",(e=>{e.stopPropagation();e=e?.target;var t=e?.currentTime+m,n=e?.textTracks[0]?.cues;if(e?.textTracks[0]?.cues?.length&&v!==parseInt(e?.currentTime))for(let e=0;e<n.length;e++){var o=n[e];if(o?.startTime<=t&&o?.endTime>=t){g!==e&&(o=o?.text?.split(/\s+/)?.map((e=>`<span  style="user-select:text; transition: all 0.2s ease-in-out;  line-height: 5vw !important;  padding: 0 .2vw; margin: 0 0.3vw;"   class="clickable_subtitle_word">${e}</span><i> </i>`)).join(""),l.html(`<p   class="clickable_subtitle_middle"  style="display: flex; flex-wrap: wrap; user-select:text;  line-height: 4rvw !important; text-shadow:#052b5c -0.2rem -0.2rem 0.5rem,#052b5c -0.2rem 0.2rem 0.5rem,#052b5c 0.2rem -0.2rem 0.5rem,#052b5c 0.2rem 0.2rem 0.5rem;">${o}</p>`),1<=e&&(o=(n?.[e-1])?.text?.split(/\s+/)?.map((e=>`<span  style="display: flex; user-select:text; transition: all 0.2s ease-in-out; font-size: 1.5vw; line-height: 2vw !important;  padding: 0 .2vw;  opacity: 0.7; margin: 0 0.15vw;"   class="clickable_subtitle_word">${e}</span><i> </i>`)).join(""),l.append(`<p   class="clickable_subtitle_middle"  style="display: flex; flex-warp: warp ; user-select:text; line-height: 4rvw !important; text-shadow:#052b5c -0.2rem -0.2rem 0.5rem,#052b5c -0.2rem 0.2rem 0.5rem,#052b5c 0.2rem -0.2rem 0.5rem,#052b5c 0.2rem 0.2rem 0.5rem;">${o}</p>`)),(o=$(".clickable_subtitle_middle")).on("mousedown","span",b),o.on("touchstart","span",b),o.on("mouseenter","span",b),o.on("mousemove","span",(e=>{/\s/.test(window?.getSelection()?.toString())||(i=e?.target?.textContent.match(/\b[\w]+\b/)?.[0],navigator?.clipboard?.writeText(i)?.then((()=>{P("复制成功 "+i),clearTimeout(s),s=setTimeout((()=>{window?.getSelection()?.removeAllRanges(),i="",P("1秒后清除剪贴板成功")}),1e3)}))?.catch((()=>{P("复制失败 "+i)})))})),o.on("mouseleave","span",(function(){$(this).css({"background-color":"#fff0","border-radius":"1vw"})})),g=e);break}}v=parseInt(e?.currentTime)}));async function w(e){e.stopPropagation(),u=!1,l.css({height:"auto"}),$(".clickable_subtitle_middle").css({"margin-top":"0"}),e=await(navigator?.clipboard?.readText()),console.log("window?.getSelection()?.toString() :",i,"-||-",e),window?.getSelection()?.toString()||i===e?(window?.getSelection()?.removeAllRanges(),t?.[0].pause(),P("视频暂停")):(t?.[0].play(),P("视频播放"))}var f=$("<a class='clickable_subtitle_find_subtitle_webSite' href='https://assrt.net/' target='字幕网'> [射手字幕] </a>"),h=$("<a class='clickable_subtitle_find_subtitle_webSite' href='https://subscene.com/' target='字幕网'> [subscene.com] </a>"),y=(f.css({color:"#fff"}),h.css({color:"#fff"}),$("<div class='clickable_subtitle_find_subtitle_wapper'></div>")),k=(y.css({"line-height":"6vw !important"}),$("<div class='clickable_subtitle_find_subtitle_webSite_wapper'></div>"));f=(k.css({display:"flex","justify-content":"space-between","align-items":"center","font-size":"2vw","order-radius":"2vw !important",padding:"1vw 4vw","background-color":"#0004","line-height":"5vw"}),k.append(f),k.append(h),y.append(d),y.append(p),y.append(k),l.prepend(y),l.on("mouseenter",(function(e){e.stopPropagation(),u=!0,t?.[0].pause(),P("视频暂停")})),l.on("mouseleave",w),document?.querySelector("video").addEventListener("mouseenter",w),$(".videoWrapper"));f.css({"font-size":"2vw",padding:"0 1rem !important"});const x=$('<div class="buttonWrapper"/>');let _=!1,S=void(x.on("mouseenter",(function(){_=!0})),x.on("mouseleave",(function(){_=!1})),x.css({...n,top:"50%",right:"0",color:"#fff",transform:"translateY(-50%)"}),t.on("touchstart",(e=>{e.stopPropagation(),x.css({opacity:"1",transition:"all 0.2s ease-in-out"})})),t.on("touchend",(e=>{e.stopPropagation(),clearTimeout($.data(this,"timer")),$.data(this,"timer",setTimeout((()=>{x.css({opacity:"0.1",transition:"all 0.2s ease-in-out"})}),1e3))})));$(document).on("mousemove",(function(e){e.stopPropagation(),S=!1,clearTimeout($.data(this,"timer")),x.css({opacity:"1",transition:"all 0.2s ease-in-out"}),_||$.data(this,"timer",setTimeout((()=>{_=!1,x.css({opacity:"0.1",transition:"all 0.2s ease-in-out"})}),1e3))}));h=$("<button>加(+)</button>");h.css({...o});const T=$("<div>0秒</div>"),F=(T.css({...o}),()=>{T.text(m+"秒")});h.on("click",(e=>{e.stopPropagation(),m++,F()}));d=$("<button>减(-)</button>");function q(e){e.preventDefault(),e.deltaY<0?document.querySelector("video").currentTime-=3:document.querySelector("video").currentTime+=3}d.css({...o}),d.on("click",(e=>{e.stopPropagation(),m--,F()})),$("<div/>").css({display:"flex","justify-content":"space-between","align-items":"center"}),x.append(e),x.append($("<div>&nbsp;&nbsp;</div>")),x.append(d),x.append(T),x.append(h),x.append(a),f.append(x),f.append(l),document.querySelector(".floating_plug_in_for_clickable_subtitle_copying").onwheel=q,document.querySelector("video").onwheel=q;function E(e){e?.preventDefault();var t=e?.key;e=e?.keyCode;console?.log("key :",t,e),"f"===t||"F"===t?z(document.querySelector(".videoWrapper")):"="===t?(m++,F()):"-"===t&&(m--,F())}document?.addEventListener("keyup",E),document?.addEventListener("keydown",(e=>{e.altKey&&"s"===e.key&&(e.preventDefault(),console.log("组合快捷键 Alt + S 被按下!"),c())})),document?.querySelector("video").addEventListener("keyup",E),$("*").css("user-select","text")}),!1)})();