Greasy Fork

Greasy Fork is available in English.

上班快乐刷知乎

可隐藏知乎首页的列表图片和展开的内容图片,极大程度被发现上班在划水刷知乎。快捷键(双击H、双击G)

当前为 2023-10-09 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         上班快乐刷知乎
// @namespace    http://tampermonkey.net/
// @version      0.1.2
// @description  可隐藏知乎首页的列表图片和展开的内容图片,极大程度被发现上班在划水刷知乎。快捷键(双击H、双击G)
// @author       You
// @match        https://www.zhihu.com/
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

;(function () {
  'use strict'

  const getBool = val => {
    if (val === null) return true
    if (val === 'true') return true
    if (val === 'false') return false
    return true
  }

  // 外层图片
  const localIfShowOuterImg = localStorage.getItem('ifShowOuterImg')
  var ifShowOuterImg = getBool(localIfShowOuterImg)

  // 内层富文本图片
  const localIfShowInnerImg = localStorage.getItem('ifShowInnerImg')
  var ifShowInnerImg = getBool(localIfShowInnerImg)

  /** --------------------- 添加图片控制事件 --------------------- */
  function handleImgBox(ele, ifShowOuterImg) {
    const imgParentLists = document.querySelectorAll(ele)
    imgParentLists.forEach(item => {
      item.style.display = ifShowOuterImg ? 'block' : 'none'
    })
  }

  // 外层
  var outerImg = status => handleImgBox('.RichContent-cover', status)
  var updateOuterImg = status => {
    ifShowOuterImg = status
    localStorage.setItem('ifShowOuterImg', status)
    outerImg(status)

    const btn = document.getElementById('outer-btn')
    btn.style.opacity = status ? 1 : 0.5
  }

  // 内层
  var innerImg = status => handleImgBox('.RichContent-inner img', status)
  var updateInnerImg = status => {
    ifShowInnerImg = status
    localStorage.setItem('ifShowInnerImg', status)
    innerImg(status)

    const btn = document.getElementById('inner-btn')
    btn.style.opacity = status ? 1 : 0.5
  }

  if (ifShowOuterImg === false) setTimeout(() => updateOuterImg(false))
  if (ifShowInnerImg === false) setTimeout(() => updateInnerImg(false))
  /** --------------------- 添加图片控制事件 --------------------- */

  /** --------------------- 页面新增按钮 --------------------- */
  function addEle({ tag, id, text, style, callback }) {
    var element = document.createElement(tag)
    element.id = id
    element.innerText = text
    element.style.cssText = style

    if (callback) {
      element.addEventListener('click', callback)
    }

    document.body.appendChild(element)
  }

  const listBtnStyle = `
          position: fixed;
          bottom: 16%;
          right: 15px;
          border-radius: 50px;
          // width: 80px;
          height: 35px;
          background: #056De8;
          color: #fff;
          padding: 0 10px;
        `

  const richTextBtnStyle = `
        position: fixed;
        bottom: 10%;
        right: 15px;
        border-radius: 50px;
        // width: 80px;
        height: 35px;
        background: #056De8;
        color: #fff;
        padding: 0 10px;
      `

  addEle({
    id: 'outer-btn',
    tag: 'button',
    text: '列表图片',
    style: listBtnStyle,
    callback: () => {
      updateOuterImg(!ifShowOuterImg)
    }
  })

  addEle({
    id: 'inner-btn',
    tag: 'button',
    text: '富文本图片',
    style: richTextBtnStyle,
    callback: () => {
      updateInnerImg(!ifShowInnerImg)
    }
  })
  /** --------------------- 页面新增按钮 --------------------- */

  // /** --------------------- 双击事件 --------------------- */
  function addListener(key, callback) {
    var keyPressCount = 0
    var keyPressTimeout

    document.addEventListener('keydown', function (event) {
      if (event.key.toLowerCase() === key.toLowerCase()) {
        keyPressCount++

        if (keyPressCount === 1) {
          keyPressTimeout = setTimeout(function () {
            keyPressCount = 0
          }, 300) // 设置延迟时间,可以根据需要调整
        } else if (keyPressCount === 2) {
          clearTimeout(keyPressTimeout)
          callback()
          keyPressCount = 0
        }
      }
    })
  }

  addListener('H', () => {
    updateOuterImg(!ifShowOuterImg)
  })

  addListener('G', () => {
    updateInnerImg(!ifShowInnerImg)
  })

  // /** --------------------- 双击事件 --------------------- */

  /** --------------------- 监听列表变化  --------------------- */
  // 目标元素的选择器
  var targetSelector = '.css-1fsnuue'

  // 创建一个 MutationObserver 实例
  var observer = new MutationObserver(function (mutationsList) {
    for (var mutation of mutationsList) {
      if (mutation.type === 'childList') {
        // 检查是否有新的子节点添加或移除
        var targetElement = mutation.target
        var childNodes = targetElement.querySelectorAll(':scope > *')
        var length = childNodes.length

        // 执行你的处理逻辑

        // 外层
        outerImg(ifShowOuterImg)

        // 内层
        innerImg(ifShowInnerImg)
      }
    }
  })

  // 配置 MutationObserver 监听的选项
  var observerOptions = {
    childList: true, // 监听子节点的变化
    subtree: true // 监听所有后代节点的变化
  }

  // 获取目标元素
  var targetElement = document.querySelector(targetSelector)

  if (targetElement) {
    // 开始监听目标元素的变化
    observer.observe(targetElement, observerOptions)
  } else {
    console.log('目标元素不存在!')
  }
  /** --------------------- 监听列表变化  --------------------- */
})()