B站播放体验增强

默认网页全屏 网页全屏时滚轮切换宽屏 滚动页面到顶部无鼠标移动自动网页全屏

// ==UserScript==
// @name  B站播放体验增强
// @namespace  1018148046
// @author  颜太吓
// @version  7.02
// @match https://www.bilibili.com/video/*
// @match https://www.bilibili.com/bangumi/play/*
// @match https://www.bilibili.com/festival/*
// @run-at  document-start
// @unwrap
// @description 默认网页全屏 网页全屏时滚轮切换宽屏 滚动页面到顶部无鼠标移动自动网页全屏
// ==/UserScript==
'use strict';
(async (D, W) => {
  let player, dbl_timeout, scroll_timeout, webmode
  await new Promise(resolve => Object.defineProperty(W, 'player', {
    set(e) {resolve(player = e)},
    get() {return player}
  }))
  let wide = () => player.requestStatue(1).then(e => W.scroll({
    top: player.mediaElement().getBoundingClientRect().top - 75
  }))
  const handle = {
    click(e) {
      if (e.target !== player.mediaElement()) return
      e.stopPropagation()
      clearTimeout(dbl_timeout)
      if (e.detail === 1) dbl_timeout = setTimeout(() => player.isPaused() ? player.play() : player.pause(), 200)
      if (e.detail === 2) webmode ? wide() : player.requestStatue(2)
    },
    dblclick(e) {e.target === player.mediaElement() && e.stopPropagation()},
    wheel() {webmode && wide()},
    mousemove() {clearTimeout(scroll_timeout)},
    scroll() {
      clearTimeout(scroll_timeout)
      scroll_timeout = setTimeout(() => !W.scrollY && player.requestStatue(2), 388)
    }
  }
  //Object.values(nano.EventType).forEach(e => player.on(e, (e) => console.log(e.type)))
  Object.entries(handle).forEach(e => D.addEventListener(...e, true))
  player.on("Player_LoadStart", () => player.requestStatue(2))
  player.on("Player_Statue_Changed", () => webmode = player.getStates().mainScreen === 2)
  location.pathname.includes('bangumi') && player.once("Player_Progress", () => player.requestStatue(2))
  location.pathname.includes('bangumi') && player.on("Player_Ended", () => player.next())
})(document, window)