Always hide specific element on tuxun.fun
// ==UserScript==
// @name 防窥屏启动
// @namespace http://tampermonkey.net/
// @version 1.2
// @description Always hide specific element on tuxun.fun
// @author You
// @match https://tuxun.fun/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 选择器数组,用于匹配要隐藏或显示的元素
const selectors = [
'img.leaflet-marker-icon[alt="Marker"][role="button"]',
'#map > div.leaflet-pane.leaflet-map-pane > div.leaflet-pane.leaflet-shadow-pane > img',
'div[id^="leaflet-tooltip-"]',
'#tuxun > div > div > div.confirm'
];
// 隐藏匹配的元素
function hideElements() {
for (const selector of selectors) {
const elements = document.querySelectorAll(selector);
elements.forEach(element => {
if (element) {
element.style.display = 'none';
}
});
}
}
// 显示匹配的元素
function showElements() {
for (const selector of selectors) {
const elements = document.querySelectorAll(selector);
elements.forEach(element => {
if (element) {
element.style.display = 'block';
}
});
}
}
// 根据特定的元素存在与否,决定是否显示或隐藏元素
function checkForTargetSelectorAndToggleElements() {
const targetElement = document.querySelector('#tuxun > div > div > div.im-view > div.round_result > div.round_result_round_info > div');
if (targetElement) {
showElements();
} else {
hideElements();
}
}
// 如果有保存的状态,根据保存的状态决定显示或隐藏元素
if (localStorage.getItem('elementsVisibility') === 'hidden') {
hideElements();
} else {
showElements();
}
// 防窥屏动画效果
// 防窥屏按钮的选择器
const buttonSelector = '#viewer > div > div:nth-child(14) > div.gmnoprint.gm-bundled-control.gm-bundled-control-on-bottom > div > div';
const elts = {
text1: document.createElement("div"),
text2: document.createElement("div")
};
const texts = ["防窥屏启动!"];
const morphTime = 1;
const cooldownTime = 0.25;
let animationDuration = texts.length * (morphTime + cooldownTime);
let textIndex = texts.length - 1;
let time = new Date();
let morph = 0;
let cooldown = cooldownTime;
// 防窥屏动画逻辑
function startPrivacyScreenAnimation() {
elts.text1.textContent = texts[textIndex % texts.length];
elts.text2.textContent = texts[(textIndex + 1) % texts.length];
function doMorph() {
morph -= cooldown;
cooldown = 0;
let fraction = morph / morphTime;
if (fraction > 1) {
cooldown = cooldownTime;
fraction = 1;
}
setMorph(fraction);
}
function setMorph(fraction) {
elts.text2.style.filter = `blur(${Math.min(8 / fraction - 8, 100)}px)`;
elts.text2.style.opacity = `${Math.pow(fraction, 0.4) * 100}%`;
fraction = 1 - fraction;
elts.text1.style.filter = `blur(${Math.min(8 / fraction - 8, 100)}px)`;
elts.text1.style.opacity = `${Math.pow(fraction, 0.4) * 100}%`;
elts.text1.textContent = texts[textIndex % texts.length];
elts.text2.textContent = texts[(textIndex + 1) % texts.length];
}
function doCooldown() {
morph = 0;
elts.text2.style.filter = "";
elts.text2.style.opacity = "100%";
elts.text1.style.filter = "";
elts.text1.style.opacity = "0%";
}
function animate() {
// 添加这个条件来检查opacity是否为0
if (parseFloat(elts.text1.style.opacity) <= 0) {
return;
}
requestAnimationFrame(animate);
let newTime = new Date();
let shouldIncrementIndex = cooldown > 0;
let dt = (newTime - time) / 1000;
time = newTime;
cooldown -= dt;
if (cooldown <= 0) {
if (shouldIncrementIndex) {
textIndex++;
}
doMorph();
} else {
doCooldown();
}
}
animate();
}
// 添加样式到动画元素
Object.values(elts).forEach(elt => {
elt.style.position = 'fixed';
elt.style.top = '50%';
elt.style.left = '50%';
elt.style.transform = 'translate(-50%, -50%)';
elt.style.fontSize = '8em';
elt.style.fontWeight = 'bold';
elt.style.color = 'white';
elt.style.textAlign = 'center';
elt.style.fontFamily = 'fantasy';
elt.style.zIndex = '9999';
elt.style.display = 'none'; // 初始状态为隐藏
});
elts.text1.style.opacity = '0%';
document.body.appendChild(elts.text1);
document.body.appendChild(elts.text2);
// 设置按钮监听器
function setupButtonListener() {
const buttonElement = document.querySelector(buttonSelector);
if (buttonElement) {
buttonElement.addEventListener('click', () => {
startPrivacyScreenAnimation();
elts.text1.style.display = 'block';
elts.text2.style.display = 'block';
setTimeout(() => {
elts.text1.style.display = 'none';
elts.text2.style.display = 'none';
}, animationDuration * 1000);
});
}
}
setupButtonListener();
// 使用MutationObserver检查按钮是否后续被添加
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function() {
setupButtonListener();
checkForTargetSelectorAndToggleElements();
});
});
// 开始观察整个文档
observer.observe(document.body, { childList: true, subtree: true });
})();