在做文章类型的web页时,经常会遇到要点开看大图的需求,LightBox2则是在众多产品中比较优秀的一款Jquery插件。配置就不细说了,今天我主要要分享的是:如何在点开大图后,可以通过鼠标滚轮来缩放图片,下面是一个简单的指引:

  1、修改Lightbox源码使支持滚轮缩放

  2、修改Lightbox源码使图片的源可支持base64格式

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

1、修改Lightbox源码使支持滚轮缩放

支持鼠标滚轮主要就是把弹出后的框整个绑定上mousewheel事件,打开lightbox.js,找到Lightbox.prototype.build = function() {...}这一段,可以在这里(lightbox初始化的时候)把想要的滚轮事件绑定上去,比如在函数的末尾添加如下代码:

 1       // 图片滚轮缩放
 2       this.img = this.$container.find('.lb-image');
 3       this.label = this.$lightbox.find('.lb-dataContainer');
 4       $([this.$overlay[0],this.$lightbox[0]]).bind("mousewheel", function(e){
 5           var flag= e.originalEvent.wheelDelta < 0;
 6           var imgH = self.img.height();
 7           var imgW = self.img.width();
 8           var nw = Math.round(20*imgW/imgH);
 9           var ctH = self.$outerContainer.height();
10           var ctW = self.$outerContainer.width();
11           var layH = self.$overlay.height()-20;
12           var layW = self.$overlay.width()-20;
13           // 向下
14           if(flag && imgH>20 && imgW>20) {
15               self.img.css('height', imgH - 20);
16               self.img.css('width', imgW - nw);
17               self.$outerContainer.css('height', ctH - 20);
18               self.$outerContainer.css('width', ctW - nw);
19               if(ctW-nw > 240){
20                   self.label.css('width', ctW - nw);
21               }
22           } else if(!flag && imgH<layH && imgW<layW) {
23               self.img.css('height', imgH + 20);
24               self.img.css('width', imgW + nw);
25               self.$outerContainer.css('height', ctH + 20);
26               self.$outerContainer.css('width', ctW + nw);
27               self.label.css('width', ctW + nw);
28           }
29           e.stopPropagation();
30           return false;
31       });

代码比较好理解,就是给后面背景和前面图片都添加鼠标滚轮监听,然后高、宽成比例地缩放(向上滚放大、向下滚缩小),我是设定每次高度变化为20个像素,然后宽度是成比例变化。需要注意的地方,应该是在图片的最小缩小大小,和图片放大不能超过屏幕范围的限制。同时,为了更好的体验,一定要加上e.stopPropagation(),且返回false,让浏览器不要滚动。

2、修改Lightbox源码使支持Base64图片

这里说起来可能比较麻烦,先来看一下在使用原生Lightbox时的html代码格式要求:

<a href="img/image.jpg" 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..." data-lightbox="test">Image #1</a>

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

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

<a href="data:image/png;base64,iVBORw..." 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">这样的,则必须对其进行一层封装:

1 function initLightbox(){
2     var imgs = $(".lightbox-container").find('img');
3     $.each(imgs,function(i) {
4         var img = $(imgs[i]);
5         img.wrap("<a href='' data-lightbox='test' ></a>");
6     });
7 }

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

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

附上改造过的源码lightbox.js。

转载请注明原址:http://www.cnblogs.com/lekko/p/4141218.html

转载于:https://www.cnblogs.com/lekko/p/4141218.html

