美文网首页我爱编程
QRCode.js 二维码生成工具

QRCode.js 二维码生成工具

作者: 夜鸟丶 | 来源:发表于2018-04-10 17:53 被阅读0次

QRCode.js 是一个用于生成二维码的 js 库,原理是利用canvas绘制图片并插入dom
,用法很简单,如下;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/jquery.min.js"></script>
<script src="js/qrcode.js"></script>
<body>
    <div id="myQRCode"></div>
</body>
<script>
    new QRCode('myQRCode',{
        text: 'http://www.baidu.com',
        width: 300,
        height: 300,
        colorDark : "#000000",
        colorLight : "#ffffff",
        correctLevel : QRCode.CorrectLevel.H
    })
</script>
</html>

上面生成的是一个百度首页的二维码。
简单说明一下上面的参数:
'myQRCode' : 二维码插入的元素id
text:二维码的内容,就是扫描二维码后发送的url
width:二维码的宽
height:二维码的高
colorDark:前景色
colorLight:背景色
correctLevel:容错等级,有QRCode.CorrectLevel.L/M/Q/H 四个级别

打印一个二维码:

function printQRCode() {
        let str = document.getElementById('myQRCode').innerHTML
        let newPage = window.open('打印页面','_blank')
        newPage.document.write(str)
        newPage.document.close()
        newPage.print()
        newPage.close()
    }

批量生成并打印二维码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/jquery.min.js"></script>
<script src="js/qrcode.js"></script>
<body>
    <div id="myQRCode"></div>
    <button onclick="printAllQRCode()">打印全部</button>
</body>
<script>
    let list = []
    let qrcodeArr = []
    function create(obj) {
        document.getElementById('myQRCode').innerHTML = ''
        new QRCode('myQRCode',{
            text: 'http://www.baidu.com' + obj.a,
            width: 300,
            height: 300,
            colorDark : "#000000",
            colorLight : "#ffffff",
            correctLevel : QRCode.CorrectLevel.H
        })
    }
    for(let i = 0; i < 10; i++){
        let obj = {
            a: i
        }
        list.push(obj)
    }
    function loop (i) {
        if (i >= 10) {
            return
        }
        create(list[i])
        setTimeout(function () {
            let str = document.getElementById('myQRCode').innerHTML
            qrcodeArr.push(str)
            i++
            loop(i)
        }, 100)
    }
    function printAllQRCode() {
        let docStr = ''
        let length = qrcodeArr.length
        for (let i = 0; i < length; i++) {
            docStr += qrcodeArr[i]
        }
        let newWindow = window.open('打印窗口', '_blank', 'width=' + (screen.availWidth - 10) + ',height=' + (screen.availHeight - 50) + ',scrollbars,resizable=yes,toolbar=no')
        // 第三个参数需要设置,以保证可以打开一个新窗口而不是新标签页;不然 chrome 下会有bug (具体原因不知道,有大佬知道可以告诉一下)
        newWindow.document.write(docStr)
        newWindow.document.close()
        setTimeout(function () { //二维码在网页绘制需要时间,尤其大批量,不加延迟会导致图片丢失
            newWindow.print()
            newWindow.close()
        }, 100)
    }
    loop(0)
</script>
</html>

在new QRCode() 之后其实是在目标元素内生成了一个<canvas></canvas><img/>的代码块,此时 img 里面并没有 src 属性,貌似需要一定时间生成,所以如果立刻将 innerHTML 放入数组并不能获取到二维码。
因此,在批量生成二维码代码中,使用了递归以及定时器来实现二维码的获取。(我猜也可以创建不同的div去存放,不过工作量有些大,还有不采用for循环是因为定时器会打乱其执行顺序,难控制)

相关文章

网友评论

    本文标题:QRCode.js 二维码生成工具

    本文链接:https://www.haomeiwen.com/subject/ifxnhftx.html