您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
When on an anime/manga/character page, you will automatically cycle through other available pictures.
- // ==UserScript==
- // @name MyAnimeList(MAL) - Thumbnail Switch
- // @namespace https://greasyfork.org/users/16080
- // @version 1.0.4
- // @description When on an anime/manga/character page, you will automatically cycle through other available pictures.
- // @author Cpt_mathix
- // @match https://myanimelist.net/anime/*
- // @match https://myanimelist.net/manga/*
- // @match https://myanimelist.net/character/*
- // @match https://myanimelist.net/anime.php?*
- // @match https://myanimelist.net/manga.php?*
- // @match https://myanimelist.net/character.php?*
- // @exclude /^https?:\/\/myanimelist\.net\/(anime|manga|character)\/[^0-9]+/
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // find image in html + get anime/manga/character id
- let anchor = document.getElementById("addtolist") || document.getElementById("profileRows");
- let canvas = anchor.parentElement.firstElementChild.firstElementChild;
- let image = canvas.firstElementChild;
- let id = canvas.href.match(/\/\d+\//g)[0].replace(/\//g, "");
- // get type (anime/manga/character)
- let type;
- if (/https:\/\/myanimelist.net\/anime\/.*/.test(canvas.href)) {
- type = "anime";
- } else if (/https:\/\/myanimelist.net\/manga\/.*/.test(canvas.href)) {
- type = "manga";
- } else if (/https:\/\/myanimelist.net\/character\/.*/.test(canvas.href)) {
- type = "characters";
- }
- // remove default click behavior
- canvas.href = "javascript:;";
- // change some styling for image cycling
- canvas.style.position = "relative";
- canvas.style.height = "350px";
- canvas.style.display = "block";
- image.style.transition = "opacity 1s ease-in-out";
- let curr = 0;
- let images = null;
- // fetch all images for given type and id
- fetch('https://api.jikan.moe/v4/' + type + '/' + id + '/pictures').then(function(response) {
- return response.json();
- }).then(function(json) {
- images = json.data;
- // shuffle images in random order
- for (let i = images.length - 1; i > 0; i--) {
- const j = Math.floor(Math.random() * (i + 1));
- [images[i], images[j]] = [images[j], images[i]];
- }
- // make sure that the first random image is not the default image
- if (images[0].small === image.src) {
- images.push(images.shift());
- }
- cycle();
- // cycle through images each 3000ms (3s)
- setInterval(cycle, 3000);
- });
- // cycle when clicking
- canvas.addEventListener("click", function(event) {
- event.preventDefault();
- if (images) {
- cycle();
- }
- });
- function cycle() {
- if (++curr === images.length) {
- curr = 0;
- }
- let new_image = document.createElement("img");
- new_image.classList.add("ac");
- new_image.setAttribute("style", "width: 100%; max-height: 350px; position: absolute; opacity: 1; transition: opacity 1s ease-in-out;");
- new_image.onload = function() {
- canvas.insertBefore(new_image, canvas.firstChild);
- canvas.children[0].style.opacity = 100;
- canvas.children[1].style.opacity = 0;
- setTimeout(function() {
- canvas.children[0].style.position = "";
- canvas.children[1].remove()
- }, 1000);
- }
- let next_image_src = images[curr].jpg.image_url;
- new_image.src = next_image_src;
- }
- })();