全站启用 fancybox 图片预览插件

1883°C 06-08-2020 notbyai
最近更新于:2022-06-15 23:58:07

文章摘要moonshot-v1-8k

Standby API Responsing..

fancybox.js

JavaScript lightbox library for presenting various types of media. Responsive, touch-enabled and customizable.

图片预览插件

图片预览的话有很多插件,不过 fancybox 我认为是比较公然好评的一款,之所以使用它也是因为之前把图片预览关掉了(像图片比较多的页面还是比较不方便),优缺点以及在 weblog 里讲了,这里简单记下使用的步骤

简单安装

fancybox.js 依赖于 jQuery,这一点也是比较片面的,毕竟要使用 jq 才行(有一款纯js的,不过安装比较麻烦),那么首先引入 jq

<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>

然后是 fancybox.js 核心文件

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />
    <script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>

使用说明

很简单,在需要加入 fancybox 的图片外包裹一个特定的 a 标签就ok

href 填写图片路径即可

<a data-fancybox="gallery" href="1.jpg">
<img src="1.jpg" />
</a>

其他

因为我图片启用了 lazyload ,所以直接获取 img.lazy 的 data-original 属性的值填充到 a 标签的 href 内即可。

全局启用后有的不需要 fancybox 效果的页面图片也被应用了 fancybox 效果,所以加了个父元素是否为 a 标签的判断。

目前只想在 news 和 notes 两个页面应用该效果,通过 box 的 class 来判断容器(需要同时判断 iboxes 因为 container 内包含了 ibox,会导致的问题是有 ibox 页面 img 都会被包裹)

以上判断均有 bug

尝试了几种方案,其中最合适的还是 直接遍历 img 所有父元素,判断是否能匹配指定类名,是则文章页面(指定类名仅 news 和 notes 页面)

$('img.lazy').each(function(){
        let img=$(this),
            src=img.attr('data-original'),
            box=img.parents();  //box=img.parents('news-article-container')
        //box ? img.wrap('<a data-fancybox="gallery" href="'+src+'"></a>') : false;
        box.hasClass('news-article-container') ? img.wrap('<a data-fancybox="gallery" href="'+src+'"></a>') : false;
    });

以上,有问题评论区反馈。


评论留言

avatar
「 涂鸦画板 」 关闭表情 bilibili 小电视
h0h1h2h3h4h5h6h7h8h9h10h11h12h13h14h15h16h17h18h19h20h21h22h23h24h25h26h27h28h29h30h31h32h33h34h35h36h37h38h39h40h41h42h43h44h45h46h47h48h49h50h51h52h53h54h55h56h57h58h59h60h61h62h63
10 条评论
user_avatar
泽泽 Chrome / Windows 10
2021-09-29 回复

现在fancybox已经不需要jq了,今年我特意找了些无jq的图片灯箱插件,体验都不咋好,后来看到fancybox居然在测试无jq的最新版了,于是乎就开始等正式版

user_avatar
风也 Edge / Windows 10
2020-08-20 回复

fancybox和lazyload有冲突

user_avatar
Ying Chrome / Windows 10
2020-08-19 回复

催更~ 话说试了下fancybox挺方便的,但是想把切换图片改成点击图片左右两边切换上一张/下一张,好像官方没有提供这个设置

    user_avatar
    Ying Chrome / Windows 10
    2020-08-20 回复
    @Ying ,

    魔改辣鸡前端表示… 其实主要是那两个按钮在移动端实在是太不友好了,手一抖就点不到了=。=

    user_avatar
    2broear adminEdge / Windows 10
    2020-08-19 回复
    @Ying ,

    啊最近要更的拖一下~~(fancybox魔改一下那个切换按钮大小和位置就可以实现了

user_avatar
Ying Chrome / Windows XP
2020-08-17 回复

随便点了张图片,然后找不到关闭键是肿么回事(。・ω・。) 所以只能用Esc关闭图片预览吗

    user_avatar
    Ying Chrome / Windows XP
    2020-08-17 回复
    @Ying ,

    哟西~ 学会了

    user_avatar
    2broear adminEdge / Windows 10
    2020-08-17 回复
    @Ying ,

    那个工具栏被标题栏覆盖了,然后关闭图片的话直接点图片外区域或者按住图片往下拖就好了