viewer.js图片预览插件(案例含jquery分页插件)

内容介绍

前端开发过程中经常会有图片列表的需求,如后台系统审核用户上传的照片等,小伙伴们想要实现图片放大、切换、拖动等预览效果,自己封装费时费力,而且需要考虑切换动画等细节。今天推荐一个相册图片预览的插件——viewer.js(插件分jquery和js两种,之前项目中使用jquery版本出现一些问题,具体情况不做说明,以下为js版本)

支持功能:

  • 支持移动设备触摸事件
  • 支持响应式
  • 支持放大/缩小
  • 支持旋转(类似微博的图片旋转)
  • 支持水平/垂直翻转
  • 支持图片移动
  • 支持键盘
  • 支持全屏幻灯片模式(可做屏保)
  • 支持缩略图
  • 支持标题显示
  • 支持多种自定义事件
效果演示

https://liujianwei695.gitee.io/onlineeffect/example.html

viewer.min.js资源

资源地址:https://download.csdn.net/download/cainiaoyihao_/16492445

jquery.pagination.js资源

资源地址:https://download.csdn.net/download/cainiaoyihao_/16485958

一、使用方法
// 图片预览
var viewer = new Viewer(document.getElementById('viewer'), {
    // url: 'data-original',
    button: true,
    inline: false,
    zoomable: false,
    // minZoomRatio: 0.1,
    // maxZoomRatio: 10,
    // backdrop: true,
    movable: true,
    interval: 2000,
    navbar: true,
    loading: true,
    show: function() {
        viewer.update();
    }
});
二、常用参数
参数说明
inline启用 inline 模式
button显示右上角关闭按钮(jQuery 版本无效)
navbar显示缩略图导航
title显示当前图片的标题(现实 alt 属性及图片尺寸)
toolbar显示工具栏
tooltip显示缩放百分比
movable图片是否可移动
zoomable图片是否可缩放
rotatable图片是否可旋转
scalable图片是否可翻转
transition使用 CSS3 过度
fullscreen播放时是否全屏
keyboard是否支持键盘
interval播放间隔,单位为毫秒
zoomRatio鼠标滚动时的缩放比例
minZoomRatio最小缩放比例
maxZoomRatio最大缩放比例
zIndex设置图片查看器 modal 模式时的 z-index
zIndexInline设置图片查看器 inline 模式时的 z-index
url设置大图片的 url
build,built,show,shown,hide,hidden,view,viewed回调函数
三、点击图片外的背景,隐藏预览图片

通过检查元素获取需要的元素类名,阻止事件冒泡;

// 点击图片外的背景,隐藏预览图片
$("body").on("click", ".viewer-container", function(e) {
    viewer.hide()
});
$("body").on("click", ".viewer-canvas", function(e) {
    e.stopPropagation();
});
$("body").on("click", ".viewer-footer", function(e) {
    e.stopPropagation();
});
$("body").on("click", ".viewer-button", function(e) {
    e.stopPropagation();
});
$("body").on("click", ".viewer-tooltip", function(e) {
    e.stopPropagation();
});
$("body").on("click", ".viewer-player", function(e) {
    e.stopPropagation();
});
四、示例
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>mockjs,viewerjs,pagination示例</title>
    <link rel="stylesheet" href="/css/reset.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.0/mock.js"></script>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <link rel="stylesheet" href="/source/pagination/pagination.css">
    <script src="/source/pagination/jquery.pagination.js"></script>
    <link rel="stylesheet" href="/source/viewer/viewer.min.css">
    <script src="/source/viewer/viewer.min.js"></script>
    <style>
        .flexBox {
            display: flex;
            display: -moz-flex;
            display: -o-flex;
            display: -webkit-flex;
            display: -ms-flex;
        }
        
        .cons {
            width: 80vw;
            height: 60vh;
            margin: 0 auto;
            border: 1px solid #999;
        }
        
        .photoLists {
            padding-top: 4vh;
            justify-content: space-between;
            align-items: center;
            flex-wrap: wrap;
        }
        
        .photoList {
            width: 39vw;
            margin-bottom: 2vh;
            display: table-cell;
            text-align: center;
        }
        
        .photoList img {
            width: 30vw;
            height: 25vh;
        }
    </style>
