不,真的没有更多的东西。但是,除非您不想将 JavaScript 用于您的灯箱,否则我并没有真正看到从一开始就有 HTML 元素的意义,从您的标签来看,我认为这里不是这种情况,我我不喜欢在实际项目中使用,尽管我认为它可以做到真的很酷。
如果您仍然使用 JavaScript 来显示灯箱(这意味着如果 JavaScript 被禁用,即使它存在,您的灯箱也不会显示,从一开始就加载......所以如果可以的话为什么要加载它'不显示它?),那么最好仅在您第一次希望打开灯箱时才创建灯箱元素(以及其中的所有内容,然后将其附加到页面)。
我的意思是您将点击处理程序附加到链接(实际上,我会将其附加到容器,然后检查单击了什么,如果它是链接,请查看它是什么链接并走得更远)并检查是否你有一个灯箱元素。如果你不这样做,那么你就在现场创建它。如果您已经这样做了,那么您只需将其显示为单击该特定链接所需的任何内容。
图片库的基本灯箱示例。
画廊的HTML结构将是:
<section class='gallery' id='gallery'>
<a href='images/large_0.jpg' class='thumb'>
<img class='thumb-img' src='images/small_0.jpg'>
</a>
<!-- as many more as you wish -->
</section>
的CSS:
/* gallery with thumbnails */
.gallery { text-align: center; }
.gallery .thumb, .gallery .thumb-img {
display: inline-block;
width: 10em;
height: 5.6em;
}
/* lightbox */
.lightbox {
z-index: 999; /* some ridiculously large value to make sure it's on top */
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
background: rgba(0,0,0,.5);
cursor: pointer;
text-align: center;
}
.lightbox:before { /* strictly for vertical centering of large image */
display: inline-block;
height: 100%;
vertical-align: middle;
content: '';
}
/* add/ remove this class to toggle display */
.hidden { display: none; }
.large { /* the large image */
max-width: 100%;
max-height: 100%;
vertical-align: middle;
}
的JavaScript:
var g = document.getElementById('gallery');
String.prototype.endsIn = function(suffixes) { /*just to check the extension*/
for(i in suffixes) {
if(this.indexOf(suffixes[i], this.length - suffixes[i].length) !== -1)
return true;
}
return false;
};
g.addEventListener('click', function(e){
var target = e.target, lnk, ext = ['.jpg', '.png'], lightbox, large;
if(!target.classList.contains('thumb-img')) return;
else {
lnk = target.parentNode.href;
if(!lnk.endsIn(ext)) return;
else {
lightbox = document.getElementById('lightbox');
if(lightbox == null) {
lightbox = document.createElement('div');
lightbox.setAttribute('id', 'lightbox');
lightbox.classList.add('lightbox');
lightbox.innerHTML = "<img src='"+ lnk +"' id='large' class='large'>";
document.body.appendChild(lightbox);
lightbox.addEventListener('click', function(ev) {
var target = ev.target, next, links = g.querySelectorAll('.thumb'),
len = links.length, large = document.getElementById('large');
if(target.id == 'lightbox') lightbox.classList.add('hidden');
else if(target.id == 'large') {
for(var i = 0; i < len; i++) {
if(links[i].href == large.src) {
next = links[(i++)%len].href;
while(!next.endsIn(ext)) next = links[(i++)%len].href;
large.src = links[i%len].href;
break;
}
}
}
}, false);
}
else {
lightbox.classList.remove('hidden');
large = document.getElementById('large');
large.src = lnk;
}
e.preventDefault();
}
}
}, false);