使用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 相关文章推荐
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
Oct 17 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
Nov 02 Javascript
js+div实现文字滚动和图片切换效果代码
Aug 27 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 Javascript
JS实现简单省市二级联动
Nov 27 Javascript
Vue实现多标签选择器
Nov 28 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/04/17 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
es6数值的扩展方法
2019/03/11 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
python插入排序算法实例分析
2015/07/03 Python
python使用matplotlib画饼状图
2018/09/25 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
八年级作文之友情
2019/11/25 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫
Django框架之路由用法
2022/06/10 Python
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技