此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/411278/847392/H2P%3A%20utils.js
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
(我已经安装了用户样式管理器,让我安装!)
// ==UserScript==
// @name H2P: utils
// @namespace http://tampermonkey.net/
// @version 0.0.6
// @icon http://www.douyutv.com/favicon.ico
// @description utils
// @author H2P
// @compatible chrome
// ==/UserScript==
((w) => {
'use strict';
/**
* 在字符串前(后)添加 0
* @param {String} s
* @param {Number} len
* @param {Boolean} isAddFront
*/
function add0(s = '', len = 0, isAddFront = true) {
s = s.toString();
while (s.length < len) { s = isAddFront ? '0' + s : s + '0'; }
return s;
}
w.$util = (() => {
function Util() {
/**
* 返回毫秒
* @param {Number} num
*/
this.timeMS = (num = 0) => {
num = Number.parseInt(num);
return num < 946684800000 ? num * 1000 : num;
}
/**
* localStorage 相关操作
*/
function LS() {
this.init = (itemKey = '', itemPre = {}) => {
let item = Object.assign({}, itemPre, this.get(itemKey));
for (let key in item) { if (!(key in itemPre)) { delete item[key]; } }
localStorage.removeItem(itemKey);
localStorage.setItem(itemKey, JSON.stringify(item));
return item;
}
this.set = (itemKey = '', item = {}) => { localStorage.setItem(itemKey, JSON.stringify(item)); },
this.get = (itemKey = '') => JSON.parse(localStorage.getItem(itemKey)) || {},
this.remove = (itemKey = '') => { localStorage.removeItem(itemKey); }
}
this.LS = new LS();
this.HMS = (time = 0) => {
time = this.timeMS(time);
let h = Number.parseInt(time / 3600000);
let m = Number.parseInt(time % 3600000 / 60000);
let s = Number.parseInt(time % 3600000 % 60000 / 1000);
return {
h: add0(h, 2),
m: add0(m, 2),
s: add0(s, 2),
}
}
}
return new Util();
})();
// return millisecond
Date.prototype.$timems = Date.prototype.getTime;
// return second
Date.prototype.$times = function() { return Number.parseInt(this.getTime() / 1000); }
// format time: yyyy-MM-dd hh-mm-ss
Date.prototype.$formatTime = function() { return `${this.getFullYear()}-${add0(this.getMonth() + 1, 2)}-${add0(this.getDate(), 2)} ${add0(this.getHours(), 2)}:${add0(this.getMinutes(), 2)}:${add0(this.getSeconds(), 2)}`; }
// format date: yyyy-MM-dd
Date.prototype.$formatDate = function() { return `${this.getFullYear()}-${add0(this.getMonth() + 1, 2)}-${add0(this.getDate(), 2)}`; }
/**
* 根据 xpath 查询元素
* @param {String} xpath
* @param {Boolean} queryOneElement
*/
w.$H2P = (xpath = 'body', queryOneElement = true) => queryOneElement ? document.querySelector(xpath) : Array.from(document.querySelectorAll(xpath));
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
//
// 通知栏
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
const notifyType = {
default: {
bgColor: '#e6ffff',
bdColor: '#23bdd9'
},
success: {
bgColor: '#f6ffec',
bdColor: '#53752d'
},
warn: {
bgColor: '#fefbe6',
bdColor: '#fdc446'
},
error: {
bgColor: '#fff0ef',
bdColor: '#e75252'
}
}
w.$notifyMgr = (() => {
const style_notify = document.createElement('style');
style_notify.id = 'h2p-style-notify';
style_notify.innerHTML = `
#h2p-div-notify-container {
position: fixed;
width: 280px;
bottom: 20px;
left: 20px;
overflow: hidden;
z-index: 9999;
}
.h2p-div-notify-item {
position: relative;
width: 250px;
height: 25px;
right: -280px;
padding: 9px 13px;
margin: 6px 0;
border: 1px solid;
border-radius: 5px;
display: flex;
align-items: center;
transition: left 1.5s, right 1.5s;
}
.h2p-div-notify-item-in {
right: 0;
}
.h2p-div-notify-close {
position: absolute;
top: 15px;
right: 20px;
cursor: pointer;
}
.h2p-div-notify-close::before, .h2p-div-notify-close::after {
position: absolute;
content: '';
width: 12px;
height: 2px;
background: chocolate;
}
.h2p-div-notify-close::before {
transform: rotate(45deg);
}
.h2p-div-notify-close::after {
transform: rotate(-45deg);
}
`;
document.body.appendChild(style_notify);
const div_notify = document.createElement('div');
div_notify.id = 'h2p-div-notify-container';
document.body.appendChild(div_notify);
const Notify = function() {
this.createNotify = ({ msg = '', type = notifyType.default, autoClose = true }) => {
const ran = Math.floor(Math.random() * 100000000);
const div_notify_item = document.createElement('div');
div_notify_item.id = `h2p-div-notify-${ran}`;
div_notify_item.classList.add('h2p-div-notify-item');
div_notify_item.style.backgroundColor = type.bgColor;
div_notify_item.style.borderColor = type.bdColor;
div_notify_item.innerHTML = msg;
$H2P('div#h2p-div-notify-container').appendChild(div_notify_item);
const div_notify_item_close = document.createElement('div');
div_notify_item_close.id = `h2p-div-notify-close-${ran}`;
div_notify_item_close.classList.add('h2p-div-notify-close');
div_notify_item_close.addEventListener('click', (e) => { this.closeNotify(`h2p-div-notify-${e.target.id.match(/[a-zA-Z\-]*(\d+)[a-zA-Z\-]*/g)[1]}`); })
$H2P('div#h2p-div-notify-container').appendChild(div_notify_item_close);
setTimeout((id) => {
// 显示通知栏
$H2P(`#${id}`).classList.add('h2p-div-notify-item-in');
autoClose && setTimeout(this.closeNotify, 4000, id);
}, 100, div_notify_item.id);
}
this.closeNotify = (id = '') => {
$H2P(`#${id}`).classList.remove('h2p-div-notify-item-in');
setTimeout(() => {
$H2P('div#h2p-div-notify-container').removeChild($H2P(`#${id}`));
}, 1500);
}
}
return new Notify();
})();
})(window);