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

  • Post author:
  • Post category:其他

内容介绍

前端开发过程中经常会有图片列表的需求,如后台系统审核用户上传的照片等,小伙伴们想要实现图片放大、切换、拖动等预览效果,自己封装费时费力,而且需要考虑切换动画等细节。今天推荐一个相册图片预览的插件——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="'%20+ 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,工具类,照片预览,图片查看器


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


欢迎评论留言!


版权声明:本文为cainiaoyihao_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。