使用jquery组件qrcode生成二维码及应用指南


Posted in Javascript onFebruary 22, 2015

有一些耗cpu的计算,完全可以在客户端上计算,比如生成二维码。

qrcode其实是通过计算,然后使用jquery实现图形渲染和画图。支持canvas和table两种方式生成我们所需的二维码。

具体用法
qrcode是jquery组件,需要至少两个js, 就是 jquery 和 jquery.qrcode。可以到https://github.com/jeromeetienne/jquery-qrcode获取最新的代码。

<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript" src="jquery.qrcode.min.js"></script>

在页面上,需要显示二维码的地方加入一个空元素(此处用div)

<div id="qrcode"></div>

在需要生成二维码的时候,调用一下语句直接生成。

$("#qrcode").qcrode("https://3water.com");//需要生成的页面

详细参数

参数 默认值 说明
render canvas 渲染方式,支持canvas和table
width 无 宽度
height 无 高度
text 无 需要生成的url
 
如:

$("#qrcode").qcrode({

    render: "table",

    width: 200,

    height: 200,

    text: "https://3water.com"

});

解决url中有中文方法

我们试验的时候发现不能识别中文内容的二维码,通过查找多方资料了解到,jquery-qrcode是采用charCodeAt()方式进行编码转换的。而这个方法默认会获取它的Unicode编码,如果有中文内容,在生成二维码前就要把字符串转换成UTF-8,然后再生成二维码。您可以通过以下函数来转换中文字符串:

function toUtf8(str) {    

    var out, i, len, c;    

    out = "";    

    len = str.length;    

    for(i = 0; i < len; i++) {    

        c = str.charCodeAt(i);    

        if ((c >= 0x0001) && (c <= 0x007F)) {    

            out += str.charAt(i);    

        } else if (c > 0x07FF) {    

            out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));    

            out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));    

            out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));    

        } else {    

            out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));    

            out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));    

        }    

    }    

    return out;    

}

下载二维码

用前端画出来的二维码,不是一个canvas就是一个table,如何下载呢?我们只需要将canvas的内容画到image上,下载下来即可。

function download(canvasElem, filename, imageType) {

    var event, saveLink, imageData, defalutImageType;

    defalutImageType = 'png';//定义默认图片类型

    imageData = canvasElem.toDataURL(imageType || defalutImageType);//将canvas元素转化为image data

    saveLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');

    saveLink.href = imageData;

    saveLink.download = filename;

    event = document.createEvent('MouseEvents');

    event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);

    saveLink.dispatchEvent(event);

};

在angular中的简单封装

在angular中使用,可以封装成directive。不过要确保已经引入了之前的两个js文件。

var appModule = angular.module('app', []);

appModule.directive('qrcode', function() {

    return {

        restrict: "A",

        scope: {

          text    : '=',

          options : '='

        },

        link: function(scope, elem, attrs) {

          var $elem, options;

          $elem = $(elem);

          options = { //获取元素的宽度和高度

            width: $elem.width(),

            height: $elem.height()

          };

          angular.extend(options, scope.options);

          scope.$watch('text', function(newText) {

            if (newText) {

              options.text = newText;

              $(elem).qrcode(options);//重新生成二维码

            }

          });

        };

    };

});

下载的方法在angular中可以封装成一个service使用。

小伙伴们会使用qrcode生成二维码了吧,确实很好用,希望大家能够喜欢。

Javascript 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
JavaScript实现拼音排序的方法
Nov 20 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 Javascript
jQuery的remove()方法使用详解
Aug 11 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
全面解析多种Bootstrap图片轮播效果
May 27 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
javascript this详细介绍
Sep 19 Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
Oct 23 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 #Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
Feb 20 #Javascript
js实现图片和链接文字同步切换特效的方法
Feb 20 #Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 #Javascript
JavaScript获取文本框内选中文本的方法
Feb 20 #Javascript
jQuery常用数据处理方法小结
Feb 20 #Javascript
jQuery数据缓存用法分析
Feb 20 #Javascript
You might like
php安全配置 如何配置使其更安全
2011/12/16 PHP
微信自定义分享php代码分析
2016/11/24 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
js实现无缝滚动图
2017/02/22 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python实现二维数组输出为图片
2018/04/03 Python
Flask之flask-session的具体使用
2018/07/26 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
跟单文员的岗位职责
2013/11/14 职场文书
数学专业推荐信范文
2013/11/21 职场文书
保安部任务及岗位职责
2014/02/25 职场文书
大学专科求职信
2014/07/02 职场文书
收款委托书范本
2014/09/11 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
分享几种python 变量合并方法
2022/03/20 Python