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


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中,为什么要尽可能使用局部变量?
Apr 06 Javascript
Webkit的跨域安全问题说明
Sep 13 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
jquery获取元素索引值index()示例
Feb 13 Javascript
node.js中的socket.io的广播消息
Dec 15 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
JS实现页面进入和返回定位到具体位置
Dec 08 Javascript
完美实现js焦点轮播效果(一)
Mar 07 Javascript
node跨域请求方法小结
Aug 25 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 24 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
prototype class详解
2006/09/07 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
Java工程师面试集锦之Spring框架
2013/06/16 面试题
sealed修饰符是干什么的
2012/10/23 面试题
司考复习计划
2015/01/19 职场文书
上课说话检讨书
2015/01/27 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
win10清理dns缓存
2022/04/19 数码科技
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers
Python实现仓库管理系统
2022/05/30 Python