使用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 相关文章推荐
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
Jquery 动态添加按钮实现代码
May 06 Javascript
js实现双向链表互联网机顶盒实战应用实现
Oct 28 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
Jul 15 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
Dec 04 Javascript
无闪烁更新网页内容JS实现
Dec 19 Javascript
JS中表单的使用小结
Jan 11 Javascript
使用javascript为网页增加夜间模式
Jan 26 Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 Javascript
Vue引入sass并配置全局变量的方法
Jun 27 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
微信小程序激励式视频广告组件使用详解
Dec 06 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
Python向日志输出中添加上下文信息
2017/05/24 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python调用百度语音识别api
2018/08/30 Python
Python创建字典的八种方式
2019/02/27 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
服务承诺书范文
2014/05/19 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
营业用房租赁协议书
2014/11/26 职场文书
教师考核表个人总结
2015/02/12 职场文书
贷款收入证明范本
2015/06/12 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python