简装picker-view选择年月日

前言:菜狗出没


菜狗呀.png

今回来点啥呢,上菜

  <!-- 选择时间 -->
  <dialog-picker onChangeTime="onChangeTime"></dialog-picker>

制作过程
自己创建按一个爱谁谁的组件
首先是.acss文件

.dialog-datePicker{
  position: fixed;
  width: 100vw;
  height: 100vh;
  left: 0;
  top: 0;
  opacity: 0;
  z-index: 999;
}
.dialog-container{
   width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  position: relative;
}
.dialog-container .dialog-layer{
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0.6)
}
.dialog-container .dialog-closed-layer{
  position: absolute;
  width: 100%;
  height: 100%;
}
.dialog-container .dialog-wrap{
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  box-sizing: border-box;
}

.dialog-container .dialog-closed{
  position: absolute;
  width: 40rpx;
  height: 40rpx;
  right:30rpx;
  top: 28rpx; 
}
.dialog-container .opa0{
  opacity: 0;
}

.dialogcloseView{
  width: 100%;
  height: 60rpx;
  text-align: right;
  right: 0px;
  top: -40px;
}
.pickerclass{
  width: 100%;
  height: 700rpx;
  background: #fff;
}
.pickerbtn{
  top: 0;
  left: 0;
  width: 100%;
  height: 100rpx;
  background: #0a393e;
  color: #ebc98b;
  display: flex;
}
.my-picker{
  margin-top: 140rpx;
}
.canBtn{
  width: 100rpx;
  height: 100rpx;
  margin-left: 30rpx;
  line-height: 100rpx;
}
.sureBtn{
  width: 100rpx;
  height: 100rpx;
  margin-left: 466rpx;
  line-height: 100rpx;
}

接着你就来一个axml文件

<view class="dialog-datePicker" animation="{{dialogAnimation}}" a:if="{{show==true}}">
    <view class="dialog-container">
        <view class="dialog-layer"></view>

        <!-- 背景 -->
        <view class="dialog-wrap" style="align-items: flex-end">
            <view class="pickerclass res  {{animateData}}">
                <picker-view value="{{value}}" onChange="onChange" class="my-picker">
                    <picker-view-column>
                        <view a:for="{{picker.yearArr}}" key="y{{item}}">{{item}}</view>
                    </picker-view-column>
                    <picker-view-column>
                        <view a:for="{{picker.mounthArr}}" key="m{{item}}">{{item}}</view>
                    </picker-view-column>
                     <picker-view-column>
                        <view a:for="{{picker.dayArr}}" key="{{item}}">{{item}}</view>
                    </picker-view-column>
                </picker-view>
                <view class="pickerbtn abs">
                  <view class="canBtn" onTap="closedDialog">
                  取消
                </view>
                 <view class="sureBtn" onTap="sureBtnClick">
                  确认
                </view>
                </view>
                <view class="dialogcloseView abs">
                    <image mode="widthFix" class="dialogcloseBtn" style="width:{{closedic.width}}rpx;" onTap="closedDialog" src="{{closedic.closebtn}}"/>
                </view>
            </view>
        </view>
    </view>
</view>

嗯,准备下菜起锅

const app = getApp();
const {mds,gdc,Utils} = app;
//上面的你们是不需要的

const commonFunction = {
   //创建动画
    createAnimation(){
        this.dialogAnimation = my.createAnimation({
            duration: 400,
            timeFunction: 'ease-in-out',
        });
    },
    //打开弹窗
    openDialog(callback){
      let { dialogAnimation }=this;
      this.setData({
        show: true
      },()=>{
         this.setData({
            dialogAnimation:dialogAnimation.opacity(1).step({duration:400}).export(),
            animateData:"animated fadeInUp "
         })
         callback&&callback();
         //打开弹窗后续调用

      })
    },

    //关闭弹窗
    closedDialog(){
      let { dialogAnimation }=this;

      this.setData({
        dialogAnimation:dialogAnimation.opacity(0).step({duration:400}).export()
      })

      setTimeout(()=>{
        this.setData({
          show:false
        })
      },400)
    }
}

//开发者自定义方法
const diyFunction = {
  //组件初始化
  componentInit(){
    let birth={};
       let time=Utils.getcurrent();//获取当前时间请自己百度
     let dateArr = time.split('-');
      this.setData({time:time});
     let valueArr=[];
     let yearArr=[];
        for(let i=1930;i<=dateArr[0];i++){
          yearArr.push(i)
        }
        valueArr.push(yearArr.length-1);
        let mounthArr=[];
        for(let j=1;j<13;j++){
          mounthArr.push(j);
          if(dateArr[1]==j){
            valueArr.push(j-1);
          }
        }
        let dayArr=[];
          for(let k=1;k<31;k++){
          dayArr.push(k);
        }
       valueArr.push(dateArr.pop()-1);
        this.setData({value:valueArr});
        birth.yearArr=yearArr;
        birth.mounthArr=mounthArr;
        birth.dayArr=dayArr;
        this.setData({picker:birth});
},
//值改变
onChange(e){
  let value=e.detail.value;
    let mouth=this.data.picker.mounthArr[value[1]];
       switch (mouth){
         case 1:case 3:case 5 :case 7 :case 8 :case 10 :case 12:
          let dayArr=[];
          for(let k=1;k<=31;k++){
          dayArr.push(k);
           }

        // value[2]=0;
        this.setData({value:value});
        this.setData({'picker.dayArr':dayArr})
        break;
        case 4 :case 6 :case 9: case 11:
           let dayArr1=[];
          for(let k=1;k<=30;k++){
          dayArr1.push(k);
           }
          if(value[2]>30){
            value[2]=0;
          }
        this.setData({value:value});
        this.setData({'picker.dayArr':dayArr1})
        break;
        case 2:
             let count = 28;
              let birth_year=this.data.time[0];
             if((birth_year%4==0 && birth_year%100!=0) || (birth_year%400==0)){
               count=29
             }
              let dayArr3=[];
              for(let k=1;k<=count;k++){
              dayArr3.push(k);
              }
              if(value[2]>count){
                value[2]=0
              }
        
        this.setData({value:value});
        this.setData({'picker.dayArr':dayArr3})
        break;

        default:
       }
},
// //设置值
// getData(time){

// },
  //
  sureBtnClick(){
    let time=[];
    //  my.alert({content:this.data.value})
    let y=this.data.picker.yearArr[this.data.value[0]];
    let m = this.data.picker.mounthArr[this.data.value[1]];
    let d = this.data.picker.dayArr[this.data.value.pop()];
    // my.alert({content:y+m+d})
    time.push(y);
     time.push(m);
      time.push(d)
      this.props.onChangeTime(time);
      this.closedDialog();
  }
}

Component({
  mixins: [],
  data: {
    dialogAnimation:"",//弹窗动画
    show:false,//是否显示
    value:"",
    oldValue:0,
    time:[],
     animateData:"opa0"
  },
  props: {},
  didMount() {
    //创建动画
    this.createAnimation();

    //初始化数据
    this.componentInit();

    //把组件挂到page页面上
    this.$page.pikerDialog = this;

  },
  didUpdate() {},
  didUnmount() {},
  methods: {
    ...commonFunction,
    ...diyFunction,
  },
});

到此!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容