在这个移动支付盛行的时代,二维码已经成为日常生活中不可或缺的一部分。今天要分享的是一个精心设计的二维码生成器实现方案,从界面设计到功能实现,从用户体验代码架构,都充满了令人眼前一亮的细节。

设计理念与技术选型

这个二维码生成器采用了现代化的 UI 设计风格,结合了实用性和美观性。整体采用卡片式布局,搭配清新的渐变背景和毛玻璃效果,让整个应用看起来既高级又不失亲和力。

.container {
  min-height: 100vh;
  background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  padding: 20px;
}
.content-card {
  background: rgba(255, 255, 255, 0.95);
  border-radius: 20px;
  padding: 25px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  backdrop-filter: blur(10px);
}

核心功能模块1. 内容输入区域

输入区域的设计,不仅有字数统计,还加入了优雅的焦点效果:

{{ content.length }}/500

样式上采用了柔和的过渡效果:

.content-input {
  width: 100%;
  height: 100px;
  padding: 12px;
  border: 2px solid #e0e0e0;
  border-radius: 12px;
  transition: all 0.3s ease;
}
.content-input:focus {
  border-color: #3498db;
  box-shadow: 0 0 0 4px rgba(52, 152, 219, 0.1);
}

2. 颜色选择器

颜色选择器的实现是一大亮点,采用了弹窗式设计,包含预设颜色和自定义输入两种方式:

✓
        v-model="customColor"
        @input="validateColorInput"
        placeholder="#000000"
      />
    

有时候会出现 input 框超出预设卡片的情况,可以使用 box-sizing: border-box; 并预设高度来解决。

在这里插入图片描述

颜色验证逻辑:

validateColorInput(e) {
  const color = e.detail.value;
  if (/^#[0-9A-Fa-f]{6}$/.test(color)) {
    this.previewColor = color;
  }
}

3. 二维码生成与预览

二维码生成采用了外部 API 服务,通过参数控制二维码的样式:

generateQR() {
  const qrApi = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(this.content)}&size=${this.size}x${this.size}&color=${this.foregroundColor.substring(1)}&bgcolor=${this.backgroundColor.substring(1)}`;
  
  uni.downloadFile({
    url: qrApi,
    success: (res) => {
      if (res.statusCode === 200) {
        this.qrCodeUrl = res.tempFilePath;
      }
    }
  });
}

预览区域的设计也很讲究:

.qr-preview {
  width: 100%;
  height: 300px;
  border-radius: 12px;
  border: 2px solid #e0e0e0;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
}

在这里插入图片描述

4. 保存功能

保存功能使用了 uni-app 的原生接口,确保了跨平台的兼容性,web 端要使用条件编译单独处理,我的编译目标是小程序就没处理。

saveQR() {
  uni.saveImageToPhotosAlbum({
    filePath: this.qrCodeUrl,
    success: () => {
      uni.showToast({ title: '保存成功', icon: 'success' });
    }
  });
}

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。