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


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 相关文章推荐
js验证表单大全
Nov 25 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
Jan 23 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
Apr 13 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
在vue中使用SockJS实现webSocket通信的过程
Aug 29 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
JS对日期操作封装代码实例
Nov 08 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 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
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
繁简字转换功能
2006/07/19 Javascript
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
JavaScript闭包详解
2015/02/02 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
python实现list由于numpy array的转换
2018/04/04 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Python自定义一个异常类的方法
2019/06/27 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
学Python 3的理由和必要性
2019/11/19 Python
python django中8000端口被占用的解决
2019/12/17 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
投标邀请书范文
2014/01/31 职场文书
运动会邀请函范文
2014/02/06 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
公司年底活动方案
2014/08/17 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
导游词之无锡梅园
2019/11/28 职场文书
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python