在做文章类型的web页时,经常会遇到要点开看大图的需求,LightBox2则是在众多产品中比较优秀的一款Jquery插件。配置就不细说了,今天我主要要分享的是:如何在点开大图后,可以通过鼠标滚轮来缩放图片,
1、修改Lightbox源码使支持滚轮缩放
支持鼠标滚轮主要就是把弹出后的框整个绑定上mousewheel事件,打开lightbox.js,找到Lightbox.prototype.build = function() {...}这一段,可以在这里(lightbox初始化的时候)把想要的滚轮事件绑定上去,比如在函数的末尾添加如下代码:
复制代码 代码如下:
// 图片滚轮缩放
this.img = this.$container.find('.lb-image');
this.label = this.$lightbox.find('.lb-dataContainer');
$([this.$overlay[0],this.$lightbox[0]]).bind("mousewheel", function(e){
var flag= e.originalEvent.wheelDelta < 0;
var imgH = self.img.height();
var imgW = self.img.width();
var nw = Math.round(20*imgW/imgH);
var ctH = self.$outerContainer.height();
var ctW = self.$outerContainer.width();
var layH = self.$overlay.height()-20;
var layW = self.$overlay.width()-20;
// 向下
if(flag && imgH>20 && imgW>20) {
self.img.css('height', imgH - 20);
self.img.css('width', imgW - nw);
self.$outerContainer.css('height', ctH - 20);
self.$outerContainer.css('width', ctW - nw);
if(ctW-nw > 240){
self.label.css('width', ctW - nw);
}
} else if(!flag && imgH<layH && imgW<layW) {
self.img.css('height', imgH + 20);
self.img.css('width', imgW + nw);
self.$outerContainer.css('height', ctH + 20);
self.$outerContainer.css('width', ctW + nw);
self.label.css('width', ctW + nw);
}
e.stopPropagation();
return false;
});
代码比较好理解,就是给后面背景和前面图片都添加鼠标滚轮监听,然后高、宽成比例地缩放(向上滚放大、向下滚缩小),我是设定每次高度变化为20个像素,然后宽度是成比例变化。需要注意的地方,应该是在图片的最小缩小大小,和图片放大不能超过屏幕范围的限制。同时,为了更好的体验,一定要加上e.stopPropagation(),且返回false,让浏览器不要滚动。
2、修改Lightbox源码使支持Base64图片
这里说起来可能比较麻烦,先来看一下在使用原生Lightbox时的html代码格式要求:
复制代码 代码如下:
<a href="https://www.jb51.net/img/image.jpg" data-lightbox="test">Image #1</a>
这是一个最简单的弹出图,当点击Image #1时,就会弹出一个lightbox显示img/image.jpg的内容(弹出一个元素<img src="https://www.jb51.net/img/image.jpg" />)。
现在我们来考虑这种情况,如果图片是以Base64编码在服务器是存放在数据库中的?应该就是这样:
复制代码 代码如下:
<a href="https://www.jb51.net/data:image/png;base64,iVBORw..." data-lightbox="test">Image #1</a>