博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lightbox改造——支持滚轮缩放
阅读量:5789 次
发布时间:2019-06-18

本文共 2820 字,大约阅读时间需要 9 分钟。

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

  

  

  

 

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

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

 

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

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

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

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

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

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

    好了,这有两份重复的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("");        6     });7 }

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

   

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

    附上改造过的源码。    

    转载请注明原址:                       

 

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

你可能感兴趣的文章
svn命令在linux下的使用
查看>>
There is insufficient system memory to run this query 错误
查看>>
基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号
查看>>
我们奋斗着并将持续奋斗 ----暨清华D-Lab创新基地揭牌仪式
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>
【MyBatis框架】MyBatis入门程序第二部分
查看>>
一分钟了解阿里云产品:网络安全专家服务
查看>>
自定义View以及事件分发总结
查看>>
人生第一个过万 Star 的 GitHub 项目诞生
查看>>
Mac下配置多个SSH-Key (gitLab)
查看>>
Gradle之module间依赖版本同步
查看>>
一些kindle资源
查看>>
Node第一天
查看>>
【开源】多多客发布 3.0.0-alpha.6,Koa+Vue+Taro最佳实践
查看>>
页面搭建工具总结及扩展架构思考
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
SpringCloud使用Prometheus监控(基于Eureka)
查看>>
10g手动创建数据库
查看>>
集群之RHCS
查看>>
auto_install_zabbix.sh
查看>>