漂亮的LightBox图片画廊插件开发
来源:互联网 发布:修改注册表优化弹道cf 编辑:程序博客网 时间:2024/04/30 07:07
今天给大家带来的是LightBox图片画廊插件的实现方法,用jQuery制作出一款简洁、漂亮的图片画廊,下面我们先看一下实现的效果:
功能点如下:
1.点击小图片,弹出对应的大图片
2.每次点击小图或者点击切换按钮切换图片时,在加载图片时会有加载动画效果
3.每张大图片出来时,从屏幕上方以动画效果出来
4.加载时宽高各为屏幕宽高的一半,加载完成显示的图片大小为图片实际大小(这个效果也比较好看,由小到大的动画)
5.每张小图片对应的大图片尺寸不一,弹出的图片显示的高度和宽度也是变化的
6.鼠标悬浮在图片左侧或者右侧会有切换图片,点击即可切换图片
7.图片下方有图片描述和索引
8.点击黑色遮罩层即可关闭图片,点击在图片右下角的关闭按钮也可关闭图片
这是我们最终实现的效果图,点击小图片之后弹出的对应的大图,中间有过渡动画,效果非常好看。下面我们来看一下LightBox插件的实现方法
一、首先我们要引入jQuery,我这里用的是2.1.1版本的
<script src="js/jquery-2.1.1.js"></script>二、引入好jQuery后,在我们显示小图片的地方加入以下HTML代码:
这样三组小图片就在我们的页面中创建好了,效果如下:<h1>第一组图片</h1><div> <img data-role="lightbox" data-source="Images/1-1.jpg" data-group="group-1" data-id="1" data-caption="风景名画" width="100" height="100" src="Images/1-1.jpg"/> <img data-role="lightbox" data-source="Images/1-2.jpg" data-group="group-1" data-id="2" data-caption="非常好看的图片" width="100" height="100" src="Images/1-2.jpg"/> <img data-role="lightbox" data-source="Images/1-3.jpg" data-group="group-1" data-id="3" data-caption="风景图鉴赏" width="100" height="100" src="Images/1-3.jpg"/> <img data-role="lightbox" data-source="Images/1-4.jpg" data-group="group-1" data-id="4" data-caption="名图赏析" width="100" height="100" src="Images/1-4.jpg"/> <img data-role="lightbox" data-source="Images/1-5.jpg" data-group="group-1" data-id="5" data-caption="图片之家" width="100" height="100" src="Images/1-5.jpg"/> <img data-role="lightbox" data-source="Images/1-6.jpg" data-group="group-1" data-id="6" data-caption="大家跟我来赏图" width="100" height="100" src="Images/1-6.jpg"/></div><h1>第二组图片</h1><div> <img data-role="lightbox" data-source="Images/2-1.jpg" data-group="group-2" data-id="1" data-caption="美图" width="100" height="100" src="Images/2-1.jpg"/> <img data-role="lightbox" data-source="Images/2-2.jpg" data-group="group-2" data-id="2" data-caption="好图看不停" width="100" height="100" src="Images/2-2.jpg"/> <img data-role="lightbox" data-source="Images/2-3.jpg" data-group="group-2" data-id="3" data-caption="美图秀秀" width="100" height="100" src="Images/2-3.jpg"/> <img data-role="lightbox" data-source="Images/2-4.jpg" data-group="group-2" data-id="4" data-caption="世界超跑" width="100" height="100" src="Images/2-4.jpg"/> <img data-role="lightbox" data-source="Images/2-5.jpg" data-group="group-2" data-id="5" data-caption="豪车欣赏" width="100" height="100" src="Images/2-5.jpg"/> <img data-role="lightbox" data-source="Images/2-6.jpg" data-group="group-2" data-id="6" data-caption="世界名车" width="100" height="100" src="Images/2-6.jpg"/></div><h1>第三组图片</h1><div> <img data-role="lightbox" data-source="Images/3-1.jpg" data-group="group-3" data-id="1" data-caption="美丽的花朵" width="100" height="100" src="Images/3-1.jpg"/> <img data-role="lightbox" data-source="Images/3-2.jpg" data-group="group-3" data-id="2" data-caption="苹果logo" width="100" height="100" src="Images/3-2.jpg"/> <img data-role="lightbox" data-source="Images/3-3.jpg" data-group="group-3" data-id="3" data-caption="山涧小溪" width="100" height="100" src="Images/3-3.jpg"/> <img data-role="lightbox" data-source="Images/3-4.jpg" data-group="group-3" data-id="4" data-caption="破土而生" width="100" height="100" src="Images/3-4.jpg"/> <img data-role="lightbox" data-source="Images/3-5.jpg" data-group="group-3" data-id="5" data-caption="黄昏美景" width="100" height="100" src="Images/3-5.jpg"/> <img data-role="lightbox" data-source="Images/3-6.jpg" data-group="group-3" data-id="6" data-caption="美不胜收" width="100" height="100" src="Images/3-6.jpg"/></div>
我们要实现点击小图片,弹出对应的大图片的效果,并且弹出的图片水平垂直居中显示。在img标签中,我们定义了几个自定义属性,他们的作用如下:
data-role="lightbox" 表示这个元素要启用lightboxdata-source="" 点开之后放大版图片的地址data-group="" 标示当前图片的组别data-id="" 图片的唯一标示data-caption="" 当前图片的描述文字
三、CSS样式
样式我写好了,粘在下面,大家直接拷过去放在css文件里用就好了
body,div,dl,dd,dt,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:after,a:before{content:'';}abbr,acronym{border:0;}body{font:12px/1.5 '微软雅黑',tahoma,arial,'Hiragino Sans GB',宋体,sans-serif;}.clearfix:after{visibility:hidden;display:block;font-size:0;content:'';clear:both;height:0;}.clearfix{zoom:1;}.text-ellipsis{white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;}#G-lightbox-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#000;opacity:.5;z-index:10000;display:none;}#G-lightbox-popup{position:fixed;left:50%;top:0;z-index:10001;display:none;}#G-lightbox-popup .lightbox-pic-view{position:relative;border:5px solid #fff;border-radius:3px; overflow: hidden; background:#fff url(../Images/loading.gif) no-repeat center center;}#G-lightbox-popup .lightbox-pic-view .lightbox-btn{position:absolute;top:0;width:40%;height:100%;z-index:1;}#G-lightbox-popup .lightbox-pic-view .lightbox-prev-btn{left:0;}#G-lightbox-popup .lightbox-pic-view .lightbox-next-btn{right:0;}#G-lightbox-popup .lightbox-pic-view .lightbox-prev-btn-show{background:url(../Images/prev.png) no-repeat left center;}#G-lightbox-popup .lightbox-pic-view .lightbox-next-btn-show{background:url(../Images/next.png) no-repeat right center;}#G-lightbox-popup .lightbox-pic-view .lightbox-image{display:block;}#G-lightbox-popup .lightbox-pic-caption{position:relative;margin:0 5px;margin-top:-60px;background:rgba(0,0,0,.5);}#G-lightbox-popup .lightbox-pic-caption .lightbox-caption-area{color:#fff;padding:10px 5px;}#G-lightbox-popup .lightbox-pic-caption .lightbox-caption-area .lightbox-of-index{color:#999;}#G-lightbox-popup .lightbox-pic-caption .lightbox-close-btn{position:absolute;width:27px;height:27px; background:url(../Images/close.png) no-repeat center center; right:10px; top:13px; z-index:2; cursor:pointer;}
四、开始LightBox插件开发
我们先创建一个lightbox.js文件,放在我们项目的js文件夹下,然后打开lightbox.js文件进行代码编写。
JS代码部分如下:
(function($){ var LightBox=function(){ var self=this; //创建遮罩和弹出框 this.popupMask=$('<div id="G-lightbox-mask"></div>'); this.popupWin=$('<div id="G-lightbox-popup"></div>'); //保存BODY this.bodyNode=$(document.body); //渲染剩余的DOM,并且插入到BODY this.renderDOM(); this.picViewArea=this.popupWin.find("div.lightbox-pic-view"); //图片预览区域 this.popupPic =this.popupWin.find("img.lightbox-image"); //图片区域 this.picCaptionArea=this.popupWin.find("div.lightbox-pic-caption"); //图片描述区域 this.nextBtn =this.popupWin.find("span.lightbox-next-btn"); this.prevBtn =this.popupWin.find("span.lightbox-prev-btn"); this.captionText=this.popupWin.find("p.lightbox-pic-desc"); //图片描述 this.currentIndex=this.popupWin.find("span.lightbox-of-index"); //图片索引 this.closeBtn =this.popupWin.find("span.lightbox-close-btn"); //关闭按钮 //准备开发事件委托,获取组数据,如果不委托给body,后续加载出来的图片还要在绑定事件 this.groupName=null; this.groupData=[]; //放置同一组数据 this.bodyNode.delegate("*[data-role=lightbox]","click",function(e){ //阻止事件冒泡 self.stopBubble(e); var currentGroupName=$(this).attr("data-group"); if(currentGroupName!=self.groupName){ self.groupName=currentGroupName; //根据当前组名获取同一组数据 self.getGroup(); } //初始化弹框 self.initPopup($(this)); }); this.popupMask.click(function(){ $(this).fadeOut(); self.popupWin.fadeOut(); }); this.closeBtn.click(function(){ self.popupMask.fadeOut(); self.popupWin.fadeOut(); }); //绑定上下切换按钮事件 this.nextBtn.hover(function(){ if(!$(this).hasClass("disabled")&&self.groupData.length>1){ $(this).addClass("lightbox-next-btn-show"); $(this).css("cursor","pointer") } },function(){ $(this).removeClass("lightbox-next-btn-show"); }).click(function(e){ if(!$(this).hasClass("disabled")){ self.stopBubble(e); self.goto("next"); } }); this.prevBtn.hover(function(){ if(!$(this).hasClass("disabled")&&self.groupData.length>1){ $(this).addClass("lightbox-prev-btn-show"); $(this).css("cursor","pointer") } },function(){ $(this).removeClass("lightbox-prev-btn-show"); }).click(function(e){ if(!$(this).hasClass("disabled")){ self.stopBubble(e); self.goto("prev"); } }); } LightBox.prototype.renderDOM= function(){ var strDom='<div class="lightbox-pic-view">'+ '<span class="lightbox-btn lightbox-prev-btn"></span>'+ '<img class="lightbox-image" src=""/>'+ '<span class="lightbox-btn lightbox-next-btn"></span>'+ '</div>'+ '<div class="lightbox-pic-caption">'+ '<div class="lightbox-caption-area">'+ '<p class="lightbox-pic-desc">ppppppp</p>'+ '<span class="lightbox-of-index">当前索引:0 of 0</span>'+ '</div>'+ '<span class="lightbox-close-btn"></span>'+ '</div>'; //插入到this.popupWin this.popupWin.html(strDom); //把遮罩和弹出框插入到body对象 this.bodyNode.append(this.popupMask,this.popupWin); } LightBox.prototype.getGroup=function(){ var self=this; //每次都先清空数组数据再获取,要不会把获取的数据追加到上一个组的数据后面 this.groupData=[]; //根据当前的组别名称获取页面中所有相同组别的对象 var groupList=this.bodyNode.find("*[data-group="+this.groupName+"]"); groupList.each(function(){ self.groupData.push({ src:$(this).attr("data-source"), id:$(this).attr("data-id"), caption:$(this).attr("data-caption") }); }); } LightBox.prototype.initPopup=function(currentObj){ var self = this, sourceSrc = currentObj.attr("data-source"), currentId =currentObj.attr("data-id"); this.showMaskAndPopup(sourceSrc,currentId); } LightBox.prototype.showMaskAndPopup=function(sourceSrc,currentId){ var self=this; this.popupPic.hide(); this.picCaptionArea.hide(); this.popupMask.fadeIn(); var winWidth=$(window).width(); var winHeight=$(window).height(); this.picViewArea.css({ "width":winWidth/2, "height":winHeight/2 }); this.popupWin.fadeIn(); var viewHeight=winHeight/2+10; this.popupWin.css({ "width":winWidth/2+10, "height":viewHeight, "marginLeft":-(winWidth/2+10)/2, "top":-viewHeight }).animate({ "top":(winHeight-viewHeight)/2 },function(){ //加载弹出的图片 self.loadPicSize(sourceSrc); }); //根据当前点击的元素id获取在当前组别里面的索引 this.index=this.getIndexOf(currentId); //判断是否显示左右切换图片的按钮 var groupDataLength=this.groupData.length; //如果组里面只有一张图片就不操作 if(groupDataLength>1){ if(this.index===1){ this.prevBtn.addClass("disabled"); this.nextBtn.removeClass("disabled"); }else if(this.index===groupDataLength){ this.nextBtn.addClass("disabled"); this.prevBtn.removeClass("disabled"); }else{ this.nextBtn.removeClass("disabled"); this.prevBtn.removeClass("disabled"); } } } LightBox.prototype.getIndexOf=function(currentId){ var index=0; $(this.groupData).each(function(){ index++; if(this.id===currentId){ return false; //当找到对应id时,退出each循环 } }); return index; } LightBox.prototype.loadPicSize=function(sourceSrc){ var self=this; //每次加载图片前,先设置宽高auto,否则下次加载的图片跟上次宽高一样 self.popupPic.css({"width":"auto","height":"auto"}).hide(); //预加载图片方法 this.preLoadImg(sourceSrc,function(){ self.popupPic.attr("src",sourceSrc); var picWidth=self.popupPic.width(); var picHeight=self.popupPic.height(); self.changePic(picWidth,picHeight); }); } //监控图片是否加载完成,完成就执行回调函数 LightBox.prototype.preLoadImg=function(src,callback){ var img=new Image(); if(window.ActiveXObject){ //IE浏览器 img.onreadystatechange=function(){ if(this.readyState=="complete"){ callback(); } } }else{ //其他浏览器 img.onload=function(){ callback(); } } img.src=src; } LightBox.prototype.changePic=function(width,height){ var self=this; var winWidth=$(window).width(); var winHeight=$(window).height(); //如果图片的宽高大于浏览器视口的宽高比,就要看下图片是否溢出 var scale=Math.min(winWidth/(width+10),winHeight/(height+10),1); width=width*scale; height=height*scale; this.picViewArea.animate({ "width":width-10, "height":height-10 }); this.popupWin.animate({ "width":width, "height":height, "marginLeft":-(width/2), "top":(winHeight-height)/2 },function(){ self.popupPic.css({ "width":width-10, "height":height-10 }).fadeIn(); self.picCaptionArea.fadeIn(); }); //设置描述文字和当前索引 this.captionText.text(this.groupData[this.index-1].caption); this.currentIndex.text("当前索引:"+this.index+" of "+this.groupData.length); } //上下切换图片的方法 LightBox.prototype.goto=function(dir){ if(dir==="next"){ this.index++; if(this.index>=this.groupData.length){ this.nextBtn.addClass("disabled").removeClass("lightbox-next-btn-show"); } if(this.index!==1){ this.prevBtn.removeClass("disabled"); } }else if(dir==="prev"){ this.index--; if(this.index===1){ this.prevBtn.addClass("disabled").removeClass("lightbox-prev-btn-show"); } if(this.index<=this.groupData.length){ this.nextBtn.removeClass("disabled"); } } var src=this.groupData[this.index-1].src; this.loadPicSize(src); } LightBox.prototype.stopBubble=function(e){ if(e.cancelBubble){ //IE浏览器 e.cancelBubble=true; }else{ //其他浏览器 e.stopPropagation(); } } window["LightBox"]=LightBox;})(jQuery);五、创建LightBox对象
写好js后,我们有了LightBox的构造器函数,就可以实例化LightBox对象了,在我们自己的js中加入如下代码:
var lightbox=new LightBox();这样我们的LightBox图片画廊就大功告成了
1 0
- 漂亮的LightBox图片画廊插件开发
- JS插件开发之LightBox图片画廊
- 19 个漂亮的 jQuery 画廊和幻灯片插件
- 【转】19 个漂亮的 jQuery 画廊和幻灯片插件
- 19 个漂亮的 jQuery 画廊和幻灯片插件
- 使用JQuery插件Pinto 和Lightbox 制作带网格布局的响应式(Responsible)画廊(gallery)
- 大多数下载WordPress的图片画廊插件
- 漂亮的viewpager画廊效果
- PHP CSS3 目录直读式Lightbox 画廊图片展示
- 十个jQuery图片画廊插件
- 支持Lazy loading的图片画廊jQuery插件 - Least.js
- 支持Lazy loading的图片画廊jQuery插件 - Least.js
- 一款简单实用的jQuery图片画廊插件
- 好用的lightbox插件
- Jquery图片弹出框插件-jQuery lightBox
- Lightbox弹出层图片放大插件
- 【jQuery】图片灯箱插件——lightBox
- 【JQuery】图片灯箱插件——lightBox
- notify()和notifyAll()的区别
- QLabel
- 概率dp_2
- 杭电2830 最大子矩阵
- OC 01 类和对象
- 漂亮的LightBox图片画廊插件开发
- AndroidStudio下jni开发
- POJ-3264 Balanced Lineup
- HDU 1412 {A} + {B}(STL)
- POJ 2100 Graveyard Design 尺取法
- 适配器与组合模式
- HDU 3549 Flow Problem
- 向量的点乘和叉乘
- MySQL常用指令积累