使用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编程起步(第四课)
Feb 27 Javascript
javascript CSS画图之基础篇
Jul 29 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
函数window.open实现关闭所有的子窗口
Aug 03 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
Jun 03 Javascript
纯JS实现可拖拽表单的简单实例
Sep 02 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
vue如何引用其他组件(css和js)
Apr 13 Javascript
BACKBONE.JS 简单入门范例
Oct 17 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 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调用.NET的WebService 简单实例
2015/03/27 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python-opencv颜色提取分割方法
2018/12/08 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python调用自定义函数的实例操作
2019/06/26 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
会计电算化专业毕业生自荐信
2013/12/20 职场文书
函授生自我鉴定
2014/03/25 职场文书
单位绩效考核方案
2014/05/11 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
大四学生个人总结
2015/02/15 职场文书
投标售后服务承诺书
2015/04/29 职场文书