您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Place images on pixelplace.io
- // ==UserScript==
- // @name PixelPlace Image Overlayer
- // @namespace http://tampermonkey.net/
- // @version v3
- // @description Place images on pixelplace.io
- // @author Ghost
- // @match https://pixelplace.io/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- let image = document.createElement('img');
- image.style.position = 'absolute';
- image.style.opacity = '0.5'; // 50% transparent by default
- let imageSize = 100; // Initial image size
- let imageUrl = ''; // URL for image
- let originalImageUrl = ''; // Original URL for image
- let locked = false; // Image lock state
- let lockImageUrl = 'https://i.imgur.com/RmYtAGW.jpg'; // URL for lock image
- let copyrightElement = document.getElementById('copyright');
- // Create buttons for resizing and uploading images
- let uploadButton = createButton('Upload Image', '150px', '10%', '-50%', 'translateY(-50%)');
- let biggerButton = createButton('Bigger', '150px', '25%', '-50%', 'translateY(-50%)');
- let smallerButton = createButton('Smaller', '150px', '40%', '-50%', 'translateY(-50%)');
- let lockButton = createButton('Lock Image', '150px', '55%', '-50%', 'translateY(-50%)');
- // Create opacity slider
- let opacitySlider = createSlider('Opacity', '150px', '70%', '-50%', 'translateY(-50%)');
- // Create menu button
- let menuButton = createButton('Menu', '80px', '5%', '-50%', 'translateY(-50%)');
- menuButton.style.display = ''; // Ensure menu button is visible initially
- // Function to create a button
- function createButton(text, width, top, topTranslation, transform) {
- let button = document.createElement('button');
- button.textContent = text;
- button.style.position = 'fixed';
- button.style.left = '50%';
- button.style.transform = 'translateX(-50%) ' + transform; // Center horizontally
- button.style.width = width;
- button.style.top = top;
- button.style.display = 'none'; // Initially invisible
- // Adding rainbow outline to the buttons
- button.style.outline = '3px solid transparent';
- button.style.outlineOffset = '-3px';
- button.style.animation = 'rainbow 2s infinite';
- document.body.appendChild(button);
- return button;
- }
- // Function to create a slider
- function createSlider(text, width, top, topTranslation, transform) {
- let label = document.createElement('label');
- label.textContent = text;
- label.style.position = 'fixed';
- label.style.left = '50%';
- label.style.transform = 'translateX(-50%) ' + transform; // Center horizontally
- label.style.width = width;
- label.style.top = top;
- label.style.display = 'none'; // Initially invisible
- let slider = document.createElement('input');
- slider.type = 'range';
- slider.min = '0';
- slider.max = '100';
- slider.value = '50'; // Starting at 50% opacity
- slider.style.width = '100%';
- slider.style.position = 'absolute';
- slider.style.left = '0';
- slider.style.top = '20px'; // Position below the label
- slider.style.outline = '1px solid blue'; // Adding outline to the slider
- slider.style.display = 'none'; // Initially invisible
- label.appendChild(slider);
- document.body.appendChild(label);
- return slider;
- }
- // Function to toggle the visibility of other buttons
- function toggleMenu() {
- let buttons = [uploadButton, biggerButton, smallerButton, lockButton, opacitySlider];
- for (let button of buttons) {
- button.style.display = button.style.display === 'none' ? '' : 'none';
- }
- opacitySlider.parentNode.style.display = opacitySlider.parentNode.style.display === 'none' ? '' : 'none';
- }
- // Event listener for menu button
- menuButton.addEventListener('click', toggleMenu);
- // Function to place the image at the clicked position
- function placeImage(event) {
- if (!locked && imageUrl) {
- const x = event.clientX + window.scrollX;
- const y = event.clientY + window.scrollY;
- image.src = imageUrl;
- image.style.left = x + 'px';
- image.style.top = y + 'px';
- image.style.width = imageSize + 'px';
- // Adding rainbow outline to the submitted image
- image.style.outline = '3px solid transparent';
- image.style.outlineOffset = '-3px';
- image.style.boxShadow = '0 0 0 3px white inset'; // Adding white inset outline
- image.style.animation = 'rainbow 2s infinite';
- document.body.appendChild(image);
- }
- }
- // Function to toggle image lock
- function toggleLock() {
- locked = !locked;
- if (!locked) {
- image.src = originalImageUrl; // Restore original image when unlocked
- }
- updateOpacity(); // Update opacity only if the image is not locked
- updateCopyright();
- }
- // Function to update the opacity based on lock state and slider
- function updateOpacity() {
- if (!locked) {
- let opacityValue = opacitySlider.value;
- image.style.opacity = opacityValue / 100; // Convert to 0-1 range for CSS
- }
- }
- // Function to update the text in the copyright element
- function updateCopyright() {
- if (locked) {
- copyrightElement.textContent = 'Image Locked';
- copyrightElement.style.color = 'red';
- } else {
- copyrightElement.textContent = 'Image Not Locked';
- copyrightElement.style.color = 'green';
- }
- }
- // Event listener for mouse click to place the image
- document.addEventListener('click', placeImage);
- // Event listener for resizing the image bigger
- biggerButton.addEventListener('click', function() {
- imageSize += 10;
- image.style.width = imageSize + 'px';
- });
- // Event listener for resizing the image smaller
- smallerButton.addEventListener('click', function() {
- if (imageSize > 10) {
- imageSize -= 10;
- image.style.width = imageSize + 'px';
- }
- });
- // Event listener for uploading an image
- uploadButton.addEventListener('click', function() {
- const fileInput = document.createElement('input');
- fileInput.type = 'file';
- fileInput.accept = 'image/*';
- fileInput.addEventListener('change', function() {
- const file = fileInput.files[0];
- const reader = new FileReader();
- reader.onload = function(e) {
- imageUrl = e.target.result;
- originalImageUrl = imageUrl; // Store original image URL
- if (!locked && imageUrl) {
- image.src = imageUrl;
- image.style.width = imageSize + 'px';
- }
- };
- reader.readAsDataURL(file);
- });
- fileInput.click();
- });
- // Event listener for locking/unlocking the image
- lockButton.addEventListener('click', toggleLock);
- // Event listener for the opacity slider
- opacitySlider.addEventListener('input', function() {
- updateOpacity(); // Adjust opacity in real-time
- });
- // Event listener for keyboard controls
- document.addEventListener('keydown', function(event) {
- // Down arrow key: Toggle image lock
- if (event.key === 'ArrowDown') {
- toggleLock();
- }
- });
- // Prevent interactions with elements behind the image
- image.addEventListener('mousedown', function(event) {
- event.stopPropagation();
- });
- // Ensure mouse events pass through the image
- image.style.pointerEvents = 'none';
- // Initialize the copyright text
- updateCopyright();
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址