IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序自定义弹框+生成二维码功能 -> 正文阅读

[移动开发]微信小程序自定义弹框+生成二维码功能

最近在做小程序的功能,需求是弹框生成二维码功能,所以根据需求自定义了一个弹框组件,后续其他地方也可以用到。

最后效果图如下

?

dialog部分

<!--components/dialog/dialog.wxml-->
<view class='dialog-custom' wx:if="{{visible}}">
  <view class='dialog-mask' bindtap="clickMask"></view>
  <view class="dialog-main">
    <view class="dialog-container">
      <view class='dialog-container__title' wx:if="{{title.length>0}}">
        <view class='title-label'>{{ title }}</view>
          <view class='title-icon'>
            <van-icon wx:if="{{showClose}}" bindtap='close' name="cross" />
          </view>
      </view>
      <view class='dialog-container__body'>
        <slot name="dialog-body"></slot>
      </view>
      <view class='dialog-container__footer' wx:if="{{showFooter}}">
        <view class='dialog-container__footer__cancel' bindtap="close">取消</view>
        <view class='dialog-container__footer__confirm' bindtap='confirm'>确定</view>
      </view>
    </view>
  </view>
</view>
Component({
  /**
  * 组件的属性列表
  */
  properties: {
    visible: {
      type: Boolean,
      value: false
    },
    width: {
      type: Number,
      value: 85
    },
    position: {
      type: String,
      value: 'center'
    },
    title: {
      type: String,
      value: '提示'
    },
    showClose: {
      type: Boolean,
      value: true
    },
    showFooter: {
      type: Boolean,
      value: false
    },
  },
  
  /**
  * 组件的初始数据
  */
  data: {
   
  },
  options:{
    multipleSlots: true
  },
  /**
  * 组件的方法列表
  */
  methods: {
    clickMask() {
      this.setData({ visible: false });
    },
  close(){
    this.setData({ visible: false });
  },
  cancel() {
    this.setData({ visible: false });
    this.triggerEvent('cancel');
  },
  confirm() {
    this.setData({ visible: false });
    this.triggerEvent('confirm');
  }
  }
})
{
  "component": true,
  "usingComponents":{}
}
.dialog-custom {
  width: 100vw;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 9999;
}
  
.dialog-mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 10000;
  width: 100vw;
  height: 100%;
  background: rgba(0, 0, 0, 0.3);
}
  
.dialog-main {
  position: fixed;
  z-index: 10001;
  top: 50%;
  left: 0;
  right: 0;
  width: 85vw;
  height: auto;
  margin: auto;
  transform: translateY(-50%);
}
  
.dialog-container {
  margin: 0 auto;
  background: #fff;
  z-index: 10001;
  border-radius: 3px;
  box-sizing: border-box;
  padding: 40rpx;
}
  
  .dialog-container__title {
  width: 100%;
  height: 50rpx;
  line-height: 50rpx;
  margin-bottom: 20rpx;
  position: relative;
}
.dialog-container__title .title-label{
  display: inline-block;
  width: 100%;
  height: 50rpx;
  line-height: 50rpx;
  font-size: 36rpx;
  color: #000;
  text-align: center;
}
  
.dialog-container__title .title-icon{
  width: 34rpx;
  height: 50rpx;
  position: absolute;
  top: 0;
  right: 0;
}
  
.dialog-container__body {
  padding-top: 10rpx;
  font-size: 32rpx;
  line-height: 50rpx;
  padding: 0rpx 0 60rpx;
  text-align: center;
}
  
.dialog-container__footer {
  height: 76rpx;
  line-height: 76rpx;
  font-size: 32rpx;
  text-align: center;
  border-top: 1px solid #f1f1f1;
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
}
  
.dialog-container__footer .dialog-container__footer__cancel {
  width: 50%;
  color: #999;
  display: inline-block;
}
  
.dialog-container__footer .dialog-container__footer__cancel::after{
  position: absolute;
  right: 50%;
  bottom: 0;
  content: '';
  width: 2rpx;
  height: 76rpx;
  background: #f1f1f1;
}
  
.dialog-container__footer .dialog-container__footer__confirm {
  color: #3B98F7;
  width: 50%;
  display: inline-block;
  text-align: center;
}

引用页面部分

{
  "usingComponents": {
    "dialog": "/components/dialog/dialog"
  }
}
<dialog visible="{{dialogVisible}}" showFooter="{{footerVisible}}" title="{{titleVisible}}">
    <view class='dialog-body' slot="dialog-body">
      <view class='dialog-content'>
        <view class="dialog-url">
          <van-cell-group>
            <van-field
              value="{{ url }}"
              center
              use-button-slot
            >
              <van-button slot="button" size="small" type="info" bindtap="handleCopy">
                复制
              </van-button>
            </van-field>
          </van-cell-group>
        </view>
        <view class='dialog-canvas'>
          <canvas style="width: 400rpx; height: 400rpx;" canvas-id='canvas'></canvas>
        </view>
        <view class="dialog-text">扫码二维码快速加入</view>
      </view>
    </view>
  </dialog>
.dialog-canvas{
  display: flex;
  justify-content: center;
  align-items: center;
}
.dialog-text{
  color:rgb(0, 122, 255);
  padding: 10rpx 0;
}
const app = getApp();
const QRCode = require("../../../utils/weapp-qrcode.js")
Page({

  /**
   * 页面的初始数据
   */
  data: {
    dialogVisible:true,
    footerVisible:false,
    titleVisible:'测试',
    url:'https://blog.csdn.net/Fansr_'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  },

  handleQRCode(){
    //生成二维码
    let size = {}
    size.w = wx.getSystemInfoSync().windowWidth / 750 *600
    size.h = size.w
    var qrcode = new QRCode('canvas', {
      text: this.data.url,
      width: size.w,
      height: size.h,
      colorDark: "#000000",
      colorLight: "#ffffff",
      correctLevel: QRCode.CorrectLevel.H,
    });
  },

  //执行复制
  handleCopy(){
    wx.setClipboardData({
      data: this.data.url,
      success: function (res) {
        wx.getClipboardData({
          success (res) {
            wx.showToast({
              title: '复制成功',
            })
          }
        })
      }
    })
  },
})

生成二维码需要用到weapp-qrcode.js,下载https://github.com/tomfriwel/weapp-qrcode/blob/master/utils/weapp-qrcode.js点开链接保存到相应的位置,我放在/utils/weapp-qrcode.js文件里。

其他页面样式根据实际进行相应调试即可。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:02:21  更:2022-03-21 21:06:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:02:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码