// ==UserScript==
// @name 视频分区插件
// @namespace http://tampermonkey.net/
// @version 0.1.8
// @description 可以通过关键字在b站主页添加一个自定义分区(默认分区为A-soul分区)
// @author tuntun
// @match https://www.bilibili.com/*
// @icon https://i2.hdslb.com/bfs/face/48d65a10a2c643dddc4a51e0a60fae892393417a.jpg
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @license MIT
// ==/UserScript==
(function() {
'use strict';
GM_addStyle(`
@media (min-width: 1701px) and (max-width: 2559.9px) {
.tuntun-grid {
grid-template-columns: repeat(5,1fr);
}
}
@media (min-width: 1367px) and (max-width: 1700.9px) {
.tuntun-part {
grid-column: span 5 !important;
}
.tuntun-card-body {
grid-column: span 5 !important;
grid-template-columns: repeat(5,1fr) !important;
}
.video-card-list.is-main .tuntun-card-body>*:nth-of-type(1n + 9) {
display: block!important;
}
}
@media (min-width: 1100px) and (max-width: 1366.9px) {
.tuntun-part {
grid-column: span 5 !important;
}
.tuntun-card-body {
grid-column: span 5 !important;
grid-template-columns: repeat(5,1fr) !important;
}
.video-card-list.is-main .tuntun-card-body>*:nth-of-type(1n + 9) {
display: block!important;
}
}
@media (max-width: 1099.9px) {
.tuntun-part {
grid-column: span 4 !important;
}
.tuntun-card-body {
grid-column: span 4 !important;
grid-template-columns: repeat(4,1fr) !important;
}
.video-card-list.is-main .tuntun-card-body>*:nth-of-type(7) {
display: block!important;
}
.video-card-list.is-main .tuntun-card-body>*:nth-of-type(8) {
display: block!important;
}
}
.tuntun-setting-popover {
width: 300px;
// height: 200px;
background-color: white;
border-radius: 20px;
position: absolute;
left: -120px;
top: 43px;
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;
transition: opacity 0.5s, height 0.25s;
}
.tuntun-setting-none {
opacity: 0;
height: 0;
overflow: hidden;
}
.tuntun-setting-form {
padding: 20px 15px;
display: flex;
flex-direction: column;
justify-content: center;
}
.tuntun-setting-btn {
margin: 0 auto;
width: 84px;
height: 38px;
background-color:#b8a6d9;
border: none;
border-radius:10px;
display:inline-block;
cursor:pointer;
color:#ffffff;
font-family:Arial;
font-size:17px;
text-decoration:none;
text-shadow:0px 0px 0px #9752cc;
}
.tuntun-setting-btn:hover {
background-color:#bc80ea;
}
.tuntun-setting-btn:active {
position:relative;
top:1px;
}
.tuntun-setting-input {
margin-bottom: 15px;
display: flex;
align-items: center;
}
.tuntun-setting-input div {
margin-right: 10px
}
.tuntun-setting-input input,select{
width: 200px;
border: 1px solid #ccc;
padding: 7px 0px;
border-radius: 3px;
padding-left: 5px;
transition: border 0.25s
}
.tuntun-setting-input input:focus{
outline: none;
border: 1px solid #B8A6D9;
}
.tuntun-setting-input select:focus{
outline: none;
border: 1px solid #B8A6D9;
}
.tuntun-setting-imgRadius {
padding-left: 0px !important;
}
`);
const getTemplete = (videoKey, imgUrl = '') => {
return `
<section class="bili-grid tuntun-grid">
<div class="video-card-list is-main tuntun-part">
<div class="area-header" style="z-index: 1000;">
<div class="left tuntun-part-left">
<a id="A-soul分区" class="the-world area-anchor" data-id="8"></a>
<img class="icon tuntun-part-img" src="${imgUrl}"></img>
<a
class="title"
href="https://search.bilibili.com/all?keyword=${videoKey}"
target="_blank"
>
<span>${videoKey}分区</span>
</a>
</div>
<div class="right" style="position: relative;">
<div id="tuntun-setting" style="position: relative;">
<button class="primary-btn roll-btn">
<span>设置</span></button
>
<div
class="tuntun-setting-popover tuntun-setting-none"
>
<form class="tuntun-setting-form">
<div class="tuntun-setting-input">
<div>分区名称:</div>
<input type="text" name="name" />
</div>
<div class="tuntun-setting-input">
<div>分区图片:</div>
<input type="text" name="picUrl" />
</div>
<div class="tuntun-setting-input">
<div>图片圆角:</div>
<input class="tuntun-setting-imgRadius" type="range" min="0" max="50"/>
</div>
<div class="tuntun-setting-input">
<div>时间范围:</div>
<select name="timeRange" id="">
<option value="7">一周之内</option>
<option value="30" selected>一月之内</option>
<option value="90">三个月之内</option>
<option value="0">不限时间</option>
</select>
</div>
<input class="tuntun-setting-btn" type="submit" value="确认" />
</form>
</div>
</div>
<button id="refreshVideo" class="primary-btn roll-btn">
<svg style="transform: rotate(0deg)">
<use xlink:href="#widget-roll"></use></svg><span>换一换</span></button
>
<a
class="primary-btn see-more tuntun-see-more"
href="https://search.bilibili.com/all?keyword=${videoKey}"
target="_blank"
><span>查看更多</span><svg><use xlink:href="#widget-arrow"></use></svg></a>
</div>
</div>
<div class="video-card-body tuntun-card-body">
</div>
</div>
<!--
<aside>
<div class="aside-wrap">
<div class="aside-head">
<div class="area-header">
<div class="left">
<a
class="title rank-title"
href="https://www.bilibili.com/v/virtual"
target="_blank"
><span>排行榜</span></a>
</div>
<div class="right">
<a
class="primary-btn see-more"
href="https://www.bilibili.com/v/virtual"
target="_blank"
><span>更多</span><svg><use xlink:href="#widget-arrow"></use></svg></a>
</div>
</div>
</div>
</div>
</aside>
-->
</section>
`;
};
let asideBody = `
<div class="aside-body">
<div class="aside-core">
<div class="bili-rank-list-video bili-rank-list-video__grid">
<ul class="bili-rank-list-video__list video-rank-list">
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="1"
>1</span
><a
href="//www.bilibili.com/video/BV1Hi4y1R7gy"
class="rank-video-card"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><div class="rank-video-card__image">
<picture class="v-img rank-video-card__cover"
><!---->
<source
srcset="
//i2.hdslb.com/bfs/archive/c92ce434742fb724af5577de2485a1eaff8aa226.jpg@192w_108h_1c_100q.webp
"
type="image/webp" />
<img
src="//i2.hdslb.com/bfs/archive/c92ce434742fb724af5577de2485a1eaff8aa226.jpg@192w_108h_1c_100q"
alt="B站以前的LV6 VS 现在的LV6 2.0"
loading="lazy"
onload=""
/></picture>
</div>
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="B站以前的LV6 VS 现在的LV6 2.0"
>
B站以前的LV6 VS 现在的LV6 2.0
</h3>
</div></a
>
</div>
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="2"
>2</span
><a
href="//www.bilibili.com/video/BV1Rb4y1Y7Pw"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="【自制动画】《鬼灭之刃》无限城篇(香奈乎单挑童磨 片段)"
>
【自制动画】《鬼灭之刃》无限城篇(香奈乎单挑童磨 片段)
</h3>
</div></a
>
</div>
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="3"
>3</span
><a
href="//www.bilibili.com/video/BV1Z44y177Wt"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="小伙买了80个模型,爆肝一周,只为在家建造一个迷你世界"
>
小伙买了80个模型,爆肝一周,只为在家建造一个迷你世界
</h3>
</div></a
>
</div>
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="4"
>4</span
><a
href="//www.bilibili.com/video/BV1mi4y1R7rT"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="准备好了么?来点刺激的!!!【嘉然】"
>
准备好了么?来点刺激的!!!【嘉然】
</h3>
</div></a
>
</div>
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="5"
>5</span
><a
href="//www.bilibili.com/video/BV1VD4y1c788"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="顶上海鲜战争12分钟总集篇"
>
顶上海鲜战争12分钟总集篇
</h3>
</div></a
>
</div>
<!---->
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="6"
>6</span
><a
href="//www.bilibili.com/video/BV14r4y1S71X"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="【原神手书】荒泷一斗 【Misfit Lunatic】"
>
【原神手书】荒泷一斗 【Misfit Lunatic】
</h3>
</div></a
>
</div>
<!---->
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="7"
>7</span
><a
href="//www.bilibili.com/video/BV1jL411L7Vm"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="【平成三萌】摇起来迎接2022~~~~~~"
>
【平成三萌】摇起来迎接2022~~~~~~
</h3>
</div></a
>
</div>
<!---->
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="8"
>8</span
><a
href="//www.bilibili.com/video/BV1tY411p7G5"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="你瞧瞧现在哪儿有萌新啊"
>
你瞧瞧现在哪儿有萌新啊
</h3>
</div></a
>
</div>
<!---->
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span class="bili-rank-list-video__item--index" data-index="9"
>9</span
><a
href="//www.bilibili.com/video/BV1ji4y1R7LL"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="女生想让男朋友知道的事有哪些?"
>
女生想让男朋友知道的事有哪些?
</h3>
</div></a
>
</div>
<!---->
</li>
<li class="bili-rank-list-video__item">
<div class="bili-rank-list-video__item--wrap">
<span
class="bili-rank-list-video__item--index"
data-index="10"
>10</span
><a
href="//www.bilibili.com/video/BV12L4y1E7G2"
class="rank-video-card rank-video-card__concise"
target="_blank"
data-mod="partition_rank"
data-idx="content"
data-ext="click"
><!---->
<div class="rank-video-card__info">
<h3
class="rank-video-card__info--tit"
title="看到朋友脱单我比si了还难受"
>
看到朋友脱单我比si了还难受
</h3>
</div></a
>
</div>
<!---->
</li>
</ul>
</div>
<!----><!---->
</div>
</div>`
const Tool = {
// 大数转万
formatBigNumber: (num) => {
return num > 10000 ? `${(num / 10000).toFixed(2)}万` : num
},
// 字符串转DOM
s2d: (string) => {
return new DOMParser().parseFromString(string, 'text/html').body
.childNodes[0]
},
// 发布时间格式化
diffTime: (time) => {
let upDate = new Date(parseInt(time, 10) * 1000);
let nowDate = new Date();
let nowTime = nowDate.getTime(),
upTime = upDate.getTime(),
Day = 24 * 60 * 60 * 1000,
Hours = 60 * 60 * 1000,
Minutes = 60 * 1000,
diffDay = parseInt((nowTime - upTime) / Day),
diffHours = parseInt((nowTime - upTime) / Hours),
diffMinutes = Math.floor((nowTime - upTime) / Minutes);
if(diffDay != 0 && diffDay < 7) {
if ( diffDay === 1 ) {
return '昨天'
}
return diffDay + '天前';
}
else if(diffDay === 0 && diffHours != 0) {
return diffHours + '小时前';
}
else if(diffDay === 0 && diffHours === 0 && diffMinutes != 0) {
return diffMinutes + '分钟前';
}
else if (diffDay === 0 && diffHours === 0 && diffMinutes === 0) {
return '刚刚';
}
else {
let month = upDate.getMonth() + 1;
let day = upDate.getDate();
if (nowDate.getFullYear() !== upDate.getFullYear()) {
return `${upDate.getFullYear()}-${month < 10 ? 0 : ''}${month}-${day < 10 ? 0 : ''}${day}`
}
return `${month < 10 ? 0 : ''}${month}-${day < 10 ? 0 : ''}${day}`
}
},
// 判断发布时间与现在时间是否过长
isTimeTooLate: (time, rangeDay = 30) => {
let day = parseInt(rangeDay, 10);
if (day === 0) {
return false;
}
let upData = new Date(parseInt(time, 10) * 1000);
let nowTime = new Date().getTime(),
upTime = upData.getTime(),
Day = 24 * 60 * 60 * 1000,
diffDay = parseInt((nowTime - upTime) / Day);
if (diffDay > day) {
return true;
}
return false;
}
}
const API = {
// 封装get方法
Get: async (props) => {
const { url: baseUrl, params = {} } = props;
let pStr = Object.keys(params).map((key) => {
return `${key}=${params[key]}`;
}).join('&');
let url = `${baseUrl}${pStr !== '' ? '?' : ''}${pStr}`;
try {
let res = await fetch(url, {
credentials: "include"
});
return (await res.json()).data;
} catch (error) {
console.error('Get Error', error);
}
},
// 通过关键词获取视频数据
getVideo: async (keyWord, page = 1) => {
try {
let res = await API.Get({
url: 'https://api.bilibili.com/x/web-interface/search/type',
params: {
search_type: 'video',
keyword: keyWord,
page: page,
}
});
return res.result;
} catch (error) {
console.log('getVideo', error);
}
},
}
let videoList = [];
let page = 1;
let searchPage = 1;
let bvList = [];
let pageSize = 10;
let videoKey = GM_getValue('videoKey', 'A-soul');
let rangeDay = GM_getValue('rangeDay', '30');
let imgBorderRadius = GM_getValue('imgBorderRadius', '15');
let defaultImgUrl = 'https://i2.hdslb.com/bfs/face/48d65a10a2c643dddc4a51e0a60fae892393417a.jpg';
let imgUrl = GM_getValue('imgUrl', defaultImgUrl);
// 获取数据并渲染
const getVideoCardTemplete = (data) => {
let videoCardBody = document.querySelector('.video-card-body');
videoCardBody.innerHTML = '';
data.forEach((item, index) => {
if (index < pageSize) {
const {
bvid, pic, mid,
upic, author, play,
like, duration, pubdate } = item;
let title = item.title.replace(/<em class="keyword">(.*?)<\/em>/g, '$1');
// let domStr = `
// <div class="bili-video-card">
// <div class="bili-video-card__skeleton hide">
// <div class="bili-video-card__skeleton--cover"></div>
// <div class="bili-video-card__skeleton--info">
// <div class="bili-video-card__skeleton--face"></div>
// <div class="bili-video-card__skeleton--right">
// <p class="bili-video-card__skeleton--text"></p>
// <p class="bili-video-card__skeleton--text short"></p>
// <p class="bili-video-card__skeleton--light"></p>
// </div>
// </div>
// </div>
// <div class="bili-video-card__wrap __scale-wrap">
// <a
// href="//www.bilibili.com/video/${bvid}"
// target="_blank"
// data-mod="partition_recommend"
// data-idx="content"
// data-ext="click"
// ><div class="bili-video-card__image __scale-player-wrap">
// <div class="bili-video-card__image--wrap">
// <div class="bili-watch-later" style="display: none">
// <svg class="bili-watch-later__icon">
// <use xlink:href="#widget-watch-later"></use></svg><span
// class="bili-watch-later__tip"
// style="display: none"
// ></span>
// </div>
// <picture class="v-img bili-video-card__cover"
// ><!---->
// <source
// srcset="
// ${pic}@672w_378h_1c_100q.webp
// "
// type="image/webp" />
// <img
// src="${pic}@672w_378h_1c_100q"
// alt="${title}"
// loading="lazy"
// onload=""
// /></picture>
// <div class="v-inline-player"></div>
// </div>
// <div class="bili-video-card__mask">
// <div class="bili-video-card__stats">
// <div class="bili-video-card__stats--left">
// <span class="bili-video-card__stats--item"
// ><svg class="bili-video-card__stats--icon">
// <use xlink:href="#widget-play-count"></use></svg><span class="bili-video-card__stats--text"
// >${Tool.formatBigNumber(play)}</span
// ></span
// ><span class="bili-video-card__stats--item"
// ><svg class="bili-video-card__stats--icon">
// <use xlink:href="#widget-agree"></use></svg><span class="bili-video-card__stats--text"
// >${Tool.formatBigNumber(like)}</span
// ></span
// >
// </div>
// <span class="bili-video-card__stats__duration">${duration}</span>
// </div>
// </div>
// </div></a
// >
// <div class="bili-video-card__info __scale-disable">
// <a
// href="//space.bilibili.com/${mid}"
// target="_blank"
// data-mod="partition_recommend"
// data-idx="content"
// data-ext="click"
// ><div class="v-avatar bili-video-card__avatar">
// <picture class="v-img v-avatar__face"
// ><!---->
// <source
// srcset="
// ${upic.substr(5)}@72w_72h.webp
// "
// type="image/webp" />
// <img
// src="${upic.substr(5)}@72w_72h"
// alt="${author}"
// loading="lazy"
// onload="" /></picture
// ><!---->
// </div></a
// >
// <div class="bili-video-card__info--right">
// <a
// href="//www.bilibili.com/video/${bvid}"
// target="_blank"
// data-mod="partition_recommend"
// data-idx="content"
// data-ext="click"
// ><h3
// class="bili-video-card__info--tit"
// title="${title}"
// >
// ${title}
// </h3></a
// >
// <p class="bili-video-card__info--bottom">
// <a
// class="bili-video-card__info--owner"
// href="//space.bilibili.com/${mid}"
// target="_blank"
// data-mod="partition_recommend"
// data-idx="content"
// data-ext="click"
// ><span class="bili-video-card__info--author">${author}</span
// ><span class="bili-video-card__info--date"
// >· ${Tool.diffTime(pubdate)}</span
// ></a
// >
// </p>
// </div>
// </div>
// </div>
// </div>
// `;
let domStr = `
<div class="bili-video-card" data-report="partition_recommend.content">
<div class="bili-video-card__skeleton hide">
<div class="bili-video-card__skeleton--cover"></div>
<div class="bili-video-card__skeleton--info">
<div class="bili-video-card__skeleton--face"></div>
<div class="bili-video-card__skeleton--right">
<p class="bili-video-card__skeleton--text"></p>
<p class="bili-video-card__skeleton--text short"></p>
<p class="bili-video-card__skeleton--light"></p>
</div>
</div>
</div>
<div class="bili-video-card__wrap __scale-wrap"><a href="//www.bilibili.com/video/${bvid}" target="_blank"
data-mod="partition_recommend" data-idx="content" data-ext="click">
<div class="bili-video-card__image __scale-player-wrap">
<div class="bili-video-card__image--wrap">
<div class="bili-watch-later" style="display: none;"><svg class="bili-watch-later__icon">
<use xlink:href="#widget-watch-later"></use>
</svg><span class="bili-watch-later__tip" style="display: none;"></span></div>
<picture class="v-img bili-video-card__cover">
<!---->
<source srcset="${pic}@672w_378h_1c.webp"
type="image/webp"><img
src="${pic}@672w_378h_1c"
alt="${title}" loading="lazy" onload="">
</picture>
<div class="v-inline-player"></div>
</div>
<div class="bili-video-card__mask">
<div class="bili-video-card__stats">
<div class="bili-video-card__stats--left"><span class="bili-video-card__stats--item"><svg
class="bili-video-card__stats--icon">
<use xlink:href="#widget-play-count"></use>
</svg><span class="bili-video-card__stats--text">${Tool.formatBigNumber(play)}</span></span><span
class="bili-video-card__stats--item"><svg class="bili-video-card__stats--icon">
<use xlink:href="#widget-agree"></use>
</svg><span class="bili-video-card__stats--text">${Tool.formatBigNumber(like)}</span></span></div><span
class="bili-video-card__stats__duration">${duration}</span>
</div>
</div>
</div>
</a>
<div class="bili-video-card__info __scale-disable">
<!---->
<div class="bili-video-card__info--right"><a
href="https://www.bilibili.com/video/${bvid}"
target="_blank" data-mod="partition_recommend" data-idx="content" data-ext="click">
<h3 class="bili-video-card__info--tit" title="${title}">${title}</h3>
</a>
<p class="bili-video-card__info--bottom">
<!----><a class="bili-video-card__info--owner" href="//space.bilibili.com/${mid}" target="_blank"
data-mod="partition_recommend" data-idx="content" data-ext="click"><svg
class="bili-video-card__info--owner__up">
<use xlink:href="#widget-up"></use>
</svg><span class="bili-video-card__info--author">${author}</span><span class="bili-video-card__info--date">·
${Tool.diffTime(pubdate)}</span></a>
</p>
</div>
</div>
</div>
</div>
`;
videoCardBody.appendChild(Tool.s2d(domStr));
}
});
};
// 更新视频
const refreshVideo = async () => {
let firstVideoIndex = (page - 1) * pageSize;
let lastVideoIndex = firstVideoIndex + pageSize - 1;
while(videoList.length < lastVideoIndex + 1) {
let data = await API.getVideo(videoKey, searchPage);
data.forEach((item) => {
if (!Tool.isTimeTooLate(item.pubdate, rangeDay)) {
if (bvList.indexOf(item.bvid) === -1) {
videoList.push(item);
bvList.push(item.bvid);
}
}
});
searchPage++;
};
page++;
let applyData = videoList.slice(firstVideoIndex, lastVideoIndex + 1)
getVideoCardTemplete(applyData);
};
// 填入框架
let main = document.querySelector('.bili-layout');
let gridAll = document.querySelectorAll('.bili-grid');
if (main !== null) {
let templete = getTemplete(videoKey, imgUrl);
main.insertBefore(Tool.s2d(templete), gridAll[2]);
// 第一次获取数据并渲染
const applyFirstData = async () => {
refreshVideo();
};
applyFirstData();
// 换一换按钮添加更新视频事件
let refreshVideoBtn = document.querySelector('#refreshVideo');
refreshVideoBtn.addEventListener('click', refreshVideo);
// popover
const showpopover = (x, y) => {
return `
<div id="asoul-popover" style="position: absolute; z-index: 2000; top: ${y}px; left: ${x}px;">
<div class="v-popover is-top" style="padding-bottom: 0px; margin-left: 0px; pointer-events: none;">
<div class="v-popover-content bili-rank-list-video">
<div class="rank-video-card__popover">
<div class="rank-video-card__popover--top">
<div class="rank-video-card__image rank-video-card__popover--image">
<picture class="v-img rank-video-card__cover rank-video-card__popover--cover">
<!---->
<source srcset="//i1.hdslb.com/bfs/archive/6ac4c468f90987ecd2a51f1753f7d043560ac271.jpg@192w_108h.webp"
type="image/webp"><img
src="//i1.hdslb.com/bfs/archive/6ac4c468f90987ecd2a51f1753f7d043560ac271.jpg@192w_108h"
alt="小伙买了80个模型,爆肝一周,只为在家建造一个迷你世界" loading="lazy" onload="">
</picture>
</div>
<div class="rank-video-card__info rank-video-card__popover--info">
<h3 class="rank-video-card__popover--tit" title="小伙买了80个模型,爆肝一周,只为在家建造一个迷你世界">小伙买了80个模型,爆肝一周,只为在家建造一个迷你世界
</h3>
<p class="rank-video-card__popover--author"><span>拜托了小翔哥</span><span> · 12-29</span></p>
</div>
</div>
<ul class="rank-video-card__popover--stats">
<li class="rank-video-card__popover--stats__item"><svg class="rank-video-card__popover--icon">
<use xlink:href="#widget-play-count"></use>
</svg><span>93万</span></li>
<li class="rank-video-card__popover--stats__item"><svg class="rank-video-card__popover--icon">
<use xlink:href="#widget-danmaku"></use>
</svg><span>3931</span></li>
<li class="rank-video-card__popover--stats__item"><svg class="rank-video-card__popover--icon">
<use xlink:href="#widget-favorite"></use>
</svg><span>1.3万</span></li>
<li class="rank-video-card__popover--stats__item"><svg class="rank-video-card__popover--icon">
<use xlink:href="#widget-coin"></use>
</svg><span>7.6万</span></li>
</ul>
</div>
</div>
</div>
</div>
`
}
// 侧边
// let aside = document.querySelector('.aside-wrap');
// aside.append(Tool.s2d(asideBody));
let setting = document.querySelector('#tuntun-setting');
let settingBtn = setting.children[0];
let settingPop = setting.children[1];
let settingForm = settingPop.children[0];
let partNameInput = settingForm.children[0].children[1];
let partImgUrlInput = settingForm.children[1].children[1];
let partImgDom = document.querySelector('.tuntun-part-img');
partImgDom.style.borderRadius = `${imgBorderRadius}%`;
let radiusRangeInput = document.querySelector('.tuntun-setting-imgRadius');
let partTimeRangeInput = settingForm.children[3].children[1];
// 设置按钮点击事件
settingBtn.addEventListener('click', () => {
if (settingPop.className === 'tuntun-setting-popover tuntun-setting-none') {
settingPop.className = 'tuntun-setting-popover';
} else {
settingPop.className = 'tuntun-setting-popover tuntun-setting-none';
}
partNameInput.value = videoKey;
partImgUrlInput.value = imgUrl;
partTimeRangeInput.value = rangeDay;
radiusRangeInput.value = imgBorderRadius;
partImgDom.style.borderRadius = `${imgBorderRadius}%`;
});
// videoKey改变
const videoKeyChange = (newKey) => {
let seeMoreBtn = document.querySelector('.tuntun-see-more');
let headerLeft = document.querySelector('.tuntun-part-left');
videoKey = newKey;
videoList = [];
page = 1;
searchPage = 1;
bvList = [];
GM_setValue('videoKey', newKey);
seeMoreBtn.href = `https://search.bilibili.com/all?keyword=${newKey}`;
headerLeft.children[2].href = `https://search.bilibili.com/all?keyword=${newKey}`;
headerLeft.children[2].children[0].innerHTML = `${newKey}分区`;
refreshVideo();
}
// imgUrl改变
const imgUrlChange = (newUrl) => {
let partImgDom = document.querySelector('.tuntun-part-img');
imgUrl = newUrl;
GM_setValue('imgUrl', newUrl);
partImgDom.src = newUrl;
}
// 设置img的圆角
radiusRangeInput.addEventListener('change', () => {
partImgDom.style.borderRadius = `${radiusRangeInput.value}%`;
});
const imgBorderRadiusChange = (newRadiusNum) => {
imgBorderRadius = newRadiusNum;
GM_setValue('imgBorderRadius', newRadiusNum);
}
// 时间范围改变
const timeRangeChange = (timeRange) => {
rangeDay = timeRange;
videoList = [];
page = 1;
searchPage = 1;
bvList = [];
GM_setValue('rangeDay', timeRange);
refreshVideo();
}
// 设置表单确认
settingForm.addEventListener('submit', (e) => {
e.preventDefault();
if (partNameInput.value !== videoKey) {
videoKeyChange(partNameInput.value);
}
if (partImgUrlInput.value !== imgUrl) {
imgUrlChange(partImgUrlInput.value);
}
if (radiusRangeInput.value !== imgBorderRadius) {
imgBorderRadiusChange(radiusRangeInput.value);
}
if (partTimeRangeInput.value !== rangeDay) {
timeRangeChange(partTimeRangeInput.value);
}
settingPop.className = 'tuntun-setting-popover tuntun-setting-none';
});
}
})();