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


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 相关文章推荐
javascript 解析url的search方法
Feb 09 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
Feb 14 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
Express + Session 实现登录验证功能
Sep 08 Javascript
select标签设置默认选中的选项方法
Mar 02 Javascript
基于mpvue的小程序项目搭建的步骤
May 22 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 Javascript
详解Vue 的异常处理机制
Nov 30 Vue.js
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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
摘自百度的图片轮换效果代码
2007/11/19 Javascript
json 定义
2008/06/10 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
js实现验证码干扰(静态)
2021/02/22 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
Python isinstance判断对象类型
2008/09/06 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python解释执行原理分析
2014/08/22 Python
列举Python中吸引人的一些特性
2015/04/09 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
python正则表达式之作业计算器
2016/03/18 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Python subprocess库的使用详解
2018/10/26 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python学习笔记之装饰器
2020/08/06 Python
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
测试工程师职业规划书
2014/02/06 职场文书
食品流通安全承诺书
2014/05/22 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
公司财务管理制度
2015/08/04 职场文书
Python matplotlib多个子图绘制整合
2022/04/13 Python