Requirements
- Bootstrap
- Lightbox for Bootstrap 3
Procedure
本来一个很普通的 Jekyll 主题被我改得完全没了原来的样子
昨天写了一篇游记,Karmdown 里面的图片不会自适应,导致有些图片大有些图片小,当然我才懒得给每个图片加 width 和 height!
所以随手搜了一下 Modal Window 来显示图片,于是就找到了 Lightbox 这个 Plugin
Usage
官方1给的 API 比较简单,可以有几个用法
Via data attributes
代码语言:javascript复制<a href="someurl" data-toggle="lightbox">Launch modal</a>
Via Javascript
代码语言:javascript复制<a href="someurl" id="mylink">Open lightbox</a>
$('#mylink').ekkoLightbox(options);
实际使用
官方的推荐是在 image 外层放一个<a>
并通过<a>
的点击调用 Modal Window,而 Markdown 引用图片时会生成如下的格式2:
<p>
<img src="path_to_image" alt="">
<em>image_caption</em>
</p>
上面 HTML 对应的 Markdown 代码是:
代码语言:javascript复制![](path_to_image)
*image_caption*
Markdown 可以加 caption 的!
修改 img elem
我们不能改变 Markdown 解析的细节,但是可以使用 JS 的办法来处理,写一段 JS 将所有 img 用一个 a 包围:
代码语言:javascript复制$('#post-content img').each(function(index, val) {
var link = $('<a></a>').attr({
'rel': 'lightbox',
'href': $(val).attr('src'),
'data-lightbox':"roadtrip"
});
if ($(val).next('em')!=null) {
link.attr('title', $(val).next('em').html());
}
$(val).parent().prepend(link);
link.append($(val));
$(val).addClass('img-fluid'); /*add BS4 image fluid class*/
});
代码语言:javascript复制<p>
<a rel="lightbox" href="path" data-lightbox="roadtrip" title="Enjoy It!">
<img src="path" alt="" class="img-fluid">
</a>
<em>Enjoy It!</em>
</p>
绑定事件
对着Selector
运行ekkoLightbox()
就行。
$('#subcontainer img').on("click",function(){
event.preventDefault();
$(this).ekkoLightbox({
remote: $(this).attr('src'),
title: $(this).next().html()
});
})
- 首先选择正文 div#subcontainer 里面的 img
- 设定一个 onClickListener
- 点击的时候调用
ekkoLightbox
,并传递几个参数- remote: 就是远程图片地址,实际上这里执行了两次 call,不知官方有否直接运用客户端图片的办法,反正有的话我也懒得改了 o( ̄ヘ ̄o#)
- title: 这里就直接获取图片后面的
<em>
里面的内容作为 Title
使用示例
(点击下图片试试)↓
Enjoy It!
所对应的代码如下
代码语言:javascript复制![]( https://assets.pic.szhshp.org/site/portrait.jpg)
*Enjoy It!*
Extra
给 Img em 添加 CSS 进行美化2:
代码语言:javascript复制img em {
display: block;
padding-left: 10px;
color: grey;
}
参考文献
- LightBox↩
- Using an image caption in Markdown Jekyll↩