使用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 相关文章推荐
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
神奇的7个jQuery 3D插件整理
Jan 06 Javascript
js history对象简单实现返回和前进
Oct 30 Javascript
三种取消选中单选框radio的方法
Sep 09 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
Node.js之网络通讯模块实现浅析
Apr 01 Javascript
详解使用angular的HttpClient搭配rxjs
Sep 01 Javascript
layui.js实现的表单验证功能示例
Nov 15 Javascript
深入浅析Vue 中 ref 的使用
Apr 29 Javascript
了解前端理论:rscss和rsjs
May 23 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 Javascript
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
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 七大优势分析
2009/06/23 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
利用Psyco提升Python运行速度
2014/12/24 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Django框架模板的使用方法示例
2019/05/25 Python
Django 路由控制的实现
2019/07/17 Python
python实现静态服务器
2019/09/05 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
python 绘制场景热力图的示例
2020/09/23 Python
Python 创建守护进程的示例
2020/09/29 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
自我评价中英文语句
2013/11/30 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书