zoukankan      html  css  js  c++  java
  • 微信小程序自定义弹窗组件

    以下是个人封装的一个组件希望对大家有所帮助 

    示例:

     封装过程如下:

            我们先在小程序里面新建component文件夹用来存放公共组件

     如大家所见,里面已经新建了popup文件夹及其相关文件

     首先

     1、popup.wxml

    <view class="wx-popup" hidden="{{flag}}">
      <view class='popup-container'>
        <view class="wx-popup-con">{{content}}</view>
        <view class="wx-popup-btn">
          <text class="btn-no" bindtap='_error'>{{btn_no}}</text>
          <text class="btn-ok" style="border-right:0;color: #FFAA01;" bindtap='_success'>{{btn_ok}}</text>
        </view>
      </view>
    </view>
    

     2、popup.wxss

    /* pages/actiondetail/index.wxss */
    page{
      height: 100%;
    }
    .wx-popup {
      position: absolute;
      left: 0;
      top: 0;
       100%;
      height: 100%;
      background: rgba(0, 0, 0, .5);
      z-index: 999;
    }
    .popup-container {
      position: absolute;
      left: 50%;
      top: 50%;
      height: 368rpx;
      background: #FFFFFF;
      border-radius: 20rpx;
       80%;
      max- 600rpx;
      box-sizing: bordre-box;
      transform: translate(-50%, -50%); 
      overflow: hidden;
    }
    .wx-popup-con {
      height: 260rpx;
      display: flex;
      justify-content: center;
      align-items: center;
       100%;
      font-size: 32rpx;
      font-weight: 600;
      color: #333333;
    }
    .wx-popup-btn {
      height: calc(100% - 260rpx);
       100%;
      display: flex;
    }
    .wx-popup-btn text{
      display: flex;
      align-items: center;
      justify-content: center;
       50%;
      height: 100%;
      border-top: 1rpx solid #E6E6E6;
      border-right: 1rpx solid #E6E6E6;
      color: #999999;
      font-size: 32rpx;
      font-weight: 600;
    }
    

     3、popup.js

    Component({
      options: {
        multipleSlots: true // 在组件定义时的选项中启用多slot支持
      },
      /**
       * 组件的属性列表
       */
      properties: {
        // title: {            // 属性名
        //   type: String,     // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
        //   value: '标题'     // 属性初始值(可选),如果未指定则会根据类型选择一个
        // },
        // 弹窗内容
        content: {
          type: String,
          value: '内容'
        },
        // 弹窗取消按钮文字
        btn_no: {
          type: String,
          value: '取消'
        },
        // 弹窗确认按钮文字
        btn_ok: {
          type: String,
          value: '确定'
        } 
      },
     
      /**
       * 组件的初始数据
       */
      data: {
        flag: true,
      },
     
      /**
       * 组件的方法列表
       */
      methods: {
        //隐藏弹框
        hidePopup: function () {
          this.setData({
            flag: !this.data.flag
          })
        },
        //展示弹框
        showPopup () {
          this.setData({
            flag: !this.data.flag
          })
        },
        /*
        * 内部私有方法建议以下划线开头
        * triggerEvent 用于触发事件
        */
        _error () {
          //触发取消回调
          this.triggerEvent("error")
        },
        _success () {
          //触发成功回调
          this.triggerEvent("success");
        }
      }
    })
    

      公共组件我们已经写好了 ,接下来就是如何使用

    1、大家根据自己实际情况引用组件哦,我这里是在date这个页面引入,就当做例子示范了

       先配置我们的json文件(usingComponents)就是将组件引入到这个页面

     2、在页面使用他( date.wxml)

     <popup id='popup' 
          content='是否要安排当日训练计划日程' 
          btn_no='否' 
          btn_ok='是'
          bind:error="_error"  
          bind:success="_success">
      </popup>
    

     date.js

     this.popup.showPopup()  ----- 这个是判断弹框显示的    可写在你需要让他弹出的事件里
    某个事件: function (){
      this.popup.showPopup()
    },
     //取消事件
      _error() {
        console.log('你点击了取消');
        this.popup.hidePopup();
      },
      //确认事件
      _success() {
        console.log('你点击了确定');
        this.popup.hidePopup();
      },
    

      

    我们想要的组件就封装完毕了

    捎带这里加一个 date的页面 大家可以看也可以不看  就是记录下

    date.wxml

    <view style="height:100%;">
        <view class="message disf">
            <image class="img1" src="/imgs/icon-Message-notification.png"></image>
            <view>把训练计划加入日程里,可以有效安排训练时间和监督自己</view>
            <image src="/imgs/icon-messages-turning-off.png" class="img2"></image>
        </view>
        <image src="/imgs/1photo-my.png" class="bgImg"></image>
        <view class="date">
            <view class="date-y-m">
                <view class="y-m disf" style="padding-left: 25rpx;" bindtap="yearTap">
                    <view>{{year}}</view>
                    <image src="/imgs/pagedown.png"></image>
                </view>
                <view class="y-m disf" style="padding-right: 25rpx;" bindtap="monthTap">
                    <view>{{month}}月</view>
                    <image src="/imgs/pagedown.png"></image>
                </view>
            </view>
            <view class="date-d">
                <view class='header'>
                    <view wx:for='{{date}}' wx:key="index" class='{{(index == todayIndex) && isTodayWeek ? "weekMark" : ""}}'>{{item}}<view></view></view>
                </view>
                <view class='date-box'>
                    <view wx:for='{{dateArr}}' wx:key="index" class='{{isToday == item.isToday ? "nowDay" : ""}}' data-date='{{item.isToday}}' data-index="{{index}}" bindtap="dateTap">            
                        <view class='date-head disf' style="{{item.status?'background: #FF4D3A;color: #FFFFFF;':''}}">
                            <view class="view" style="{{isToday == item.isToday ? 'transform: translateY(-2px);':''}}">{{item.dateNum}}</view>
                            <view class='{{isToday == item.isToday ? "dian" : "text"}}'>{{isToday == item.isToday ? "" : "练"}}</view>
                        </view>
                    </view>
                </view>
            </view>
        </view>
        <view class="datePopup" wx:if="{{datePopupShow}}">
            <view class="datePopup-bottom">
                <view class="popup-header">
                    <view class="no" data-type="0" bindtap="datePopupTap">取消</view>
                    <view class="yes" data-type="1" bindtap="datePopupTap">确定</view>
                </view>
                <view class="popup-footer">
                    <picker-view indicator-style="height: 50px;" style="100%;height:240rpx;" value="{{value}}" bindchange="bindChange">
                        <picker-view-column>
                        <view wx:for="{{years}}" class="disf" wx:key="index" style="height:80rpx;">{{item}}年</view>
                        </picker-view-column>
                        <picker-view-column>
                        <view wx:for="{{months}}" class="disf" wx:key="index" style="height:80rpx;">{{item}}月</view>
                        </picker-view-column>
                    </picker-view>
                </view>
            </view>
        </view>
        <popup id='popup' 
          content='是否要安排当日训练计划日程' 
          btn_no='否' 
          btn_ok='是'
          bind:error="_error"  
          bind:success="_success">
      </popup>
    </view>
    

      date.wxss

    /* pages/actiondetail/index.wxss */
    page{
      height: 100%;
    }
    .disf{
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .message{
       100%;
      height: 80rpx;
      background: rgba(255, 51, 51, 0.1);
      font-size: 24rpx;
      color: #FF3333;
      position: absolute;
      top: 0;
      z-index: 20;
    }
    .message .img1{
       34rpx;
      height: 26rpx;
    }
    .message .img2{
       13rpx;
      height: 13rpx;
      margin-left: 10rpx;
    }
    .bgImg{
      height: 480rpx;
       100%;
      position: relative;
      top: -150rpx;
    }
    .date{
      position: relative;
      top: -335rpx;
       calc(100% - 48rpx);
      padding: 24rpx;
      background: rgba(255, 51, 51, 0);
    }
    .date .date-y-m{
       315rpx;
      height: 68rpx;
      margin: 0 auto;
      background: #FFFFFF;
      box-shadow: 0px 0px 125rpx 0px rgba(169, 172, 189, 0.25);
      border-radius: 33rpx;
      display: flex;
    }
    .date .date-y-m .y-m{
       50%;
      height: 100%;
      flex-direction: row;
    }
    .date .date-y-m .y-m view{
      color: #333333;
      font-size: 22rpx;
      margin-right: 16rpx;
    }
    .date .date-y-m .y-m image{
       20rpx;
      height: 10rpx;
    }
    .date .date-d{
      height: 692rpx;
       100%;
      background-image: url(data:image/png;base64,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);
      background-size: 100%;
      background-repeat: no-repeat;
    }
    .header{
      font-size: 0;
      padding: 80rpx 24rpx 0 24rpx;
    }
    .header>view{
      display: inline-block;
       14.285%;
      color: #333;
      font-size: 30rpx;
      text-align: center;
      padding: 20rpx 0;
    }
    .weekMark{
      position: relative;
    }
    .weekMark view{
      position: absolute;
      bottom: 0;
      left: 0;
       100%;
    }
    .date-box{
      font-size: 0;
      padding: 10rpx 25rpx;
    }
    .date-box>view{
      position: relative;
      display: inline-block;
       14.285%;
      color: #020202;
      font-size: 40rpx;
      text-align: center;
      vertical-align: middle;
      margin: 7rpx 0;
    }
    .date-head{
       70rpx;
      height: 70rpx;
      font-size: 28rpx;
      color: #333333;
      border-radius: 50%;
      flex-direction: column;
      margin: 0 auto;
    }
    .nowDay .date-head{
      color: #FF4D3A;
      padding-bottom: 16rpx;
      height: 48rpx;
    }
    .date-head .dian{
       10rpx;
      height: 10rpx;
      background: #FF4D3A;
      border-radius: 50%;
    
    }
    .date-head .text{
      font-size: 22rpx;
      color: #FFFFFF;
    }
    .date-weight{
      font-size: 22rpx;
      padding: 15rpx 0;
    }
    .nowDay .date-weight{
      color: #22A7F6;
    }
    .datePopup{
      height: 100%;
       100%;
      background: rgba(0, 0, 0, .28);
      position: absolute;
      top: 0;
      z-index: 999;
    }
    .datePopup .datePopup-bottom{
       100%;
      height: 500rpx;
      background: #FFFFFF;
      border-radius: 30rpx 30rpx 0rpx 0rpx;
      display: flex;
      flex-direction: column;
      position: fixed;
      bottom: 0;
    }
    .datePopup .popup-header{
      margin-top: 48rpx;
      padding: 0 30rpx;
       calc(100% - 60rpx);
      display: flex;
      flex-direction: row;
      justify-content: space-between;
    }
    .popup-header .no{
      color: #999999;
      font-size: 30rpx;
    }
    .popup-header .yes{
      color: #FFAA01;
      font-size: 30rpx;
    }
    .popup-footer{
      height: 240rpx;
       622rpx;
      margin: 80rpx auto;
      overflow: hidden;
      display: flex;
    }
    .intro {
      margin: 30px;
      text-align: center;
    }
    

    date.js

    // pages/actiondetail/index.js
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        name: '',
        year: 0,
        month: 0,
        date: ['日', '一', '二', '三', '四', '五', '六'],
        dateArr: [],
        isToday: 0,
        isTodayWeek: false,
        todayIndex: 0,
        datePopupShow: false, // 日历弹窗
        years: [],// 2000-2040年
        months: [1,2,3,4,5,6,7,8,9,10,11,12], // 12个月
        value: [21, 0],
      },
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        let now = new Date();
        let year = now.getFullYear();
        let month = now.getMonth() + 1;
        console.log(year, month)
        this.dateInit();
        var arr = []
        for( let i = 0; i < 40; i++) {
          arr.push(2000+i)
        }
        this.setData({
          year: year,
          month: month,
          isToday: '' + year + month + now.getDate(),
          years: arr
        })
      },
      dateInit: function (setYear, setMonth) { // 公用方法 获取日期天数
        //全部时间的月份都是按0~11基准,显示月份才+1
        let dateArr = [];                        //需要遍历的日历数组数据
        let arrLen = 0;                            //dateArr的数组长度
        let now = setYear ? new Date(setYear, setMonth) : new Date();
        let year = setYear || now.getFullYear();
        let nextYear = 0;
        let month = setMonth || now.getMonth() + 1;  //没有+1方便后面计算当月总天数
        let nextMonth = (month) > 11 ? 1 : (month);
        let startWeek = new Date(year + ',' + (month) + ',' + 1).getDay();   //目标月1号对应的星期
        let dayNums = new Date(year, nextMonth, 0).getDate();  //获取目标月有多少天
        let obj = {};
        let num = 0;
    
        if (month > 11) {
          nextYear = year + 1;
          dayNums = new Date(nextYear, nextMonth, 0).getDate();
        }
        arrLen = startWeek + dayNums;
        for (let i = 0; i < arrLen; i++) {
          if (i >= startWeek) {
            num = i - startWeek + 1;
            obj = {
              isToday: '' + year + (month) + num,
              dateNum: num,
              weight: 5,
              status: false
            }
          } else {
            obj = {};
          }
          dateArr[i] = obj;
        }
        // console.log('dateArr', dateArr)
        this.setData({
          dateArr: dateArr
        })
    
        let nowDate = new Date();
        let nowYear = nowDate.getFullYear();
        let nowMonth = nowDate.getMonth() + 1;
        let nowWeek = nowDate.getDay();
        let getYear = setYear || nowYear;
        let getMonth = setMonth >= 0 ? (setMonth + 1) : nowMonth;
    
        if (nowYear == getYear && nowMonth == getMonth) {
          this.setData({
            isTodayWeek: true,
            todayIndex: nowWeek
          })
        } else {
          this.setData({
            isTodayWeek: false,
            todayIndex: -1
          })
        }
      },
      yearMonthTap () { // 显示日期选择框
        this.setData({
          datePopupShow: true
        })
      },
      datePopupTap (e) { // 日期选择框点击确定时
        var type = e.currentTarget.dataset.type
        if (type == 0) {
          this.setData({
            datePopupShow: false
          })
        } else {
          this.setData({
            year: this.data.years[this.data.value[0]],
            month: this.data.months[this.data.value[1]],
            datePopupShow: false
          })
          let year = this.data.year
          let month = this.data.month
          console.log(year, month)
          this.dateInit(year, month)
        }
      },
      bindChange: function (e) { // 日期选择器框发生改变
        const val = e.detail.value
        this.setData({
          value: val
        })
      },
      dateTap (e) { // 点击某一天日期触发事件
        this.popup.showPopup()
        var index = e.currentTarget.dataset.index
        var fictionList = this.data.dateArr
        var fictionStatus = 'dateArr[' + index + '].status'
        for (let i = 0; i < fictionList.length; i++) {
          // var otherFiction = 'dateArr[' + i + '].status'
          if (i == index) {
            this.setData({
              [fictionStatus]: true
            })
          }
        }
      },
      //取消事件
      _error() {
        console.log('你点击了取消');
        this.popup.hidePopup();
      },
      //确认事件
      _success() {
        console.log('你点击了确定');
        this.popup.hidePopup();
      },
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
         //获得popup组件
         this.popup = this.selectComponent("#popup");
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
    
      },
    
      /**
       * 页面相关事件处理函数--监听用户下拉动作
       */
      onPullDownRefresh: function () {
    
      },
    
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
    
      },
    
      /**
       * 用户点击右上角分享
       */
      onShareAppMessage: function () {
    
      }
    })
    

      

  • 相关阅读:
    浏览器行为:Form表单提交
    js中new到底做了什么?如何重写new?
    vue与react对比
    关于css中touch-action属性 在移动端开发中遇到的问题
    国际化:node导语言包
    django 开发忘记密码通过邮箱找回功能
    django 通过ajax完成邮箱用户注册、激活账号
    django 通过ajax完成登录
    django 通过邮箱和用户名都能登录
    django引入模板时,部分css文件渲染不成功失灵引入不成功
  • 原文地址:https://www.cnblogs.com/wasbg/p/14313627.html
Copyright © 2011-2022 走看看