</head>

<body>
    <div class="cons" id="viewer">
        <ul class="photoLists flexBox">
        </ul>
    </div>
    <ul id="filterTab" class="flexBox"></ul>
    <script>
        var allPages = 5,
            allNums = 20,
            showNum = 4;

        Mock.mock('https://api.com', {
            "code": "200",
            "status": "1",
            "message": "success",
            "allnum": allNums,
            "totalpage": allPages,
            "data": {
                "photoList|4": [{
                    'id|+1': 1,
                    'name': '@cname',
                    'age|1-100': 100,
                    'gender|1': ['男', '女'],
                    'birthday': '@date("yyyy-MM-dd")', //日期
                    'time': '@time("HH:mm:ss")',
                    'boolean|1': true,
                    'image|1': ["http://dummyimage.com/500x300/894FC4/FFF.png&text=qwerty", "http://dummyimage.com/500x300/894FC4/FFF.png&text=123", "http://dummyimage.com/500x300/894FC4/FFF.png&text=uiopas", "http://dummyimage.com/500x300/894FC4/FFF.png&text=456", "http://dummyimage.com/500x300/894FC4/FFF.png&text=dfghjk", "http://dummyimage.com/500x300/894FC4/FFF.png&text=789", "http://dummyimage.com/500x300/894FC4/FFF.png&text=cvblzx", "http://dummyimage.com/500x300/894FC4/FFF.png&text=987", "http://dummyimage.com/500x300/894FC4/FFF.png&text=qwenmq", "http://dummyimage.com/500x300/894FC4/FFF.png&text=7654", ]
                }]
            }
        });


        function init(currentPage = 1) {
            $.ajax({
                type: "post",
                url: "https://api.com",
                data: {
                    page: currentPage
                },
                dataType: "json",
                success: function(res) {
                    if (currentPage == 1) {
                        example(allNums)
                    }
                    var result = res.data.photoList,
                        showStr = "";
                    // console.log(res, result);
                    $.each(result, function(index, value) {
                        showStr += '<li class="photoList"><img src="' + value.image + '" alt="test-photo"></li>'
                    });
                    $(".photoLists").html(showStr)
                },
                complete: function() {
                    // 图片预览
                    var viewer = new Viewer(document.getElementById('viewer'), {
                        // url: 'data-original',
                        button: true,
                        inline: false,
                        zoomable: true,
                        fullscreen: false,
                        transition: true,
                        minZoomRatio: 0.1,
                        maxZoomRatio: 10,
                        // backdrop: true,
                        movable: true,
                        interval: 2000,
                        navbar: true,
                        loading: true,
                        show: function() {
                            viewer.update();
                        }
                    });
                    // 点击图片外的背景,隐藏预览图片
                    $("body").on("click", ".viewer-container", function(e) {
                        viewer.hide()
                    });
                    $("body").on("click", ".viewer-canvas", function(e) {
                        e.stopPropagation();
                    });
                    $("body").on("click", ".viewer-footer", function(e) {
                        e.stopPropagation();
                    });
                    $("body").on("click", ".viewer-button", function(e) {
                        e.stopPropagation();
                    });
                    $("body").on("click", ".viewer-tooltip", function(e) {
                        e.stopPropagation();
                    });
                    $("body").on("click", ".viewer-player", function(e) {
                        e.stopPropagation();
                    });

                }
            });
        }

        init();

        // 分页
        function example(page, current = 1) {
            $('#filterTab').pagination({
                totalData: page,
                showData: showNum,
                coping: true,
                jump: true,
                current: current,
                callback: function(api) {
                    init(api.getCurrent())
                }
            });
        };
    </script>
    <script>
        console.log("%c ", 'margin-left:0px;padding:100px 100px;background-image: url("https://liujianwei695.gitee.io/minifile/images/officialAccount.jpg");background-size: 200px 200px;background-position: center;background-repeat: no-repeat;');
    </script>
    </div>
</body>

</html>

标签:javascript,viewer.js,工具类,照片预览,图片查看器


更多演示案例,查看 案例演示


欢迎评论留言!

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间小美味695

您的鼓励是我创作的动力,感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值