美文网首页
微信小程序组件: 弹窗

微信小程序组件: 弹窗

作者: 牛会骑自行车 | 来源:发表于2023-01-19 09:55 被阅读0次
效果图 popup
  1. 取消及确定按钮(可设置有无)
  2. title(可选择)
  3. 可选点击遮罩是否关闭弹窗
  4. 内容使用插槽

代码 ⬇️
html

<view class="views" wx:if="{{viewShow}}">
  <view class="njx_wrap p_r" style="background: {{wrapBg}};transition-duration: {{duration}}s;" bindtap="close">
    <view class="popup w_100" style="bottom: {{popupBottom}}px;transition-duration: {{duration}}s;">
      <view class="f_r_b title">
        <view wx:if="{{cancelButtonText}}">{{cancelButtonText}}</view>
        <view class="njx_title">{{titleText}}</view>
        <view class="njx_button" catchtap="submit">{{submitButtonText}}</view>
      </view>
      <view class="content">
        <slot></slot>
      </view>
    </view>
  </view>
</view>

css (wrap和按钮使用了公共样式, 不碍事, 自己调~嘿嘿)

@import "/components/common.wxss";

.njx_wrap,
.popup {
  transition-property: all;
  transition-timing-function: ease-in-out;
}

.popup {
  box-sizing: border-box;
  border-radius: 8px 8px 0 0;
  background: #fff;

  position: absolute;
}

.title {
  padding: 12px 20px;
}

js

Component({
  properties: {
    show: Boolean,
    duration: {
      type: Number,
      value: .2
    },
    // 将按钮内容设置为空则该功能取消
    cancelButtonText: {
      type: String,
      value: "取消"
    },
    submitButtonText: {
      type: String,
      value: "确定"
    },
    // 点击遮罩 关闭弹窗
    closeOnPressModal: {
      type: Boolean,
      value: true
    },
    // 标题
    titleText: {
      type: String,
      value: ""
    },
  },
  data: {
    wrapBg: 'rgba(127, 120, 160, 0)',
    viewShow: false,
    popupBottom: -1600,
  },
  methods: {
    submit() {
      this.triggerEvent("submit");
    },
    close() {
      if(!this.data.closeOnPressModal) return;
      this.setData({
        show: false,
      })
    },
  },
  observers: {
    show(show) {
      if (show) {
        this.setData({
          viewShow: show,
        })
        // 定时器的设置: 外面的容器是靠wx:if控制, 如果这个属性和它时间间隔为0的话, 咩有办法使用duration. 不知道有没有道理, 是试出来的
        setTimeout(() => {
          this.setData({
            wrapBg: 'rgba(127, 120, 160, .2)',
            popupBottom: 0,
          })
        }, 40)
      } else {
        this.setData({
          wrapBg: 'rgba(127, 120, 160, 0)',
          popupBottom: -1600,
        })
        // 定时器: 动画duration完毕再关闭该页面
        setTimeout(() => {
          this.setData({
            viewShow: show
          })
        }, this.data.duration * 1000)
      }
    }
  }
})

tada~~~一个好看的popup就完成啦~

相关文章

  • (干货)微信小程序组件封装

    概述 自己封装的一个比较简单微信弹窗小组件,主要就是教会大家对微信小组件的用法和理解,因为微信小程序对组件介绍特别...

  • 微信小程序自定义弹窗wcPop插件|toast信息框|actio

    微信小程序自定义model模态弹窗|actionSheet弹窗|toast自定义图标信息框 微信小程序自定义弹窗实...

  • 小程序相关实用文章

    1、微信小程序开发常见之坑2、微信小程序联盟-微信小程序开发社区-小程序3、怎么在弹窗中加入输入框4、微信小程序实...

  • 小程序好文集合

    组件篇 微信小程序:组件实践 整体梳理 微信小程序开发深入解读

  • 微信小程序-canvas压缩图片使用入门

    微信小程序canvas组件官方文档 微信小程序canvas组件官方文档canvas API canvas组件介绍 ...

  • 微信小程序日历组件开发

    # 微信小程序日历组件开发 微信小程序基础知识 微信小程序 框架介绍 组件文档 上述是开发小程序的基本知识。 今天...

  • 微信小程序基础

    微信小程序介绍微信小程序开发工具的使用微信小程序框架文件微信小程序逻辑层微信小程序视图层微信小程序组件介绍微信小程...

  • 关于微信小程序收集的一些常用实例

    实现复制到剪贴版功能微信小程序 实现复制到剪贴版功能 - a_靖的博客 - CSDN博客 弹窗封装微信小程序弹窗封...

  • 微信小程序组件探究和应用

    把玩微信小程序组件 微信小程序把玩《二》:页面生命周期,模块化,数据绑定,view组件 微信小程序把玩《三》:sc...

  • 微信小程序性能优化实践

    历史回顾: 微信小程序自定义组件 - 表格组件来啦 通过微信小程序来实现 “钉钉打卡” 记一次微信小程序项目分包,...

网友评论

      本文标题:微信小程序组件: 弹窗

      本文链接:https://www.haomeiwen.com/subject/sbxqhdtx.html