当前位置:首页 > JavaScript

js实现二维码生成

2026-01-31 11:35:17JavaScript

使用 QRCode.js 库生成二维码

QRCode.js 是一个轻量级的 JavaScript 库,用于生成二维码。它支持多种配置选项,如颜色、大小和纠错级别。

安装 QRCode.js:

npm install qrcode

基本用法示例:

js实现二维码生成

// 引入库
import QRCode from 'qrcode';

// 生成二维码到Canvas
QRCode.toCanvas(document.getElementById('canvas'), 'https://example.com', {
  width: 200,
  color: {
    dark: '#000000',
    light: '#ffffff'
  }
}, function (error) {
  if (error) console.error(error);
});

// 生成二维码图片URL
QRCode.toDataURL('https://example.com', {
  width: 200
}, function (err, url) {
  if (err) throw err;
  document.getElementById('qr-img').src = url;
});

使用原生Canvas API生成二维码

如果不依赖第三方库,可以通过Canvas API手动实现简单的二维码生成。

基础实现思路:

js实现二维码生成

function generateQR(text, size) {
  const canvas = document.createElement('canvas');
  canvas.width = size;
  canvas.height = size;
  const ctx = canvas.getContext('2d');

  // 简单示例:生成黑白方块图案
  const moduleSize = size / 10; // 假设10x10模块
  for (let y = 0; y < 10; y++) {
    for (let x = 0; x < 10; x++) {
      const shouldFill = (x + y) % 2 === 0; // 简单交替填充
      ctx.fillStyle = shouldFill ? '#000' : '#fff';
      ctx.fillRect(x * moduleSize, y * moduleSize, moduleSize, moduleSize);
    }
  }

  return canvas;
}

// 使用示例
const qrCanvas = generateQR('test', 200);
document.body.appendChild(qrCanvas);

使用Web Component封装二维码生成器

创建可复用的二维码组件:

class QRCodeElement extends HTMLElement {
  constructor() {
    super();
    this.attachShadow({ mode: 'open' });
  }

  static get observedAttributes() {
    return ['data', 'size'];
  }

  attributeChangedCallback(name, oldValue, newValue) {
    if (oldValue !== newValue) {
      this.render();
    }
  }

  render() {
    const data = this.getAttribute('data') || '';
    const size = parseInt(this.getAttribute('size')) || 200;

    this.shadowRoot.innerHTML = `
      <style>
        :host { display: inline-block; }
        canvas { width: 100%; height: auto; }
      </style>
      <canvas width="${size}" height="${size}"></canvas>
    `;

    QRCode.toCanvas(this.shadowRoot.querySelector('canvas'), data, {
      width: size
    });
  }
}

customElements.define('qr-code', QRCodeElement);

使用方式:

<qr-code data="https://example.com" size="150"></qr-code>

注意事项

实际生产环境中建议使用成熟的二维码库,因为完整的二维码生成算法需要考虑:

  • 不同版本的数据容量
  • 纠错级别(L/M/Q/H)
  • 掩码模式选择
  • 格式和版本信息编码
  • 最佳数据编码方式选择

对于简单需求,QRCode.js库已经足够应对大多数场景。原生实现仅适用于学习目的或非常简单的演示场景。

标签: 二维码js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…