在做文章类型的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="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">这样的,则必须对其进行一层封装:
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改动的重点在于支持滚轮缩放。
附上修改过的lightbox http://xiazai.jb51.net/201412/yuanma/lightbox(jb51.net).rar
本文向大家介绍图片旋转、鼠标滚轮缩放、镜像、切换图片js代码,包括了图片旋转、鼠标滚轮缩放、镜像、切换图片js代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家展示了图片旋转、鼠标滚轮缩放、镜像、切换图片多重效果,提供了详细的代码,分享给大家供大家参考,具体内容如下 具体代码: abc.js 以上就是js代码实现图片旋转、鼠标滚轮缩放、镜像、切换图片等效果的代码,希望对大家学习javas
本文向大家介绍JS滚轮控制图片缩放大小和拖动的实例代码,包括了JS滚轮控制图片缩放大小和拖动的实例代码的使用技巧和注意事项,需要的朋友参考一下 具体代码如下所示: 只缩放 总结 以上所述是小编给大家介绍的JS滚轮控制图片缩放大小和拖动的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
我正在一个WordPress网站上工作,作者通常会在大多数帖子中使用iFrames嵌入Google地图。 有没有办法使用Javascript通过鼠标滚轮禁用所有这些缩放?
我的Android应用程序已经有了一个运行正常的Exoplayer实现,我需要知道Exoplayer是否支持在HDCP中播放短跑视频(以及它是如何工作的)。演示应用程序有一些具有“HDCP功能”的示例,但我在代码库中找不到任何与它如何处理这一问题有关的内容(DASH manifest文件本身是否指定了HDCP功能?)。
问题内容: 我想安装已保存到本地驱动器的文件。我在用: 当我跑步时: 我收到以下错误: 我想知道是什么问题? 问题答案: 意味着你需要。
我发现javamail只支持袜子。有什么解决方案可以支持http代理吗?