微信小程序 - 内容弹出框实现(Vant Weapp 实现、原生实现)

内容弹出框概述

  • 这里的内容弹出框特指:有内容区域、无标题、无确认取消按钮、有背景遮罩、点击背景遮罩可关闭的模态弹窗

一、Vant Weapp 实现

html 复制代码
<van-popup show="{{ show }}" bind:close="onClose" round>
    <view class="detail-container">
        some content
    </view>
</van-popup>
css 复制代码
.detail-container {
    box-sizing: border-box;
    width: 90vw;
    padding: 40rpx;
}
js 复制代码
Page({
  data: {
    show: false,
  },

  showDetail(event) {
    this.setData({
      show: true,
    });
  },

  onClose(event) {
    this.setData({
      show: false,
    });
  },
});
2、使用 Dialog 组件
html 复制代码
<van-dialog 
    use-slot
    show="{{ show }}"
    show-confirm-button="{{ false }}" 
    show-cancel-button="{{ false }}"
    close-on-click-overlay>

    <view class="detail-container">
        some content
    </view>

</van-dialog>
js 复制代码
Page({
  data: {
    show: false,
  },

  showDetail(event) {
    this.setData({
      show: true,
    });
  },
});
3、使用 Overlay 组件
html 复制代码
<van-overlay show="{{ show }}" bind:click="onClose">
    <view class="detail-container">
        some content
    </view>
</van-overlay>
css 复制代码
.detail-container {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    box-sizing: border-box;
    width: 90vw;
    padding: 40rpx;
    border-radius: 20rpx;
    background-color: white;
}
js 复制代码
Page({
  data: {
    show: false,
  },

  showDetail(event) {
    this.setData({
      show: true,
    });
  },

  onClose(event) {
    this.setData({
      show: false,
    });
  },
});

二、原生实现

html 复制代码
<view class="page-container">
    <button bindtap="openDialog">打开弹出框</button>
</view>
<!-- 弹出框 -->
<view class="{{ dialogStyle }}">
    <view>some content</view>
    <view>some content</view>
    <view>some content</view>
    <view>some content</view>
    <view>some content</view>
</view>
<!-- 背景遮罩 -->
<view class="{{ maskStyle }}" bindtap="closeDialog"></view>
css 复制代码
Page {
  width: 100%;
  height: 100%;

  .page-container {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 0;
  }
}

.my-dialog {
  box-sizing: border-box;
  width: 80%;
  padding: 40rpx;
  border-radius: 10rpx;
  background-color: white;
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 200;
}

.my-dialog-show {
  top: 50%;
}

.my-dialog-hide {
  top: 1000vh;
}

.bg-mask {
  width: 100vw;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.5);
  position: fixed;
  top: 0;
  left: 0;
  z-index: 100;
}

.bg-mask-show {
  top: 0;
}

.bg-mask-hide {
  top: 1000vh;
}
js 复制代码
Page({
  data: {
    dialogStyle: "my-dialog my-dialog-hide",
    maskStyle: "bg-mask bg-mask-hide",
  },

  openDialog() {
    this.setData({
      dialogStyle: "my-dialog my-dialog-show",
      maskStyle: "bg-mask bg-mask-show",
    });
  },

  closeDialog() {
    this.setData({
      dialogStyle: "my-dialog my-dialog-hide",
      maskStyle: "bg-mask bg-mask-hide",
    });
  },
});
相关推荐
吃好睡好便好4 小时前
用while循环语句求和
开发语言·学习·算法·matlab·信息可视化
TechWayfarer4 小时前
查询IP所在地的3种方案:从API到离线库,风控场景怎么选?
开发语言·网络·python·网络协议·tcp/ip
摇滚侠4 小时前
Java 零基础全套教程,集合框架,笔记 153-163
java·开发语言·笔记
程序员榴莲4 小时前
Python 单例模式
开发语言·python·单例模式
L、2185 小时前
CANN算子开发调试实战:从“Segmentation Fault“到定位根因的完整流程
java·开发语言
狗凯之家源码网5 小时前
基于PHP的多语言跨境电商B2B2C商城系统技术解析
开发语言·php
Hyyy5 小时前
普通前端续命周报——第1周
前端·javascript
比特森林探险记6 小时前
go 语言中的context 解读和用法
开发语言·后端·golang
古城小栈6 小时前
Rust 调用 C 语言库 实战指南(企业级)
c语言·开发语言·rust
KaMeidebaby6 小时前
卡梅德生物技术快报|抗独特型抗体开发:半抗原检测技术瓶颈拆解,抗独特型抗体开发工程化实践
前端·数据库·人工智能·其他·百度·新浪微博