使用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 相关文章推荐
编写高性能的JavaScript 脚本的加载与执行
Apr 19 Javascript
google 搜索框添加关键字实现代码
Apr 24 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
js函数调用的方式
May 06 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
学习Javascript闭包(Closure)知识
Aug 07 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
Sep 01 Javascript
原生JS实现在线问卷调查投票特效
Jan 03 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
JS检测是否可以访问公网服务器功能代码
Jun 19 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
见习期自我鉴定
2013/11/07 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
青年文明号服务承诺
2014/03/31 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
css3新特性的应用示例分析
2022/03/16 HTML / CSS