// ==UserScript== // @name 百度贴吧图片点击放大 // @version 1.5.4.20170118 // @description 直接在当前页面查看原图,可缩放,可多开,可拖拽 // @include http://tieba.baidu.com/p/* // @include http://tieba.baidu.com/f?* // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @grant GM_registerMenuCommand // @author lliwhx // @copyright Copyright 2016-2017 lliwhx // @license MIT License // @namespace https://github.com/lliwhx/Userscripts // @downloadURL none // ==/UserScript== //CSS GM_addStyle("#Tie_enlargeImage_parentDIV{position:fixed;z-index:1005;top:0;left:0;}.Tie_enlargeImage{position:absolute;box-shadow:1px 1px 10px #000;cursor:url(http://cur.cursors-4u.net/others/oth-8/oth755.cur),progress;}.Tie_enlargeImage:hover{z-index:1006;}#Tie_setValue_DIV{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background:rgba(0,0,0,0.5);}.Tie_definedDIV{position:absolute;z-index:10000;background:#fff;top:50%;left:50%;transform:translate(-50%,-50%);}.Tie_definedDIV_title{border-bottom:1px solid #f2f2f5;line-height:40px;font-size:15px;font-weight:700;padding:0 0 0 15px;}.Tie_definedDIV_point{padding:20px 40px;}.Tie_groupSubtitle{font-weight:bold;}.Tie_configItem{line-height:30px;margin:0 20px}.Tie_configItem select{margin:0.5em}.Tie_definedDIV_SaveBtn{background-color:#f2f2f5;text-align:center;padding:10px 0;}.Tie_SaveBtn_a{background:#ff8140;color:#fff;font-size:15px;display:inline-block;padding:0 15px;line-height:35px;border-radius:3px;}.Tie_SaveBtn_a:hover{background:#f7671d}"); //数据缓存 var target,imageTarget,imageMouse,imageCount,imageButton,leftX,rightY,docResize, doc = document, docHeight = doc.documentElement.clientHeight-6, docWidth = doc.documentElement.clientWidth-6, parentElement = doc.getElementById("j_p_postlist"), mouseWheel = /Firefox/.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel", definedEvent = GM_getValue("definedEvent","click,click,1,0,1").split(","); var imageEvent = { init:function(event){ //主事件 var e=event,eTarget=e.target; if(e.button===0&&eTarget.className==="BDE_Image"){ var imageSrc = eTarget.src.match(/[a-z0-9]+\.[a-zA-Z]{3,4}$/); if(!imageSrc) return false; var image = doc.createElement("img"); image.classList.add("Tie_enlargeImage"); image.src = "http://imgsrc.baidu.com/forum/pic/item/" + imageSrc[0]; image.onload = function(){ target = this; this.onload = null; imageTarget = [this.width,this.height]; var ifHeight = imageTarget[1]>docHeight,ifX = 6,ifY = 6; if(ifHeight&&imageTarget[0]docWidth){ //右边界 target.style.transform = "translate("+docWidth+"px,"+rightY+"px)"; return false; } if(rightYdocHeight){ //下边界 target.style.transform = "translate("+leftX+"px,"+docHeight+"px)"; return false; } target.style.transform = "translate("+leftX+"px,"+rightY+"px)"; }, Up:function(){ if(!imageButton){ imageTarget[2] = leftX; imageTarget[3] = rightY; leftX = null; rightY = null; } imageMouse = null; imageCount = null; doc.removeEventListener("mousemove",imageEvent.Move); doc.removeEventListener("mouseup",imageEvent.Up); }, Close:function(event){ event.stopPropagation(); if(imageButton){ parentDIV.removeChild(target); target = null; imageTarget = null; imageButton = null; } }, Wheel:function(event){ var e=event,eTarget=e.target; e.preventDefault(); e.stopPropagation(); if(target!==eTarget){ target = eTarget; var reg = eTarget.style.transform.match(/[-0-9.]+/g); imageTarget = [eTarget.width,eTarget.height,parseFloat(reg[0]),parseFloat(reg[1])]; } var wheelKey = definedEvent[3]; if(wheelKey!=="0"){ if((e.ctrlKey&&wheelKey==="1")||(e.altKey&&wheelKey==="2")||(e.shiftKey&&wheelKey==="3")){ var eX = e.clientX,eY = e.clientY, eTargetWidth = imageTarget[0],eTargetHeight = imageTarget[1], ratioX = (eX-imageTarget[2])/eTargetWidth,ratioY = (eY-imageTarget[3])/eTargetHeight, wheelRatio = eTargetWidth+(e.wheelDelta||-e.detail*40)*definedEvent[4]; imageTarget[0] = wheelRatio<150?150:wheelRatio; imageTarget[1] = imageTarget[0]*eTargetHeight/eTargetWidth; imageTarget[2] = eX-(imageTarget[0]*ratioX); imageTarget[3] = eY-(imageTarget[1]*ratioY); eTarget.width = imageTarget[0]; eTarget.style.transform = "translate("+imageTarget[2]+"px,"+imageTarget[3]+"px)"; return false; } } if(imageTarget[1]0||wheelY0?6:docHeight-imageTarget[1]; } imageTarget[3] = wheelY; eTarget.style.transform = "translate("+imageTarget[2]+"px,"+wheelY+"px)"; } }; //创建DIV父框架 var parentDIV = doc.createElement("div"); parentDIV.id = "Tie_enlargeImage_parentDIV"; doc.body.appendChild(parentDIV); parentDIV = doc.getElementById("Tie_enlargeImage_parentDIV"); //事件委托 parentElement.addEventListener("click",imageEvent.StopPropagation,true); parentElement.addEventListener(definedEvent[0],imageEvent.init,true); parentDIV.addEventListener("mousedown",imageEvent.Down); parentDIV.addEventListener(definedEvent[1],imageEvent.Close); parentDIV.addEventListener(mouseWheel,imageEvent.Wheel); //清空缓存 parentElement=null; //自定义设置 var userEvent = { init:function(){ this.create(); this.Event(); }, create:function(){ var definedDIV = doc.createElement("div"); //创建自定义DIV框架 definedDIV.id = "Tie_setValue_DIV"; definedDIV.innerHTML = "
自定义设置
请保证鼠标在图片上进行操作
默认支持鼠标左键拖拽图片
查看图片
关闭图片
上移图片
缩放图片+
"; doc.body.appendChild(definedDIV); definedDIV = null; }, Event:function(){ var definedDIV = doc.getElementById("Tie_setValue_DIV"), parentElement = doc.getElementById("j_p_postlist"), setValue = doc.getElementsByName("Tie_setValue"), oldDefinedEvent = definedEvent.concat(); for(var i=0;i<5;i++){ setValue[i].value = oldDefinedEvent[i]; } if(setValue[3].value==="0")setValue[4].style.visibility = "hidden"; setValue[3].onchange = function(){ setValue[4].style.visibility = this.value==="0"?"hidden":"visible"; }; doc.getElementById("Tie_setValue_a").onclick = function(){ for(var i=0;i<5;i++){ definedEvent[i] = setValue[i].value; } if(oldDefinedEvent[0]!==definedEvent[0]){ parentElement.removeEventListener(oldDefinedEvent[0],imageEvent.init,true); parentElement.addEventListener(definedEvent[0],imageEvent.init,true); } if(oldDefinedEvent[1]!==definedEvent[1]){ parentDIV.removeEventListener(oldDefinedEvent[1],imageEvent.Close); parentDIV.addEventListener(definedEvent[1],imageEvent.Close); } this.onclick = null; setValue[3].onchange = null; doc.body.removeChild(definedDIV); GM_setValue("definedEvent",definedEvent.toString()); definedDIV = null;parentElement = null;setValue = null;oldDefinedEvent = null; }; } }; if(!GM_getValue("definedEvent")){ userEvent.init(); } GM_registerMenuCommand("自定义设置", function(){ if(!doc.getElementById("Tie_setValue_DIV")) userEvent.init(); }); window.addEventListener("resize", function(){ if(typeof docResize!==undefined){ clearTimeout(docResize); } docResize = setTimeout(function(){ docHeight = doc.documentElement.clientHeight-6; docWidth = doc.documentElement.clientWidth-6; },334); });