使用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 相关文章推荐
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
javascript中传统事件与现代事件
Jun 23 Javascript
利用jQuery和CSS将背景图片拉伸
Oct 16 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
Mar 05 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
JavaScript实现图片懒加载(Lazyload)
Nov 28 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 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自动加载机制的深入分析
2013/06/08 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
Jquery 表格合并的问题分享
2011/09/17 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
python使用post提交数据到远程url的方法
2015/04/29 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
英国在线药房:Express Chemist
2019/03/28 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
采购文员岗位职责
2013/11/20 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
综合办公室主任职责
2013/12/16 职场文书
yy结婚证婚词
2014/01/10 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
党员批评与自我批评
2014/10/15 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
CSS预处理框架——Stylus
2021/04/21 HTML / CSS