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


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学习基础笔记之DOM对象操作
Nov 03 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
Mar 02 Javascript
JQuery自动触发事件的方法
Jun 13 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
详解Angular 自定义结构指令
Jun 21 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
JS基于正则表达式实现的密码强度验证功能示例
Sep 21 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
微信小程序canvas分享海报功能
Oct 31 Javascript
JS实现网站楼层导航效果代码实例
Jun 16 Javascript
vue+spring boot实现校验码功能
May 27 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
php处理restful请求的路由类分享
2014/02/27 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP6新特性分析
2016/03/03 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python操作文件的参数整理
2019/06/11 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
造型师求职自荐信
2013/09/27 职场文书
七年级地理教学反思
2014/01/26 职场文书
班班通项目实施方案
2014/02/25 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python