使用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中关于执行环境的杂谈
Aug 14 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
arguments对象验证函数的参数是否合法
Jun 26 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
纯js实现图片匀速淡入淡出效果
Aug 22 Javascript
js实现关闭网页出现是否离开提示
Dec 07 Javascript
JavaScript实现左侧菜单效果
Dec 14 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
javascript自执行函数
2017/02/10 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python实现代码统计工具
2019/09/19 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
有个性的自我评价范文
2013/11/15 职场文书
自我鉴定四大框架
2014/01/17 职场文书
开会迟到检讨书
2014/02/03 职场文书
2014年高考决心书
2014/03/11 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
教师节主题班会教案
2015/08/17 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
Feign调用传输文件异常的解决
2021/06/24 Java/Android
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python