浏览网页的时候,有时候图片局限于网站而很小,即便原来是一张大图。为了偷懒不想新标签页打开图片,于是写了个小小的 bookmarklet 来直接在图片上通过鼠标滚轮来进行缩放。
javascript:(function(){var imgs=document.getElementsByTagName('img');var rate=rate||0.1;for(var j=0,l=imgs.length;j<l;j++){(function(i){var item=imgs[i];item.onmousewheel=function(e){e=e||window.event;zoom(imgs[i],mouseWheelRes(e),rate);};if(item.addEventListener){item.addEventListener('DOMMouseScroll',function(e){zoom(imgs[i],mouseWheelRes(e),-rate);},false);}})(j);}function zoom(img,inOut,rate){if(inOut>0){img.width=img.width*(1+rate);img.height=img.height*(1+rate);}else{img.width=img.width*(1-rate);img.height=img.height*(1-rate);}}function mouseWheelRes(e){e.preventDefault?e.preventDefault():e.returnValue=false;e.stopPropagation?e.stopPropagation():e.cancelBubble=true;return e.wheelDelta||e.detail;}})();
可读性良好一些的代码如下:
function scrollZoomImg(rate) {
var imgs = document.getElementsByTagName('img');
var rate = rate || 0.1;
for (var j = 0, l = imgs.length; j < l; j++) {
(function(i) {
var item = imgs[i];
item.onmousewheel = function(e) {
e = e || window.event;
zoom(imgs[i], mouseWheelRes(e), rate);
};
if (item.addEventListener) {
// for firefox
item.addEventListener('DOMMouseScroll',
function(e) {
// use the opposite value in firefox
zoom(imgs[i], mouseWheelRes(e), -rate);
},
false);
}
})(j);
}
function zoom(img, inOut, rate) {
if (inOut > 0) {
// scroll up
img.width = img.width * (1 + rate);
img.height = img.height * (1 + rate);
} else {
// scroll down
img.width = img.width * (1 - rate);
img.height = img.height * (1 - rate);
}
}
function mouseWheelRes(e) {
e.preventDefault ? e.preventDefault() : e.returnValue = false;
e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;
return e.wheelDelta || e.detail;
}
}
// call the method
scrollZoomImg()
关于鼠标滚轮事件的浏览器不同表现,可以参考文底的 References。这个地方主要是 Firefox 比较特殊,不是使用 mousewheel 事件而是使用 DOMMouseScroll 事件,并且大小写敏感。Firefox 使用 detail 而不是 wheelDelta 来表述滚动值;用负值来表示向上滚动而不是如别的浏览器那般用正值。至于值的大小关系不大。
所以,上面代码的逻辑很直接,获取所有的图片,绑定鼠标滚轮事件。调用 zoom 的时候,对 Firefox 返回的值做了取反操作。提供了一个缩放的比例,默认以 0.1 的速率缩放。
由于只是一个小工具,所以并没有试图作猜测判读是否是缩略图链接到大图的形式,从而载入清晰的大图。这里的假设是原本是一张清晰的大图,但限于页面布局缩小而难以看清。所以,对于就是那么大的图片,放大自然会变得模糊。
确切地说,这个 bookmarklet 用得不多,但确也时不时使用。
References
👿 最近出产挺多的 😆
相反,极其低产的说 😎
收藏了,谢谢!