CTRL+Z 隐藏图片

通过按Ctrl+Z键依次切换:开启隐藏图片、开启缩小图片、开启隐藏图片但保持布局、关闭

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         CTRL+Z 隐藏图片
// @name:zh      CTRL+Z 隐藏图片
// @name:en      CTRL+Z Hide Images
// @name:ja      CTRL+Z 画像を非表示
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  通过按Ctrl+Z键依次切换:开启隐藏图片、开启缩小图片、开启隐藏图片但保持布局、关闭
// @description:zh  通过按Ctrl+Z键依次切换:开启隐藏图片、开启缩小图片、开启隐藏图片但保持布局、关闭
// @description:en  Press Ctrl + Z to toggle between hiding images, scaling images, hiding images while maintaining layout, and closing the effects.
// @description:ja  Ctrl + Z を押して画像の非表示、画像の縮小、画像の非表示(レイアウトを維持)、効果を閉じるを切り替えます。
// @author       aotmd
// @match        *://*/*
// @noframes
// @license MIT
// @run-at document-body
// @grant       GM_setValue
// @grant       GM_getValue
// ==/UserScript==
 
( function() {
	let SETTING = {
        /*可以自定义快捷键,单个字母(ctrl+[key]生效);Customize shortcut keys, single letter (ctrl + [key] is effective);ショートカットキーをカスタマイズして、単一の文字(ctrl + [key])が有効です*/
        key:"Z",
		/*也对background-image设置的图片进行隐藏;Also hides images set with background-image.;background-image で設定された画像も非表示にします。*/
		background_image: false,
		/*background-image的宽高大于此值时才生效;The effect only applies when the width and height of the background-image are greater than this value.;background-imageの幅と高さがこの値より大きい場合にのみ効果が適用されます。*/
		width: 100,
		height: 100,
	}
 
 
	let url = window.location.origin;
	const head = document.getElementsByTagName( "head" )[ 0 ];
 
	let List = GM_getValue( "List" ) ? GM_getValue( "List" ) : {};
	let flag = List[ url ] ? List[ url ] : {};
 
	const hideNode = createStyleNode( "hideNode", "img{display:none!important;}.hide-background-image{background-image:none!important;}" );
	const scaleNode = createStyleNode( "scaleNode", "img{transform: scale(0.5);}.hide-background-image{background-size: 50% 50% !important;background-position: center;}" );
	const opacityNode = createStyleNode( "opacityNode", "img{transform: scale(0.5);opacity: 0!important; transition: opacity 0.3s ease-in-out;}.hide-background-image{background-size: 0 0 !important;background-position: center;transition: background-size 0.3s ease-in-out;}" );
 
	head.appendChild( hideNode );
	head.appendChild( scaleNode );
	head.appendChild( opacityNode );
 
	applyStyles();
 
	function applyStyles() {
		if ( flag ) {
			// 设置隐藏图片样式;Set hidden image style;隠れた画像スタイルを設定します。
			hideNode.type = flag.hide ? "text/css" : "text";
			// 设置缩小图片样式;Set reduced image style;縮小された画像スタイルを設定します。
			scaleNode.type = flag.scale ? "text/css" : "text";
			// 设置透明隐藏图片样式;Set transparent hidden image style;透明な非表示画像スタイルを設定します。
			opacityNode.type = flag.opacity ? "text/css" : "text";
		}
	}
 
	function createStyleNode( id, css ) {
		const styleNode = document.createElement( "style" );
		styleNode.id = id;
		styleNode.innerHTML = css;
		styleNode.type = "text";
		return styleNode;
	}
    if(SETTING.key.charCodeAt(0)>97){
        SETTING.key=String.fromCharCode(SETTING.key.charCodeAt(0)-32);
    }
    if(SETTING.key.charCodeAt(0)<65 ||SETTING.key.charCodeAt(0)>97){
        console.error("快捷键设置错误,请设置为单个字母。;The shortcut key setting is incorrect. Please set it to a single letter. ;ショートカットキーの設定が間違っています。1文字に設定してください。");
        return;
    }
	document.addEventListener( "keydown", function( e ) {
		if ( e.ctrlKey && e.keyCode == SETTING.key.charCodeAt(0) ) {
			if ( flag.hide ) { //第二次按,生效scale;Second press, scale effect;2回目の押し, スケール効果
				flag = {}
				flag.scale = true;
			} else if ( flag.scale ) { //第三次按,生效透明;Third press, transparent effect;3回目の押し, 透明な効果
				flag = {}
				flag.opacity = true;
			} else if ( flag.opacity ) { //第四次按,取消全部;Fourth press, cancel all;4回目の押し, すべてキャンセル
				flag = {}
			} else { //第一次按生效hide;First press, hide effect;最初の押し, 非表示効果
				flag = {}
				flag.hide = true;
			}
			applyStyles();
			//重新读取同步数据;Reload synchronous data;同期データを再読み込み
			List = GM_getValue( "List" ) ? GM_getValue( "List" ) : {};
 
			if(Object.keys(flag).length === 0){
				delete List[ url ]
			}else{
				List[ url ] = flag;
			}
			GM_setValue( "List", List );
		}
	} );
	if ( SETTING.background_image ) {
		window.addEventListener( 'load', function() {
			// 加载完成后执行的代码;Code to run after loading;読み込み後に実行するコード
			// 选择所有元素;Select all elements;すべての要素を選択
			var elements = document.querySelectorAll( '*' );
 
			// 遍历所有元素;Iterate over all elements;すべての要素を繰り返し処理
			elements.forEach( function( element ) {
				// 获取元素的 computedStyle;Get the computed style of the element;要素の計算済みスタイルを取得
				var style = window.getComputedStyle( element );
				// 检查是否有 background-image 属性;Check if the element has a background-image property;要素が background-image プロパティを持っているかどうかを確認
				if ( style.getPropertyValue( 'background-image' ) !== 'none' &&
					style.getPropertyValue( 'background-image' ).includes( 'url' ) &&
					parseInt( style.width ) > SETTING.width &&
					parseInt( style.height ) > SETTING.height ) {
					// 添加一个新的类来隐藏元素;Add a new class to hide the element;要素を非表示にする新しいクラスを追加
					element.classList.add( 'hide-background-image' );
				}
			} );
		}, false );
	}
} )();