Greasy Fork

Greasy Fork is available in English.

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

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

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         学外语视频外挂悬浮可点复制翻译字幕(google搜视频在线播-配合欧路词典),Learn-foreign-language-video-clickable-copying-subtitle
// @description  电脑建议配合欧路词典划词翻译(查看图片展示设置) , 加减按钮调节字幕偏移时间(有的视频插入了广告导致字幕错位) , 显示按钮:电脑鼠标移动或者移动端触摸屏幕 , 字幕内鼠标滑轮滚动视频快进 ,  F全屏快捷键,(暂时不好用后期修复) , 移动端建议 (需要魔法-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.26.20.48.06
// @icon         https://www.google.com/s2/favicons?sz=64&domain=greasyfork.org
// @author       You
// ==/UserScript==

(()=>{"use strict";const q=e=>{console.log("%c"+e,`
      background-color: #811f21;
      color: white;
      line-height:1.5rem;
      padding:0 0.5rem;
    `)};function E(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,q("全屏视频"),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}")):(q("退出全屏视频"),document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen())}window.addEventListener("load",(function(){q("视频外挂西悬浮可点复制翻译字幕-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="",r=null;document.addEventListener("selectionchange",(()=>{const e=window?.getSelection()?.toString()||"";e&&/\s/.test(e)&&(r&&window?.clearTimeout(r),r=setTimeout((async()=>{await(navigator?.writeText(e)),window?.getSelection()?.removeAllRanges(),i="",q("1秒后清除剪贴板成功")}),1e3))}));const t=$("video");var e=t.parent(),o=(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'>全屏</button>")),e.on("click",(function(e){e.stopPropagation(),q("全屏开关点击"),E(document.querySelector(".videoWrapper"))})),{"z-index":"2147483647",color:"#fff",position:"absolute",transition:"all 0.2s ease-in-out"}),n={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({...n}),$("<button class='switchButton'>显隐</button>"));let s=!0;a.css({...n});const l=$("<div class='floating_plug_in_for_clickable_subtitle_copying'></div>");a.on("click",(function(e){e.stopPropagation(),q("字幕显示开关点击"),s=!s,l.css({display:s?"block":"none"})})),l.click((function(e){q("字幕外层点击"),e.stopPropagation()})),l.on("mousedown",(e=>{e.stopPropagation(),t?.[0].pause(),q("视频暂停")})),l.on("touchstart",(e=>{e.stopPropagation(),t?.[0].pause(),q("视频暂停")}));let c=!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(),q("视频暂停")):c||(t?.[0].play(),q("视频播放"))})),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(),q("视频暂停")):c||(t?.[0].play(),q("视频播放"))})),l.css({...o,"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%)",display:"block","user-select":"text",width:"80vw",bottom:"0",left:"50%",padding:"3vw 3vw 10vh 3vw","font-size":" 3vw","text-align":" center","border-radius":"3vw 3vw 0 0"});var u=$('<track  class="videoTrack" kind = "subtitles" default /> '),p=(u=(t.prepend(u),u.on("loadeddata",(e=>{e.stopPropagation(),q("轨道数据缓存")})),$(`
  <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> 
  `)),u.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"}),u.css({"font-size":"2vw","line-height":"5vw"}),u.on("change",(e=>{e.stopPropagation();e=e.target.files[0];e&&(document.querySelector(".videoTrack").src=URL.createObjectURL(e))}));let d=0,m=-1,w=-1;function v(e){q($(this).text()+"被点击了"),$(this).css({"background-color":"#fff3","border-radius":"1vw"}),i=e?.target?.textContent.match(/\b[\w]+\b/)?.[0],navigator?.clipboard?.writeText(i)?.then((()=>{q("复制成功 "+i),clearTimeout(r),r=setTimeout((()=>{navigator?.clipboard?.writeText("")?.then((()=>{q("1秒后清除剪贴板成功 "+i)}))?.catch((()=>{q("1秒后清除剪贴板失败 "+i)}))}),1e3)}))?.catch((()=>{q("复制失败 "+i)}))}t.on("timeupdate",(e=>{e.stopPropagation();e=e?.target;var t=e?.currentTime+d,o=e?.textTracks[0]?.cues;if(e?.textTracks[0]?.cues?.length&&m!==parseInt(e?.currentTime))for(let e=0;e<o.length;e++){var n=o[e];if(n?.startTime<=t&&n?.endTime>=t){w!==e&&(n=n?.text?.split(/\s+/)?.map((e=>`<span  style="user-select:text;  word-wrap: break-word;  overflow-wrap: break-word;  white-space:pre-wrap;  transition: all 0.2s ease-in-out;  line-height: 5vw !important;  padding: 0 .2vw; margin: 0 -0.2vw;"   class="clickable_subtitle_word">${e}</span><i> </i>`)).join(""),l.html(`<p   class="clickable_subtitle_middle"  style="user-select:text;  word-wrap: break-word;  overflow-wrap: break-word;  white-space:pre-wrap;  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;">${n}</p>`),1<=e&&(n=(o?.[e-1])?.text?.split(/\s+/)?.map((e=>`<span  style="user-select:text;  word-wrap: break-word;  overflow-wrap: break-word;  white-space:pre-wrap;  transition: all 0.2s ease-in-out; font-size: 1.5vw; line-height: 2vw !important;  padding: 0 .2vw;  opacity: 0.7; margin: 0 -0.3vw;"   class="clickable_subtitle_word">${e}</span><i> </i>`)).join(""),l.append(`<p   class="clickable_subtitle_middle"  style="user-select:text;  word-wrap: break-word;  overflow-wrap: break-word;  white-space:pre-wrap;  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;">${n}</p>`)),(n=$(".clickable_subtitle_middle")).on("mousedown","span",v),n.on("touchstart","span",v),n.on("mouseenter","span",v),n.on("mousemove","span",(e=>{/\s/.test(window?.getSelection()?.toString())||(i=e?.target?.textContent.match(/\b[\w]+\b/)?.[0],navigator?.clipboard?.writeText(i)?.then((()=>{q("复制成功 "+i),clearTimeout(r),r=setTimeout((()=>{window?.getSelection()?.removeAllRanges(),i="",q("1秒后清除剪贴板成功")}),1e3)}))?.catch((()=>{q("复制失败 "+i)})))})),n.on("mouseleave","span",(function(){$(this).css({"background-color":"#fff0","border-radius":"1vw"})})),w=e);break}}m=parseInt(e?.currentTime)}));async function b(e){e.stopPropagation(),c=!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(),q("视频暂停")):(t?.[0].play(),q("视频播放"))}var g=$("<a class='clickable_subtitle_find_subtitle_webSite' href='https://assrt.net/' target='字幕网'> [射手字幕] </a>"),f=$("<a class='clickable_subtitle_find_subtitle_webSite' href='https://subscene.com/' target='字幕网'> [subscene.com] </a>"),h=(g.css({color:"#fff"}),f.css({color:"#fff"}),$("<div class='clickable_subtitle_find_subtitle_wapper'></div>")),k=(h.css({"line-height":"6vw !important"}),$("<div class='clickable_subtitle_find_subtitle_webSite_wapper'></div>"));g=(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(g),k.append(f),h.append(u),h.append(p),h.append(k),l.prepend(h),l.on("mouseenter",(function(e){e.stopPropagation(),c=!0,t?.[0].pause(),q("视频暂停")})),l.on("mouseleave",b),document?.querySelector("video").addEventListener("mouseenter",b),$(".videoWrapper"));g.css({"font-size":"2vw",padding:"0 1rem !important"});const y=$('<div class="buttonWrapper"/>');let _=!1,x=void(y.on("mouseenter",(function(){_=!0})),y.on("mouseleave",(function(){_=!1})),y.css({...o,top:"50%",right:"0",color:"#fff",transform:"translateY(-50%)"}),t.on("touchstart",(e=>{e.stopPropagation(),y.css({opacity:"1",transition:"all 0.2s ease-in-out"})})),t.on("touchend",(e=>{e.stopPropagation(),clearTimeout($.data(this,"timer")),$.data(this,"timer",setTimeout((()=>{y.css({opacity:"0.1",transition:"all 0.2s ease-in-out"})}),1e3))})));$(document).on("mousemove",(function(e){e.stopPropagation(),x=!1,clearTimeout($.data(this,"timer")),y.css({opacity:"1",transition:"all 0.2s ease-in-out"}),_||$.data(this,"timer",setTimeout((()=>{_=!1,y.css({opacity:"0.1",transition:"all 0.2s ease-in-out"})}),1e3))}));f=$("<button>加</button>");f.css({...n});const S=$("<div>0秒</div>"),T=(S.css({...n}),()=>{S.text(d+"秒")});f.on("click",(e=>{e.stopPropagation(),d++,T()}));u=$("<button>减</button>");u.css({...n}),u.on("click",(e=>{e.stopPropagation(),d--,T()})),$("<div/>").css({display:"flex","justify-content":"space-between","align-items":"center"}),y.append(e),y.append(a),y.append($("<div>&nbsp;&nbsp;</div>")),y.append(u),y.append(S),y.append(f),g.append(y),g.append(l),document.querySelector(".floating_plug_in_for_clickable_subtitle_copying").onwheel=function(e){e.preventDefault(),e.deltaY<0?document.querySelector("video").currentTime-=3:document.querySelector("video").currentTime+=3};function F(e){e?.preventDefault();var t=e?.key;e=e?.keyCode;console?.log("key :",t,e),"f"!==t&&"F"!==t||E(document.querySelector(".videoWrapper"))}document?.addEventListener("keyup",F),document?.querySelector("video").addEventListener("keyup",F),$("*").css("user-select","text")}),!1)})();