您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Te crea una galería dentro de los post ;D. Agrega zoom e infinity scroll
当前为
// ==UserScript== // @name ModalImg en rule34 // @namespace http://tampermonkey.net/ // @version 2.0 // @description Te crea una galería dentro de los post ;D. Agrega zoom e infinity scroll // @author You // @match http*://rule34.xxx/index.php?page=post&s=list* // @grant none // ==/UserScript== const css =`<style> #blackCoso{ width: 100%; background-color: rgb(0,0,0,0.5); position: fixed; height: 100%; z-index: 999999; display:none; transition: display 2s; } #closeContainer{ background-color: rgb(0,0,0,0.6); color: white;width: 48px;height: 48px; border-radius: 24px;cursor: pointer; text-align: center;margin-right: 10px;font-size: 34px;margin-left: auto;margin-top: 10px; } #currentImg,#currentWeb{ height: 100%; max-height: calc(937px - 140px); width: auto; padding: 70px; position: fixed; display: none; margin: 0; top: 50%; left: 50%; margin-right: -50%; transform: translate(-50%, -50%); } #closeModal:hover { color: red; } </style>` const modal = ` <div id="closeContainer"><a id="closeModal">X</a><div></div></div> <img id="currentImg" src=""> <video id="currentWeb" loop autoplay controls> <source src="" type="video/webm"> </video>` /* Credits to Sam https://twitter.com/sherb */ const loadingSVG = "https://samherbert.net/svg-loaders/svg-loaders/puff.svg" const padre = document.createElement('div'); window.images = {}; let infinitySended = false; let next = document.querySelector('a[alt="next"]'); let paginator = document.querySelector('#paginator'); (function() { padre.id = "blackCoso"; padre.innerHTML = modal + css; padre.dataset.position = 0; var header = document.querySelector('#header'); document.body.appendChild(padre); document.body.insertBefore(padre,document.body.firstChild); var currentImg = document.querySelector('#currentImg'); var blackCoso = document.querySelector('#blackCoso'); currentImg.dataset.zoomed == 'false' var imgContainer = document.querySelector('.content div:first-of-type'); addModalToImages(imgContainer); var closeModal = document.querySelector('#closeModal'); closeModal.addEventListener('click',()=>{blackCoso.style.display = 'none';currentWeb.pause();zoomed(false);}); blackCoso.addEventListener('click',()=>{blackCoso.style.display = 'none';currentWeb.pause();zoomed(false)}); document.addEventListener('keyup',(e)=>{ if(blackCoso.style.display == 'flex' && (e.code == 'ArrowRight' || e.code == 'ArrowLeft')){ var current = Object.keys(window.images).indexOf(blackCoso.dataset.position); var direction = e.code == 'ArrowRight'? 1: -1; if(current >= window.images.length || current < 0){ showModal(Object.keys(window.images)[0]); }else{ showModal(Object.keys(window.images)[current+ direction]); } } }); /*Add zoom when click the image*/ currentImg.addEventListener('click',e=>{ e.stopPropagation(); zoomed(); }); /* Move the zoomed Image*/ currentImg.addEventListener('mousemove',e=>{ if(currentImg.dataset.zoomed == 'true'){ console.log({w:currentImg.offsetWidth,iw:window.innerWidth}); var calcX = currentImg.getBoundingClientRect().width>window.innerWidth?(e.clientX/2 - (currentImg.width/2 -20)) +'px,':'-20px,'; var calcY = currentImg.offsetHeight>=window.innerHeight?(e.clientY - (currentImg.height/2+30)) +'px':'0px'; console.log({calcX,calcY}); currentImg.style.transform = 'scale(5.5) translate(' + calcX + calcY + ')'; } }); /*Inifinity Scroll*/ paginator.style.display= 'none' window.addEventListener('scroll',(e)=>{ if(scrollY>=paginator.getBoundingClientRect().top - 100 && !infinitySended ){ infinityScroll(); } }); })(); var regxImg = /(?<=src=")(.*)(?=("\s*id="image"))/gm; var regxWebM= /(?<=source src=")(.*)(?="\stype\=\"video\/webm\")/gm; function showModal(position=0){ blackCoso.style.display = 'flex'; padre.dataset.position = position; currentWeb.pause(); imageExists(window.images[position]).then((resp)=>{ if(resp.type=='img'){ currentWeb.style.display='none'; currentImg.style.display='block'; currentImg.src = resp.content; }else{ currentWeb.style.display='block'; currentImg.style.display='none'; currentWeb.children[0].src = resp.content; currentWeb.load(); currentWeb.play(); } }).catch((reject)=>{ console.log('no existe D:'); }); currentImg.src = loadingSVG; }; function imageExists(image_url){ return new Promise((result, reject)=>{ var http = new XMLHttpRequest(); http.open('GET', image_url); http.onload = ()=>{ if (http.status === 200){ var bodi = http.response; if(bodi.match(regxImg)){ return result({type:'img', content: bodi.match(regxImg)}); }else if(bodi.match(regxWebM)){ return result({type:'webm', content:bodi.match(regxWebM)}); }else{ return reject('null'); } } } http.send(); }) } function infinityScroll(){ console.log('reach'); infinitySended = true; if(next){ fetch(next.href).then(response=>{return response.text();}) .then(text=>{ var domP = new DOMParser(); var documentNext = domP.parseFromString(text,'text/html'); next = documentNext.querySelector('a[alt="next"]'); var contentViews = documentNext.querySelector('.content div:first-of-type'); addModalToImages(contentViews); document.querySelector('.content').insertBefore(contentViews, paginator); infinitySended = false; });; } } function addModalToImages(imgArray){ Array.from(imgArray.children).forEach((e,i)=>{ e.childElements().forEach(child=>{child.addEventListener('click',(event)=>{ event.preventDefault(); showModal(e.id); })}); //images.push(e.children[0].children[0].src); window.images[e.id] = (e.children[0].href); }); } function zoomed(zoomed = -1){ console.log(currentImg.dataset.zoomed); if(zoomed == -1 && currentImg.dataset.zoomed == 'false'){ currentImg.style.transform = 'scale(5.5) translate(-20px, 230px)'; currentImg.dataset.zoomed = 'true'; currentImg.style.maxHeight= 'none'; }else{ currentImg.style.transform = '';; currentImg.style.maxHeight= ''; currentImg.dataset.zoomed = 'false'; } }