微信小程序动态生成二维码的实现代码


Posted in Javascript onJuly 25, 2018

效果图如下:

微信小程序动态生成二维码的实现代码

实现

wxml

<!-- 存放二维码的图片-->
<view class='container'>
  <image bindtap="previewImg" mode="scaleToFill" src="{{imagePath}}"></image>
</view>
<!-- 画布,用来画二维码,只用来站位,不用来显示-->
<view class="canvas-box">
  <canvas hidden="{{canvasHidden}}" style="width: 686rpx;height: 686rpx;background:#f1f1f1;" canvas-id="mycanvas" />
</view>

wxss

.container {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
}
.container image {
  width: 686rpx;
  height: 686rpx;
  background-color: #f9f9f9;
}
.canvas-box {
  position: fixed;
  top: 999999rpx;
  left: 0;
}

js

var QR = require("../../../lib/qrcode.js");
Page({
  /**
   * 页面的初始数据
   */
  data: {
    canvasHidden: false,
    imagePath: '',
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    //option为上个页面传递过来的参数
    var jiaoyanCode = 'sorry,jiaoyanCode is loss';
    if (options) {
      jiaoyanCode = options.jiaoyanCode;
    }
    console.log(jiaoyanCode);
    var size = this.setCanvasSize(); //动态设置画布大小 
    this.createQrCode(jiaoyanCode, "mycanvas", size.w, size.h);   
  },
  //适配不同屏幕大小的canvas
  setCanvasSize: function() {
    var size = {};
    try {
      var res = wx.getSystemInfoSync();
      var scale = 750 / 686; //不同屏幕下canvas的适配比例;设计稿是750宽 686是因为样式wxss文件中设置的大小
      var width = res.windowWidth / scale;
      var height = width; //canvas画布为正方形
      size.w = width;
      size.h = height;
    } catch (e) {
      // Do something when catch error
      console.log("获取设备信息失败" + e);
    }
    return size;
  },
  /**
   * 绘制二维码图片
   */
  createQrCode: function(url, canvasId, cavW, cavH) {
    //调用插件中的draw方法,绘制二维码图片
    QR.api.draw(url, canvasId, cavW, cavH);
    setTimeout(() => {
      this.canvasToTempImage();
    }, 1000);
  },
  /**
   * 获取临时缓存照片路径,存入data中
   */
  canvasToTempImage: function() {
    var that = this;
    //把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。
    wx.canvasToTempFilePath({
      canvasId: 'mycanvas',
      success: function(res) {
        var tempFilePath = res.tempFilePath;
        console.log(tempFilePath);
        that.setData({
          imagePath: tempFilePath,
          // canvasHidden:true
        });
      },
      fail: function(res) {
        console.log(res);
      }
    });
  },
  /**
   * 点击图片进行预览
   */
  previewImg: function (e) {
    var img = this.data.imagePath;
    console.log(img);
    wx.previewImage({
      current: img, // 当前显示图片的http链接
      urls: [img] // 需要预览的图片http链接列表
    });
  },
})

qrcode.js 可以去 这里 下载。

详细源码请查看 https://github.com/demi520/wxapp-qrcode

总结

以上所述是小编给大家介绍的微信小程序动态生成二维码的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery pagination插件实现无刷新分页代码
Oct 13 Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
Javascript实现返回上一页面并刷新的小例子
Dec 11 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
js实现全国省份城市级联下拉菜单效果代码
Sep 07 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
jQuery设置Cookie及删除Cookie实例分析
Apr 15 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
Aug 24 Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 Javascript
Vue-Router的使用方法
Sep 05 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 #Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 #Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 #Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
Jul 25 #Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
Jul 25 #Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
Jul 25 #Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 #Javascript
You might like
JAVA/JSP学习系列之七
2006/10/09 PHP
实用函数2
2007/11/08 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
PHP curl使用实例
2015/07/02 PHP
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
创建与框架无关的JavaScript插件
2020/12/01 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
Python标准库之sqlite3使用实例
2014/11/25 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python实现SOM算法
2018/02/23 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
django实现后台显示媒体文件
2020/04/07 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
优秀党员主要事迹
2014/01/19 职场文书
党员岗位承诺书
2014/03/25 职场文书
校园文明标语
2014/06/13 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
企业文化学习心得体会
2016/01/21 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书