您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
drag too large image in fullscreen
当前为
// ==UserScript== // @name dA_dragFullscreen // @namespace http://phi.pf-control.de/userscripts/dA_dragFullscreen // @version 1.0 // @description drag too large image in fullscreen // @author Dediggefedde // @match https://www.deviantart.com/*/art/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.12.1/jquery.min.js // @grant none // ==/UserScript== /* globals $*/ /* jshint esnext:true */ (function() { 'use strict'; /* //works, but too much drag on very large images function addDragger(){ var el=$("div.ReactModal__Content--after-open img").not("[dA_dragFullscreen]").attr("dA_dragFullscreen",1).draggable(); if(el.length>0)console.log(el); } setInterval(addDragger,1000); */ let tracking=false; let trackingMoved=false; let copyImg, img, highRec; let cImgW,cImgH,imgW,imgH, winW,winH; function leaveTracking(){ tracking=false; copyImg.hide(); highRec.hide(); } function addDragger(){ let el=$("div.ReactModal__Content--after-open img").not("[dA_dragFullscreen]").attr("dA_dragFullscreen",1).attr("draggable","false"); if(el.length>0){ img=el; winW=window.innerWidth; winH=window.innerHeight; let ratImg=img.width()/img.height(); let ratWin=winW/winH; copyImg=img.clone().attr("dA_dragFullscreen",2).css({ position:"fixed",'max-height':winH*0.8+"px",'max-width':winW*0.8+"px",top:winH*0.1+"px",left:winW*0.1+"px", opacity:0.8,display:"none",cursor:"move",'z-index':2 }); if(ratImg>ratWin){//wider than window copyImg.css({top:(winH-winW*0.8/ratImg)/2+"px"}); console.log("top"); }else{ copyImg.css({left:(winW-winH*0.8*ratImg)/2+"px"}); console.log("left"); } img.after(copyImg); highRec=$("<div id='dA_dragFullscreen_highR'></div>").css({ position:"fixed",border:"2px solid #475c4daa",'box-shadow':"0px 0px 10px white inset",display:"none",'box-sizing':"border-box",'z-index':3 }); img.after(highRec); cImgW=copyImg.width(); cImgH=copyImg.height(); $(document).on("mouseleave",function (ev){ leaveTracking(); }); img.on("mousedown",function(ev){ imgW=img.width(); imgH=img.height(); if(imgW>winW||imgH>winH){ tracking=true; } trackingMoved=false; ev.preventDefault(); ev.stopPropagation(); }).on("mouseup",function(ev){ leaveTracking() ev.preventDefault(); ev.stopPropagation(); }).on("click",function(ev){ if(trackingMoved){ ev.preventDefault(); ev.stopPropagation(); } }).on("mousemove",function(ev){ if(!tracking)return; if(!trackingMoved){ copyImg.show(); highRec.show(); } trackingMoved=true; }); copyImg.on("mousemove",function(ev){ if(!tracking)return; trackingMoved=true; imgW=img.width(); imgH=img.height(); let maxOffX=imgW-winW; let maxOffY=imgH-winH; let highw=winW/imgW*cImgW; let highh=winH/imgH*cImgH; let cImgOff=copyImg.offset(); let x = ev.pageX-cImgOff.left-highw/2; let y = ev.pageY-cImgOff.top-highh/2; if(x<0)x=0; else if(x>cImgW-highw)x=cImgW-highw; if(y<0)y=0; else if(y>cImgH-highh)y=cImgH-highh; highRec.css({width:highw+"px",height:highh+"px",top: cImgOff.top+y+"px", left: cImgOff.left+x+"px"}); let scrollX=x/(cImgW-highw)*maxOffX; let scrollY=y/(cImgH-highh)*maxOffY; console.log(x/(cImgW-highw),y/(cImgH-highh)) $("div.ReactModal__Content--after-open").parent().scrollLeft(scrollX).scrollTop(scrollY); }).on("mouseup",function(ev){ leaveTracking() ev.preventDefault(); ev.stopPropagation(); }); } } setInterval(addDragger,1000); })();