jQuery插件jquery.LightBox.js实现图片点击放大与左右切换功能
本文介绍了一款由作者编写的jQuery插件jquery.LightBox.js,旨在实现点击小图放大查看及左右切换图片的流行交互效果。文章提供了完整的HTML结构、CSS样式及JavaScript调用代码,并详细解析了插件核心逻辑,包括默认配置、遮罩层生成及图片加载处理。
jQuery LightBox插件功能概述
本文通过一个具体实例,详细讲解了如何使用jQuery插件jquery.LightBox.js来实现点击缩略图后放大显示,并支持左右箭头切换图片的功能。内容包含完整代码示例,供读者参考学习。
该插件由文章作者自行开发,主要目的是锻炼自身的JavaScript编程能力,同时也希望为其他初级开发者在使用插件时提供便利。资深开发者可忽略此部分。
该插件的核心目标是实现当前较为流行的图片交互效果:点击缩略图放大查看,并可通过左右按钮切换浏览图片。开发者可根据实际需求,决定是否启用左右切换功能。以下是完整的实现代码。
HTML结构与CSS样式配置
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
*{margin:0;padding:0;}
li{list-style:none;}
.item{margin:20px;}
.item ul li{float:left;margin-right:20px;}
.item ul li img{width:100px;cursor:pointer;}
.lb_wrap{display:none;}
.lightbox_bg{background:#000;filter:alpha(opacity=70);opacity:.7;position:absolute;left:0;top:0;width:100%;height:100%;z-index:1;}
.lightbox{position:absolute;left:0;top:50%;width:100%;z-index:2;text-align:center;}
.lightbox p{position:absolute;height:61px;width:38px;top:50%;left:0;z-index:2;background:transparent url(themes.png) no-repeat left top;margin-top:-30.5px;cursor:pointer;}
.lightbox p.next{left:auto;background-position:right top;right:0;}
</style>
<script type="text/javascript" src="jquery-1.7.1.js"></script>
<script type="text/javascript" src="jquery.LightBox.js"></script>
</head>
<body>
<div class="item">
<ul>
<li><img src="01.jpg" /></li>
<li><img src="02.jpg" /></li>
<li><img src="03.jpg" /></li>
<li><img src="04.jpg" /></li>
<li><img src="05.jpg" /></li>
<li><img src="06.jpg" /></li>
</ul>
</div>
<script>
$(function(){
$(".item").LightBox({
controls : true //上一张、下一张按钮是否显示,默认是显示true
});
})
</script>
</body>
</html>
以下是jquery.LightBox.js插件的具体代码实现。
插件核心JavaScript代码解析
/*
*LightBox 1.0
*dependence jquery-1.7.1.js
*/
;(function(a){
a.fn.LightBox = function(options){
var defaults = {
controls : true //上一张、下一张按钮是否显示,默认是显示true
}
var opts = a.extend(defaults, options);
var lb_wrap = '<div class="lb_wrap"><div class="lightbox_bg"></div><div class="lightbox"><img src="loading.gif" class="lg_img"></div></div>';
a("body").append(lb_wrap);
//controls
if(opts.controls){
a(".lightbox").append('<p class="prev"></p><p class="next"></p>');
}
function imgobj(obj1, obj2){
//imgObj.height是通过img对象获取的图片的实际高度
var imgObj = new Image();
imgObj.src = obj1.attr("src");
var margintop = 0 - (imgObj.height)/2;
obj2.css("margin-top",margintop);
}
this.each(function(){
var obj = a(this);
var numpic = obj.find("li").length;
var num = 0;
//点击赋值并显示
obj.find("img").click(function(){
var src = a(this).attr("src");
a(".lg_img").attr("src",src);
imgobj(a(".lg_img"), a(".lightbox"));
a(".lb_wrap").fadeIn();
a(".lg_img").fadeIn();
a(".prev").fadeIn().siblings(".next").fadeIn();
num = a(this).parent().index(); //获取当前图片的父元素的索引并赋给num为后边点击上一张、下一张服务
});
//上一张
a(".prev").click(function(){
if(num == 0){
num = numpic;
}
var src = obj.find("li").eq(num-1).find("img").attr("src");
a(".lg_img").attr("src",src);
imgobj(a(".lg_img"), a(".lightbox"));
num--;
});
//下一张
a(".next").click(function(){
if(num == numpic-1){
num = -1;
}
var src = obj.find("li").eq(num+1).find("img").attr("src");
a(".lg_img").attr("src",src);
imgobj(a(".lg_img"), a(".lightbox"));
num++;
});
//点击除了上一张、下一张之外的其他地方隐藏
a(".lb_wrap").click(function(e){
var e = e || window.event;
var elem = e.target || e.srcElement;
while(elem){
if (elem.className && elem.className.indexOf('prev')>-1) {
return;
}
if(elem.className && elem.className.indexOf('next')>-1){
return;
}
elem = elem.parentNode;
}
a(this).find("img").attr("src","loading.gif").hide(); //隐藏后,再将默认的图片赋给lightbox中图片的src
a(this).find(".prev").hide().siblings(".next").hide();
a(this).fadeOut();
});
})
}
})(jQuery);
如需获取包含完整HTML、CSS及JS的实例代码,可点击此处下载本站提供的Demo源码。
如果您对jQuery相关技术感兴趣,建议进一步阅读本站的其他专题文章,包括《jQuery拖拽特效与技巧总结》、《jQuery扩展技巧总结》、《jQuery常见经典特效汇总》、《jQuery动画与特效用法总结》以及《jquery选择器用法总结》。
希望上述关于jQuery程序设计的介绍能对您的开发工作有所帮助。
为什么叫JavaScript:语言命名由来及与Java的历史渊源
2026-11-05 11:37:48
JS获取当前时间年月日时分秒并格式化为YYYY-MM-DD HH:mm:ss
2026-11-04 21:25:21
不同语言间JS与Java/Python加密结果不一致怎么办
2026-11-04 18:27:23
Mock.js 拦截 Axios 和 Fetch 请求的原理与配置方法
2026-11-04 08:13:59
JS怎么获取当前日期并格式化为YYYY-MM-DD
2026-11-03 18:47:03