Lightbox改造——支持滚轮缩放相关推荐

  1. 图片支持滚轮缩放(缩放中心为鼠标位置)_JS实现图片缩放、拖动、剪裁、预览及保存效果...

    先上效果演示: 功能说明 选择图片区域并剪裁为头像 Html部分 页面分左右两部分:左边显示遮罩图片的缩放与拖动,右边显示剪裁后图片的预览 <div class="content&qu ...

  2. 让你的VB6.0支持滚轮操作

    因为工作的原因,最近装上了VB6.0,突然发现VB6.0不支持滚轮操作,郁闷至极,忍受了一个上午,渡过了一上午没有滚轮的日子...... 中午去微软官方网站查了查相关信息,终于搞定了 1.下载 htt ...

  3. 正交相机下实现滚轮按钮拖动,滚动滚轮缩放的功能

    实现了一个功能,鼠标滚轮键按下可以拖动视野内的物体全体(其实是相机自己在移动),滚动滚轮可以缩放内容(其实是改变相机视野大小) 效果如下 代码奉上 1 using UnityEngine; 2 usi ...

  4. Winform中实现ZedGraph滚轮缩放后自动重新加载数据

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  5. Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  6. 百度地图滚轮缩放,所在点偏移问题

    提出问题 <!DOCTYPE html> <html><head><meta http-equiv="Content-Type" cont ...

  7. 如何使用Google Maps API禁用鼠标滚轮缩放

    我正在使用Google Maps API(v3)在页面上绘制一些地图. 我想做的一件事是在地图上滚动鼠标滚轮时禁用缩放,但我不确定如何. 我已禁用scaleControl(即删除了缩放UI元素),但这 ...

  8. VUE3 实现前台图片标注添加矩形框、图片放大、缩小、鼠标滚轮缩放

    VUE3 实现前台图片标注 功能包括: 鼠标左键拖动添加矩形框标记区域,鼠标点击已绘制的矩形: 选中矩形,并绘制不同选中效果: 鼠标在已绘制的矩形中按住左键拖动,选中并移动矩形:选中矩形后鼠标在选中矩 ...

  9. webstorm在哪里设置Ctrl+鼠标滚轮缩放界面大小教程

    webstorm在哪里设置Ctrl+鼠标滚轮缩放界面大小教程 步骤如下: ①.打开webstorm软件,点击左上角的file ②.点击Setting(设置) ③.点击Editor ④.点击Genera ...

最新文章

  1. 【转载】PHP报错分析(Corrupted encoded data detected in)
  2. poj 3614 Sunscreen(优先队列+贪心)
  3. 二叉搜索树的算法实现
  4. Redis学习之缓存穿透、缓存击穿和缓存雪崩详解
  5. 一篇极好的 CSS 教程
  6. realtek网卡mac硬改工具_七彩虹联合Realtek发布粉色固态硬盘 首发评测
  7. oracle ogg checkpoint,OGG 11g Checkpoint 详解
  8. 经典 55道 MySQL面试题及答案
  9. 笔记本无线网卡资源管理器服务器,笔记本无线网卡怎么打开 笔记本无线上网卡找不到网络解决方法...
  10. 【深度学习】U-Net简介
  11. TypeException: Could not resolve type alias******
  12. 正态分布是离散分布还是连续分布_正态分布,谁与争峰
  13. 域组策略与本地组策略
  14. android系统息屏设置_安卓实现熄屏功能。
  15. C语言编程编程思维培养的重要性,谈编程思维的培养
  16. SearchView基本功能用法
  17. 蛋白序列 | 基于深度学习的蛋白质序列家族分类
  18. 【编译原理】语义分析
  19. 金蝶KIS记账王增加3级明细科目的方法
  20. ArcGIS、Super、MapMapInfo…

热门文章

  1. Nodeparty-SZ-1 深圳聚会活动回顾总结[2012.01.08] - CNode
  2. 容器与容器云——Docker容器基本概念
  3. Netty 学习之旅:ByteBuf 篇之 ByteBuf 内部结构与 API 学习
  4. 公网IP与内网穿透的使用场景和区别
  5. 如何用BitLocker给移动硬盘,U盘加密
  6. JSP网站开发技术两种模式介绍
  7. Linux和Windows硬盘分区设置
  8. android 判断APP是否第一次打开
  9. Unity循环滚动背景效果制作(uGUI)
  10. 网站页面优化必然趋势—WebP 图片!