如何在lightbox中添加鼠标滚轮缩放和Base64图像支持

如何在lightbox中添加鼠标滚轮缩放和Base64图像支持

 

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=”img/image.jpg” rel=”external nofollow” data-lightbox=”test”>Image #1</a>

 

这是一个最简单的弹出图,当点击Image #1时,就会弹出一个lightbox显示img/image.jpg的内容(弹出一个元素<img src=”img/image.jpg” />)。

现在我们来考虑这种情况,如果图片是以Base64编码在服务器是存放在数据库中的?应该就是这样:

 

<a href=”data:image/png;base64,iVBORw…” rel=”external nofollow” rel=”external nofollow” data-lightbox=”test”>Image #1</a>

 

问题来了,href长度在IE下是有限制的,一张大的图片,不可能放在href字段中,图片将会被阉割(只显示上半部分)。

另外还有一种普遍情况,如果我是先显示小图,点击小图看大图,应该就是这样:

 

<a href=”data:image/png;base64,iVBORw…” rel=”external nofollow” rel=”external nofollow” data-lightbox=”test”>

<img src=”data:image/png;base64,iVBORw…” />

</a>

 

好了,这有两份重复的base64数据,而且都是从服务器端传过来的,耗时耗带宽啊。

所以我按我的需求进行了改造,代码很简单,修改Lightbox.prototype.start = function($link) {…} 中的子函数addToAlbum:

 

function addToAlbum($link) {

self.album.push({

// link: $link.attr(‘href’),

link: $link.children().attr(“src”),

title: $link.attr(‘data-title’) || $link.attr(‘title’)

});

}

 

注释掉的部分就是原来的,$link是前面HTML代码中的a标签,改过后addToAlbum函数的作用是:在设置弹出图片的src时,不再从原始的的href中取字符作为弹出img标签的src,而是直接从a标签的子元素中找src属性,由于src属性的长度无限制,所以它不会存在图片截断的问题。

 

3、将Lightbox应用到已有的文章

 

第2节已经讲到了Lightbox使用时HTML有一定的格式,如果已有的文章中的图片是<img src=”img/image.jpg”>这样的,则必须对其进行一层封装:

 

function initLightbox(){

var imgs = $(“.lightbox-container”).find(‘img’);

$.each(imgs,function(i) {

var img = $(imgs[i]);

img.wrap(“<a href=” data-lightbox=’test’ ></a>”);

});

}

 

其中,“lightbox-container”是文章所在容器的class。initLightbox函数应放置在页面加载ready时,它会把文章中的所有img标签都封装成为lightbox的格式。

 

本文就写到这了,第2、3点大家可以看自己的使用场景去使用,lightbox改动的重点在于支持滚轮缩放。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/115268.html<

(0)
管理的头像管理
上一篇2025-02-18 01:27
下一篇 2025-02-18 01:28

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注