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


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 相关文章推荐
Web开发之JavaScript
Mar 29 Javascript
基于jquery实现的省市区级联无ajax
Sep 24 Javascript
javascript的push使用指南
Dec 05 Javascript
jQuery前端分页示例分享
Feb 10 Javascript
JavaScript实现给定时间相加天数的方法
Jan 25 Javascript
JS组件Bootstrap Table使用实例分享
May 30 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
JavaScript判断浏览器运行环境的详细方法
Jun 30 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
Sep 05 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 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根据分类合并数组的方法实例详解
2013/11/06 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
Python字符串详细介绍
2015/05/09 Python
python非递归全排列实现方法
2017/04/10 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
材料加工工程求职信
2014/02/19 职场文书
工程索赔意向书
2014/08/30 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android