使用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的extend和fn.extend的使用说明
Jan 09 Javascript
js控制文本框只输入数字和小数点的方法
Mar 10 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
简单实现jQuery进度条轮播实例代码
Jun 20 Javascript
JavaScript页面实时显示当前时间实例代码
Oct 23 Javascript
JavaScript基础之this详解
Jun 04 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
js+css实现扇形导航效果
Aug 18 Javascript
可拖拽组件slider.js使用方法详解
Dec 04 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
图象函数中的中文显示
2006/10/09 PHP
一段防盗连的PHP代码
2006/12/06 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
php常量详细解析
2015/10/27 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
详解package.json版本号规则
2019/08/01 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python获取文件ssdeep值的方法
2014/10/05 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
农场厂长岗位职责
2013/12/28 职场文书
2015年国培研修感言
2015/08/01 职场文书
2016年国培研修日志
2015/11/13 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
一文解答什么是MySQL的回表
2022/08/05 MySQL