因为大多数视频全屏后就看不到时间了,要看时间还得退出全屏,看到有的播放器全屏播放时可以在右上角显示一个系统当前时间,这种方式很不错,所以决定给视频网站也做一个这样的增强。这个脚本的作用只有一个,就是在视频左上角显示一个系统时间,方便全屏看视频期间随时了解时间。
// ==UserScript== // @name 视频全屏显示时间 // @namespace http://tampermonkey.net/ // @namespace https://www.medfav.com/webnav/ // @version 0.4.11 // @description 因为大多数视频全屏后就看不到时间了,要看时间还得退出全屏,看到有的播放器全屏播放时可以在右上角显示一个系统当前时间,这种方式很不错,所以决定给视频网站也做一个这样的增强。这个脚本的作用只有一个,就是在视频左上角显示一个系统时间,方便全屏看视频期间随时了解时间。 // @description 0.2.1 增加搜狐视频 0.2.2 增加mkv、mp4结尾的链接匹配,时间标签层级从3改为11 0.2.3增加YouTube支持 // @description 0.2.4 增加avi,mov,rmvb,webm,flv格式视频支持;修复带参数的视频链接播放时不显示时间;修复某些页面时间位置不在画面上的问题; // @description 0.2.5 本次更新为时间标签添加了自由拖动功能,以解决某些视频网站视频右上角水印对时间显示产生干扰;0.2.6 紧急修复一个时间标签拖动的问题,影响0.2.5版,正在使用0.2.5版的尽快升级;0.2.7 修复拖动导致的一些问题 0.2.8 修复一些体验问题 0.2.9 修复拖动时间标签导致视频暂停的问题: // @description 0.3.0 修复拖动的一些问题;添加 左上角/顶部中间/右上角 三个固定位置循环切换;添加恢复位置功能;0.3.1 修复标签位置调整的一些问题 0.3.2 小样式修复 // @description 0.3.3 移除拖动功能,拖动导致较多问题 0.3.4 修复一些显示问题 0.3.5 增加更多级别字体大小 // @description 0.3.6 增加设置弹框;增加顶部间距设置;增加字体大小设置;优化计时器字体宽度;0.3.7 修复设置界面样式,修改字体样式,添加www.bdys03.com支持;0.3.8 修正上一版为兼容MacOS字体导致Windows字体丑的问题 0.3.9 增加欧乐影院\AcFun\虎牙\斗鱼(标签位置有问题,请通过偏移处理)\YY(首页有遮盖问题,请调节位置解决)\抖音\快手\企鹅体育\#果TV;增加了左右偏移设置;扩大了偏移范围 // @description 0.4.0 增加仅全屏显示计时器选项;百度网盘使用canvas播放视频,不支持(除非有办法替换成video标签播放);0.4.1 设置窗口允许自由拖动;设置窗口标题栏增加关闭按钮;适配秒懂百科; 0.4.2 修复B站首页Banner显示计时器问题 0.4.3 增加颜色和透明度自定义;增加时钟偏移;增加 hxzxer.com 网站支持; 0.4.4 修复时间格式支持 0.4.5 修复时区问题 0.4.6 修复设置窗口位置问题 // @description 0.4.7 增加隐藏时间条功能,修复潜在的问题;0.4.8 增加显示秒功能,修复一些问题;0.4.9 修复哔哩哔哩直播不显示时间标签;0.4.10 修复TrustedHTML问题 0.4.11 修复上一个版本引入TrustedHTML导致的浏览器兼容性问题 // @author medfav // @match *://www.tvyb03.com/* // @match *://lpl.qq.com/* // @match *://v.qq.com/* // @match *://live.qq.com/* // @match *://*.bilibili.com/*/* // @match *://*.bilibili.com/*?* // @match *://tv.####.com/* // @match *://www.mgtv.com/* // @match *://*.iqiyi.com/* // @match *://*.youku.com/* // @match *://*.le.com/* // @match *://weibo.com/* // @match *://*.sohu.com/* // @match *://*.youtube.com/* // @match *://*.acfun.cn/* // @match *://*.huya.com/* // @match *://*.douyu.com/* // @match *://*.yy.com/* // @match *://*.douyin.com/* // @match *://*.kuaishou.com/* // @match *://*.ixigua.com/* // @match *://*.gfysys1.com/* // @match *://*.buyaotou.xyz/* // @match *://*.bdys03.com/* // @match *://*.olevod.com/* // @match *://pan.baidu.com/* // @match *://baike.baidu.com/video* // @match *://hxzxer.com/* // @match *://*/*.mkv* // @match *://*/*.mp4* // @match *://*/*.avi* // @match *://*/*.mov* // @match *://*/*.rmvb* // @match *://*/*.webm* // @match *://*/*.flv* // @match *://*/*.m3u8* // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @icon https://www.google.com/s2/favicons?sz=64&domain=qq.com // @run-at document-end // @grant unsafeWindow // @license GPLv3 // ==/UserScript== (function() { 'use strict'; // Your code here... // let timerInterval = 0; let fullShow = GM_getValue("fullShow"); let hideTimeBar = GM_getValue("hideTimeBar"); let showSecond = GM_getValue("showSecond"); let pos = GM_getValue("pos");//左(0)、中(1)、右(2) let pos_top_space = GM_getValue("pos_top");//标签和顶部的距离 let pos_transverse_space = GM_getValue("pos_transverse");//标签左右偏移 let fontSize_min = GM_getValue("min_font");//最小 let fontSize_small = GM_getValue("small_font");//小 let fontSize_medium = GM_getValue("medium_font");//中等 let fontSize_large = GM_getValue("large_font");//大 let fontSize_max = GM_getValue("max_font");//最大 let fontStyle = "微软雅黑";//字体样式 let fontColor = GM_getValue("font_color");//字体颜色 let bgColor = GM_getValue("bg_color");//背景颜色 let barOpacity = GM_getValue("bar_opacity");//时间标签整体透明度 let timeOffset = GM_getValue("time_offset");//时间偏移 // if(pos == undefined){ // GM_setValue("pos",2); // pos = 2; // } // if(pos_top_space == undefined){ // GM_setValue("pos_top",10); // pos_top_space = 10; // } // 初始化值 fullShow = (fullShow == undefined)?false:fullShow; hideTimeBar = (hideTimeBar == undefined)?false:hideTimeBar; showSecond = (showSecond == undefined)?true:showSecond; pos = (pos == undefined)?2:pos; pos_top_space = (pos_top_space == undefined)?10:pos_top_space; pos_transverse_space = (pos_transverse_space == undefined)?0:pos_transverse_space; fontSize_min = (fontSize_min == undefined)?10:fontSize_min; fontSize_small = (fontSize_small == undefined)?10:fontSize_small; fontSize_medium = (fontSize_medium == undefined)?20:fontSize_medium; fontSize_large = (fontSize_large == undefined)?24:fontSize_large; fontSize_max = (fontSize_max == undefined)?28:fontSize_max; fontColor = (fontColor == undefined)?"#e1e1e1ff":fontColor; bgColor = (bgColor == undefined)?"#0000004d":bgColor; barOpacity = (barOpacity == undefined)?1:barOpacity; timeOffset = (timeOffset == undefined)?8:timeOffset; let menu1 = GM_registerMenuCommand ("设置", openSetting, ""); // // 计时器位置 // var pos = 2; // // 计时器字体大小 // var fontSize = 32; // // 计时器字体 // var fontStyle = "微软雅黑"; function openSetting() { var settingBox = document.querySelector("#vt-setting"); if(settingBox){ return; } var settingStyle = document.createElement("style"); settingStyle.type="text/css"; settingStyle.id="vt-classs"; var settingStyleInner = ` div#vt-setting { top: 200px; left: calc(100vw - 300px); width: 250px; border: 1px solid gray; position: absolute; display: block; z-index: 100000; margin: 0; padding: 0; border-radius: 6px; font-size: small; color: black; background-color: white; } #vts-title { background-color:gray; display: inline-block; width: 100%; border-top-left-radius: 5px; border-top-right-radius: 5px; padding: 3px 0px; text-align: center; color: white; cursor: move; hight: 20px; line-hight: 20px; user-select:none; } #vts-close-btn { right: 0px;top: 0px;font-size: 17px; position: absolute; background-color: #d77c84; width: 44px; height: 26px; line-hight: 27px; border-top-right-radius: 5px; user-select:none; } #vts-close-btn:hover { background-color: #e81123; cursor: default; } #vts-pos input,#vts-general input { margin-right: 5px; } #vts-pos input:is(:nth-child(4),:nth-child(6)) { margin-left: 35px; } .vts-fieldset { border: 1px solid #c7c7c7; padding: 5px; margin: auto 5px; } .vts-fieldset>legend { font-size: small; color: gray; width: auto; padding: 0px 5px; } #vts-font input,#vts-pos-top,#vts-pos-transverse,#vts-font-style-name,#vts-color input { width: 110px; font-size: revert; outline: revert; border: revert; appearance: revert; } .vts-input-number,.vts-input,.vts-select { line-height: revert; appearance: revert; margin-top: 1px; } .vts-select { margin-top: 2px; } #vts-font select { width: 150px; } #vts-submit { margin-top: 10px; text-align: center; } #vts-submit>input { margin: 0; padding: 0 10px; appearance: auto; border: revert; border-radius: revert; background: revert; font-size: revert; } #vts-submit>input:not(:first-child) { margin-left: 20px; } #vts-save.disable { cursor: not-allowed; pointer-events: none; background-color: #c0c0c0; border-color: #8a8a8a; border-width: 1px; border-radius: 3px; color: azure; padding: 1px 10px; } #vts-tips { font-size: 13px; color: green; margin: 10px auto 5px 10px; }`; settingStyle.textContent = settingStyleInner; document.querySelector("head").appendChild(settingStyle); // CreateStyleElement("vt-classs", settingStyleInner, false) settingBox = document.createElement("div"); settingBox.id = "vt-setting"; var innerHtml = `<span id="vts-title">设置 <span id="vts-close-btn">╳</span> </span> <div id="vts-general"> <fieldset class="vts-fieldset"> <legend>通用设置</legend> <input type="checkbox" name="show-full-screen" id="vts-general-check0"> <label for="left">仅全屏时显示</label> <input type="checkbox" name="hide-time-bar" id="vts-general-check1"> <label for="left">隐藏时间条</label><br> <input type="checkbox" name="show-second" id="vts-general-check2"> <label for="left">显示秒</label><br> <label title="时钟偏移,范围-12 ~ 14,单位小时">时钟偏移💬:</label><input type="number" name="time-offset" id="vts-time-offset" class="vts-input-number" min="-12" max="14" value="8"> </fieldset> </div> <div id="vts-pos"> <fieldset class="vts-fieldset"> <legend>计时器位置</legend> <input type="radio" name="timer-position" id="vts-pos-radio0"><label for="left">左</label> <input type="radio" name="timer-position" id="vts-pos-radio1"><label for="left">中</label> <input type="radio" name="timer-position" id="vts-pos-radio2"><label for="left">右</label> <br><label for="fontSize">顶部距离:</label><input type="number" name="fontSize" id="vts-pos-top" class="vts-input-number" min="-1000" max="1000" value="10"> <br><label for="fontSize">左右偏移:</label><input type="number" name="fontSize" id="vts-pos-transverse" class="vts-input-number" min="-2000" max="2000" value="10"> </fieldset> </div> <div id="vts-font"> <fieldset class="vts-fieldset"> <legend>计时器字体</legend> <label title="视频画幅很小时,显示最小字体">最小💬:</label><input type="number" name="fontSize" id="vts-font-size-min" class="vts-input-number" min="9" max="99" value="10"><br> <label title="视频画幅小时,显示较小字体">较小💬:</label><input type="number" name="fontSize" id="vts-font-size-small" class="vts-input-number" min="9" max="99" value="10"><br> <label title="视频画幅一般大小时,显示一般大小字体">一般💬:</label><input type="number" name="fontSize" id="vts-font-size-medium" class="vts-input-number" min="9" max="99" value="20"><br> <label title="视频画幅大时,显示较大字体">较大💬:</label><input type="number" name="fontSize" id="vts-font-size-large" class="vts-input-number" min="9" max="99" value="24"><br> <label title="视频画幅很大时,显示最大字体">最大💬:</label><input type="number" name="fontSize" id="vts-font-size-max" class="vts-input-number" min="9" max="99" value="28"><br /> <br style="display:none;" /> <label for="fontStyle">字体:</label> <select disabled name="fontStyle" class="vts-select" id="vts-font-style-name"> <option value="微软雅黑">微软雅黑</option> <option value="宋体">宋体</option> <option value="黑体">黑体</option> </select> </fieldset> </div> <div id="vts-color"> <fieldset class="vts-fieldset"> <legend>颜色/透明度</legend> <label title="文字颜色: CSS支持的所有颜色格式(命名(如:Red、Green、Blue等),hex,rgb,hsl,lch)">前景色💬:</label><input type="text" name="font-color" id="vts-font-color" class="vts-input" size="9" maxlength="30" value="#e1e1e1ff"><br> <label title="背景颜色: CSS支持的所有颜色格式(命名(如:Red、Green、Blue等),hex,rgb,hsl,lch)">背景色💬:</label><input type="text" name="bg-color" id="vts-bg-color" class="vts-input" size="9" maxlength="30" value="#0000004d"><br> <label title="整体透明度(范围0-1,可以为小数)">透明度💬:</label><input type="number" name="opacity" id="vts-opacity" class="vts-input-number" step="0.05" min="0" max="1" value="1"><br> </fieldset> </div> <div id="vts-submit"> <input id="vts-save" type="button" value="保存"> <input id="vts-close" type="button" value="关闭"> <input id="vts-reset" type="button" value="重置"> </div> <div id="vts-tips">Tips:点击保存记住设置</div>`; const escapeHTMLPolicy = getEscapeHTMLPolicy(); if (escapeHTMLPolicy != undefined ) { var escaped = getEscapeHTMLPolicy().createHTML(innerHtml); settingBox.innerHTML = escaped; } else { settingBox.innerHTML = innerHtml; } document.querySelector("body").appendChild(settingBox); // 添加事件 document.querySelector("#vts-general-check0").addEventListener("change",function(){radioChange(this.checked,'check')}); document.querySelector("#vts-general-check1").addEventListener("change",function(){radioChange(this.checked,'hidetimebar')}); document.querySelector("#vts-general-check2").addEventListener("change",function(){radioChange(this.checked,'showSecond')}); document.querySelector("#vts-pos-radio0").addEventListener("change",function(){radioChange(0,'radio')}); document.querySelector("#vts-pos-radio1").addEventListener("change",function(){radioChange(1,'radio')}); document.querySelector("#vts-pos-radio2").addEventListener("change",function(){radioChange(2,'radio')}); document.querySelector("#vts-pos-top").addEventListener("input",function(){radioChange(this.value,'top')}); document.querySelector("#vts-pos-transverse").addEventListener("input",function(){radioChange(this.value,'transverse')}); document.querySelector("#vts-font-size-min").addEventListener("input",function(){radioChange(this.value,'fontsize-min')}); document.querySelector("#vts-font-size-small").addEventListener("input",function(){radioChange(this.value,'fontsize-small')}); document.querySelector("#vts-font-size-medium").addEventListener("input",function(){radioChange(this.value,'fontsize-medium')}); document.querySelector("#vts-font-size-large").addEventListener("input",function(){radioChange(this.value,'fontsize-large')}); document.querySelector("#vts-font-size-max").addEventListener("input",function(){radioChange(this.value,'fontsize-max')}); document.querySelector("#vts-font-color").addEventListener("input",function(){radioChange(this.value,'font-color')}); document.querySelector("#vts-bg-color").addEventListener("input",function(){radioChange(this.value,'bg-color')}); document.querySelector("#vts-opacity").addEventListener("input",function(){radioChange(this.value,'opacity')}); document.querySelector("#vts-time-offset").addEventListener("input",function(){radioChange(this.value,'timeoffset')}); document.querySelector("#vts-save").addEventListener("click",vtsSaveSetting); document.querySelector("#vts-close").addEventListener("click",vtsClose); document.querySelector("#vts-close-btn").addEventListener("click",vtsClose); document.querySelector("#vts-reset").addEventListener("click",vtsResetSetting); initSetting(); // 使设置窗口可拖动: dragElement(document.getElementById("vt-setting")); } // 转换为可信元素 function getEscapeHTMLPolicy() { if (window.trustedTypes && trustedTypes.createPolicy) { return trustedTypes.createPolicy("myEscapePolicy", { createHTML: (string) => string, }); } return undefined; } // 初始化设置界面 function initSetting() { document.querySelector("#vts-general-check0").checked = fullShow; document.querySelector("#vts-general-check1").checked = hideTimeBar; document.querySelector("#vts-general-check2").checked = showSecond; switch (pos) { case 0: document.querySelector("#vts-pos-radio0").checked = true; break; case 1: document.querySelector("#vts-pos-radio1").checked = true; break; case 2: document.querySelector("#vts-pos-radio2").checked = true; } document.querySelector("#vts-pos-top").value = pos_top_space; document.querySelector("#vts-pos-transverse").value = pos_transverse_space; document.querySelector("#vts-font-size-min").value = fontSize_min; document.querySelector("#vts-font-size-small").value = fontSize_small; document.querySelector("#vts-font-size-medium").value = fontSize_medium; document.querySelector("#vts-font-size-large").value = fontSize_large; document.querySelector("#vts-font-size-max").value = fontSize_max; //document.querySelector("#vts-font-size-number").value = fontSize; document.querySelector("#vts-font-color").value = fontColor; document.querySelector("#vts-bg-color").value = bgColor; document.querySelector("#vts-opacity").value = barOpacity; document.querySelector("#vts-time-offset").value = timeOffset; } var tempPos = 0; function radioChange(params,type) { if(type=="check") { fullShow = params; } if(type=="hidetimebar") { hideTimeBar = params; } if(type=="showSecond") { showSecond = params; } if(type=="radio") { pos = params; } if (type=="top") { if ((params < -1000 || params > 1000)) { document.querySelector("#vts-save").classList.add("disable"); } else { pos_top_space = Number(params); document.querySelector("#vts-save").classList.remove("disable"); } } if (type=="transverse") { if ((params < -2000 || params > 2000)) { document.querySelector("#vts-save").classList.add("disable"); } else { pos_transverse_space = Number(params); document.querySelector("#vts-save").classList.remove("disable"); } } if (type=="number") { if ((params < 9 || params > 99)) { document.querySelector("#vts-save").classList.add("disable"); } else { document.querySelector("#vts-save").classList.remove("disable"); } } if (type.indexOf("fontsize")==0) { if ((params < 9 || params > 99)) { document.querySelector("#vts-save").classList.add("disable"); } else { switch (type) { case "fontsize-min": fontSize_min = params; break; case "fontsize-small": fontSize_small = params; break; case "fontsize-medium": fontSize_medium = params; break; case "fontsize-large": fontSize_large = params; break; case "fontsize-max": fontSize_max = params; } fontStyle = "微软雅黑";//字体样式 document.querySelector("#vts-save").classList.remove("disable"); } } if (type.indexOf("color")>0) { if ( isColor(params) ) { switch (type) { case "font-color": fontColor = params; break; case "bg-color": bgColor = params; break; } document.querySelector("#vts-save").classList.remove("disable"); } else { document.querySelector("#vts-save").classList.add("disable"); } } if (type == "opacity") { if (params < 0 || params >1 ) { document.querySelector("#vts-save").classList.add("disable"); } else { barOpacity = params; document.querySelector("#vts-save").classList.remove("disable"); } } if (type == "timeoffset") { if (params < -12 || params > 14 || params % 1 != 0 ) { document.querySelector("#vts-save").classList.add("disable"); } else { timeOffset = params; document.querySelector("#vts-save").classList.remove("disable"); } } } // 保存按钮 function vtsSaveSetting() { //pos = tempPos; GM_setValue("fullShow",fullShow); GM_setValue("hideTimeBar",hideTimeBar); GM_setValue("showSecond",showSecond); GM_setValue("pos",pos); GM_setValue("pos_top",pos_top_space); GM_setValue("pos_transverse",pos_transverse_space); GM_setValue("min_font",fontSize_min); GM_setValue("small_font",fontSize_small); GM_setValue("medium_font",fontSize_medium); GM_setValue("large_font",fontSize_large); GM_setValue("max_font",fontSize_max); GM_setValue("font_color",fontColor); GM_setValue("bg_color",bgColor); GM_setValue("bar_opacity",barOpacity); GM_setValue("time_offset",timeOffset); //fontSize = document.querySelector("#vts-font-size-number").value; fontStyle = document.querySelector("#vts-font-style-name").value; let textTips1 = "Tips:保存成功!"; let textTips2 = "Tips:再次保存成功!"; let currentText = document.querySelector("#vts-tips").innerText; if(currentText == textTips1) { document.querySelector("#vts-tips").innerText = textTips2; } else { document.querySelector("#vts-tips").innerText = textTips1; } } // 取消按钮 function vtsClose() { var settingBox = document.querySelector("#vt-setting"); var settingStyle = document.querySelector("#vt-classs"); if(settingBox){ settingBox.parentNode.removeChild(settingBox); } if(settingStyle){ settingStyle.parentNode.removeChild(settingStyle); } } // 重置按钮 function vtsResetSetting() { fullShow = false; hideTimeBar = false; showSecond = true; pos = 2; pos_top_space = 10; pos_transverse_space = 0; fontSize_min = 10;//最小 fontSize_small = 10;//小 fontSize_medium = 20;//中等 fontSize_large = 24;//大 fontSize_max = 28;//最大 //fontSize = 32; fontStyle = "微软雅黑"; fontColor = "#e1e1e1ff"; bgColor = "#0000004d"; barOpacity = 1; timeOffset = 8; initSetting(); document.querySelector("#vts-tips").innerText = "已重置为默认,点击“保存”记住设置!"; //vtsClose(); } /** * [isFullscreen 判断浏览器是否全屏] * @return [全屏则返回当前调用全屏的元素,不全屏返回false] */ function isFullscreen(){ return document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false; } // 创建时间标签,width:视频宽度,用于设置时间数字大小 function createTag(element){ let style = "z-index: 101;/*color: #e1e1e1;*/margin:5px;padding: 5px;border-radius: 4px;line-height: 0.8em;/*background-color: #0000004d;opacity: 0.8;*/user-select: none;/*text-shadow: 1px 1px 2px black, -1px -1px 2px black;*/height: min-content;font-family:Arial;font-weight:400;letter-spacing:0px;/*pointer-events: none;*/"; let videoWidth = element.offsetWidth; let videoTop = element.offsetTop; let videoLeft = element.offsetLeft; let space = 10; let fontSize = 10; let tagWidth = 50; if(videoWidth >= 1700){ space = 10; fontSize = fontSize_max; tagWidth = 120; } else if(videoWidth >= 1200){ space = 10; fontSize = fontSize_large; tagWidth = 104; } else if(videoWidth >= 720){ space = 10; fontSize = fontSize_medium; tagWidth = 77; } else if(videoWidth <= 200){ space = 5; fontSize = fontSize_min; tagWidth = 50; } else { space = 10; fontSize = fontSize_small; tagWidth = 50; } style += "font-size: "+fontSize+"px;top: " + (videoTop + pos_top_space) + "px;"; style += "color: " + fontColor + ";background-color: " + bgColor + ";opacity: " + barOpacity + ";" switch(pos) { case 0: style += "position: absolute;left: " + videoLeft + pos_transverse_space + space + "px;"; break; case 1: style += "position: absolute;left: " + videoLeft + pos_transverse_space + ((videoWidth - tagWidth)/2) + "px;"; break; case 2: style += "position: absolute;right: " + videoLeft + pos_transverse_space + space + "px;"; break; } let timeBar = document.createElement("div"); timeBar.className = "timer"; timeBar.style = style; timeBar.title = "点击可临时隐藏时间条"; // CreateStyleElement("timerbar-style", ".timer {" + style + "}", true); return timeBar; } // 改变时间标签样式 function changeTag(element){ let fullScreenElement = isFullscreen(); // let settingElement = document.body.querySelector("#vt-setting"); // if(fullScreenElement != false && settingElement != undefined) { // let fullScrSetting = fullScreenElement.querySelector("#vt-setting"); // if(fullScrSetting == undefined){ // fullScreenElement.querySelector(".timer").parentElement.appendChild(settingElement); // } else { // fullScreenElement.remove(); // } // } if((fullScreenElement == false && fullShow == true) || hideTimeBar == true){ element.parentElement.querySelector(".timer").style.display = "none"; return; } else { element.parentElement.querySelector(".timer").style.display = "unset"; } let videoTop = element.offsetTop; let videoLeft = element.offsetLeft; if(element.offsetWidth > 200){ if(element.offsetWidth >= 1700){ element.parentElement.querySelector(".timer").style.fontSize = fontSize_max + "px"; }else if(element.offsetWidth >= 1200){ element.parentElement.querySelector(".timer").style.fontSize = fontSize_large + "px"; } else if(element.offsetWidth >= 720){ element.parentElement.querySelector(".timer").style.fontSize = fontSize_medium + "px"; } else if(element.offsetWidth <= 200) { element.parentElement.querySelector(".timer").style.fontSize = fontSize_min + "px"; } else { element.parentElement.querySelector(".timer").style.fontSize = fontSize_small + "px"; } // element.previousSibling.style.top = videoTop + 10 + "px"; // element.previousSibling.style.right = videoLeft + 10 + "px"; } else { // element.previousSibling.style.top = videoTop + 5 + "px"; // element.previousSibling.style.right = videoLeft + 5 + "px"; } // 改变颜色和透明度 element.parentElement.querySelector(".timer").style.color = fontColor; element.parentElement.querySelector(".timer").style.backgroundColor = bgColor; element.parentElement.querySelector(".timer").style.opacity = barOpacity; changePos(element); } function changePos(videoTag){ let videoTop = videoTag.offsetTop; let videoLeft = videoTag.offsetLeft; let videoWidth = videoTag.offsetWidth; let space = 10; if(videoWidth <= 200){ space = 5; } else { space = 10; } videoTag.parentElement.querySelector(".timer").style.top = (videoTop + pos_top_space) + "px"; // videoTag.previousSibling.style.marginTop = space + "px"; switch(pos) { case 0: videoTag.parentElement.querySelector(".timer").style.removeProperty("right"); //videoTag.previousSibling.style.position = 'absolute'; videoTag.parentElement.querySelector(".timer").style.left = videoLeft + pos_transverse_space + space + "px"; break; case 1: videoTag.parentElement.querySelector(".timer").style.removeProperty("right"); //videoTag.previousSibling.style.position = 'unset'; videoTag.parentElement.querySelector(".timer").style.left = videoLeft + pos_transverse_space + ((videoWidth - videoTag.parentElement.querySelector(".timer").offsetWidth)/2) + "px"; break; case 2: videoTag.parentElement.querySelector(".timer").style.removeProperty("left"); //videoTag.previousSibling.style.position = 'absolute'; videoTag.parentElement.querySelector(".timer").style.right = videoLeft + pos_transverse_space + space + "px"; break; } } // 获取Video标签 function getVideoTag(){ setTimeout(()=>{ let videoTagList = Array.from(document.getElementsByTagName('video')); if(videoTagList.length == 0){ getVideoTag(); } else { insertTimeBar(videoTagList); // setTimer(); getVideoTag(); } },1000) } getVideoTag(); // 加入时间标签 function insertTimeBar(videoTagList){ videoTagList.forEach((element)=>{ if (element.parentElement.querySelector(".timer") == null ){ // 多个时间条不能用同一个对象 let timeBar = createTag(element); // 给时间标签添加事件 addElementEvent(timeBar); element.parentElement.insertBefore(timeBar,element); } else { changeTag(element); } }) } // 给元素添加事件 function addElementEvent(element){ element.onmouseover = function(even) { even.stopPropagation(); } element.onmousemove = function(even) { even.stopPropagation(); } element.onmouseenter = function(even) { even.stopPropagation(); } //点击时临时隐藏时间条 element.onclick = function(even) { even.stopPropagation(); hideTimeBar = true; element.style.display = "none"; } } // 设置计时器 function setTimer(){ // clearInterval(timerInterval); // timerInterval = setInterval(()=>{ var date = new Date(Date.now() + (new Date().getTimezoneOffset() + (timeOffset * 60)) * 60 * 1000); // var hour = date.getHours(); // var min = date.getMinutes()>9?date.getMinutes():'0' + date.getMinutes(); // var sec = date.getSeconds()>9?date.getSeconds():'0' + date.getSeconds(); let timer = document.getElementsByClassName("timer"); // 当没有时间条时,添加(懒加载会出现这种情况) if(timer == undefined){ let videoTagList = Array.from(document.getElementsByTagName('video')); insertTimeBar(videoTagList); } // 给每一个时间条设置时间 let timeBarList = Array.from(document.getElementsByClassName("timer")); timeBarList.forEach((timeBar)=>{ timeBar.innerText = showSecond ? formatDateTime(date, "H:mm:ss") : formatDateTime(date, "H:mm"); }) },1000) } // 启动计时器 setTimer(); function formatDateTime(date, format) { const o = { 'M+': date.getMonth() + 1, // 月份 'd+': date.getDate(), // 日 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时 'H+': date.getHours(), // 小时 'm+': date.getMinutes(), // 分 's+': date.getSeconds(), // 秒 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度 S: date.getMilliseconds(), // 毫秒 a: date.getHours() < 12 ? '上午' : '下午', // 上午/下午 A: date.getHours() < 12 ? 'AM' : 'PM', // AM/PM }; if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (let k in o) { if (new RegExp('(' + k + ')').test(format)) { format = format.replace( RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length) ); } } return format; } // 提示框,调用方法:Toast('提示:好用记得点赞哦!',1000); let dialog; let timer; function Toast(msg,duration){ if(timer != null && dialog != null){ clearTimeout(timer); document.body.removeChild(dialog); dialog = null; } duration=isNaN(duration)?3000:duration; dialog = document.createElement('div'); dialog.innerText = msg; dialog.style.cssText="font-size:.32rem;color:green;background-color:white;border:solid green 2px;padding:10px 15px;margin:0 0 0 -60px;border-radius:4px;position:fixed;top:2%;left:93%;/*width:200px;*/text-align:left;z-index:9999"; document.body.appendChild(dialog); timer = setTimeout(function() { document.body.removeChild(dialog); dialog = null; }, duration); } // 移动设置窗口 function dragElement(elmnt) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; var originalonmousemove = null, originalonmouseup = null; if (document.getElementById("vts-title")) { // 如果存在,标题是您从中移动 DIV 的位置: document.getElementById("vts-title").onmousedown = dragMouseDown; // 防止在子元素上拖动 document.getElementById("vts-title").children.onmousedown = function(){}; } else { // 否则,从 DIV 内的任何位置移动 DIV: elmnt.onmousedown = dragMouseDown; } elmnt.onmouseup = closeDragElement; function dragMouseDown(e) { e = e || window.event; if(e.target.id == "vts-close-btn"){ return; } e.preventDefault(); // 在启动时获取鼠标光标位置: pos3 = e.clientX; pos4 = e.clientY; // 记录原事件 originalonmousemove = document.onmousemove; originalonmouseup = document.onmouseup; // 每当光标移动时调用一个函数: document.onmousemove = elementDrag; document.onmouseup = closeDragElement; } function elementDrag(e) { e = e || window.event; e.preventDefault(); // 计算新的光标位置: pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; // 设置元素的新位置: elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; } function closeDragElement() { // 释放鼠标按钮时停止移动: // document.onmousemove = null; // document.onmouseup = null; // 释放鼠标按钮时停止移动,还原原事件 document.onmousemove = originalonmousemove; document.onmouseup = originalonmouseup; } } function CreateStyleElement(id, cssText, isUpdate){ var styleElement = document.getElementById(id); if (styleElement == undefined) { // 创建一个新的 <style> 元素 styleElement = document.createElement("style"); styleElement.id = id; // 创建包含 CSS 规则的文本 // var cssText = ".highlight { background-color: yellow; }" var cssTextNode = document.createTextNode(cssText); // 将文本添加到 <style> 元素中 styleElement.appendChild(cssTextNode); // 将 <style> 元素添加到网页的 <head> 元素中 document.head.appendChild(styleElement); } else { if (isUpdate) { styleElement.innerText = cssText; } } } function isColor(strColor) { const s = new Option().style; s.color = strColor; return s.color !== ''; } })();