Greasy Fork

Greasy Fork is available in English.

视频全屏显示时间

因为大多数视频全屏后就看不到时间了,要看时间还得退出全屏,看到有的播放器全屏播放时可以在右上角显示一个系统当前时间,这种方式很不错,所以决定给视频网站也做一个这样的增强。这个脚本的作用只有一个,就是在视频左上角显示一个系统时间,方便全屏看视频期间随时了解时间。

当前为 2025-03-11 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==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.cctv.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 !== '';
    }
})();