Dark++

CSS 实现夜间模式; 代码是从贴吧抄的, 嗯 ... over; 由于该实现本质上是覆盖一层, 可能会有未知问题出现: 如 sortTable.js 拖拽无效

目前为 2019-09-14 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Dark++
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.5
  5. // @description CSS 实现夜间模式; 代码是从贴吧抄的, 嗯 ... over; 由于该实现本质上是覆盖一层, 可能会有未知问题出现: 如 sortTable.js 拖拽无效
  6. // @description v0.5 增加 file://* 协议支持
  7. // @icon https://gss0.baidu.com/7Ls0a8Sm2Q5IlBGlnYG/sys/portraith/item/feb81406?t=1435668917
  8. // @author sven
  9. // @include https://*
  10. // @include http://*
  11. // @include file://*
  12. // @match .*
  13. // @grant GM_getValue
  14. // @grant GM_setValue
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. 'use strict';
  19. const m = document.createElement('div')
  20. m.style.zIndex = '999999'
  21. m.style.position = 'absolute'
  22. m.style.height = '100vh'
  23. m.style.width = '100vw'
  24. m.style.position = 'fixed'
  25. m.style.top = '0'
  26. m.style.left = '-9999px'
  27. m.style.id = 'dark-modal'
  28. let opacity = GM_getValue('dark_mode_opacity') || 0.4
  29. const step = 0.05
  30. const setOpacity = ({opa, add, sub} = {}) => {
  31. let _opa = opa || opacity
  32. _opa = add
  33. ? _opa + step
  34. : (sub ? (_opa - step) : _opa)
  35. _opa = Math.max(0, _opa)
  36. _opa = Math.min(1, _opa)
  37. GM_setValue('dark_mode_opacity', _opa)
  38. console.log('%c[Dark++ plugin] %copacity: ' + _opa.toFixed(2), 'color: teal;', 'color: #FFF;')
  39. m.style.outline = `rgba(0, 0, 0, ${opacity = _opa}) solid 10000px`
  40. }
  41. setOpacity()
  42. const keyMap = {
  43. 81: () => setOpacity({add: true}),
  44. 87: () => setOpacity({sub: true})
  45. }
  46. document.body.append(m)
  47. document.addEventListener('keydown', evt => {
  48. keyMap[evt.keyCode] && keyMap[evt.keyCode](evt)
  49. })
  50. })();