vue移动端日历组件封装

        最近项目需求,需要做一个移动端的日历,类似于安卓原生日历。网上找了很多成熟的插件都不是想要。偶然的机会发现某篇博客上有人写的有类似的,于是拿过来稍加改造,终于可以用了。在这里非常感谢这位博主,省去我很多的开发时间。附上此博客地址:https://blog.csdn.net/yin_you_yu/article/details/81126513

        废话不多说,直接附上代码供大家参考:


 





 

   效果图:

vue移动端日历组件封装_第1张图片

标注日程:

//import scheduleApi from '@/api' 接口
//当前月份所有有日程的天(标记)接口获取
//用法:直接在initData函数中最后位置调用即可

    getMonthEventDay(){
      const self=this
      const url = scheduleApi.getSign
      const yearOrMonth=`${this.currentYear}-${this.currentMonth}`
      const postData={
          month:yearOrMonth
      }
      self.$post(url, postData).then(res =>{
          if (res.result ===0){
                const list=res.data || []  
                 self.days.forEach(item =>{
                  //判断属于当前月份
                  if(item.day.getMonth()+1 === this.currentMonth){
                      list.forEach(vo =>{
                            //判断接口返回有日程的天,有的话状态status置为3
                         if(item.day.getFullYear() === new Date(vo.start).getFullYear() && item.day.getMonth() === new Date(vo.start).getMonth() && item.day.getDate() === new Date(vo.start).getDate()){
                              item.status='3'
                         }
                      })
                  }
              })
          }
      })
      
    }

new Date()在Safari上的坑解决办法

我们经常用yyyy-MM-dd HH:mm:ss格式表示日期,如2018-11-11 00:00:00,在js开发中也经常会把此格式字符串格式化为javascript Date类型,如new Date('2018-11-11 00:00:00'),不幸的是此操作在Safari浏览器(不论是Mac还是iPhone)上会报错,返回Invalid Date

 /**
     * 在Safari和IE8上执行 new Date('2017-12-8 11:36:45'); 会得到Invalid Date
     * 本函数重写默认的Date函数,以解决其在Safari,IE8上的bug
     */
    Date = function (Date) {
      MyDate.prototype = Date.prototype;
      return MyDate;

      function MyDate() {
        // 当只有一个参数并且参数类型是字符串时,把字符串中的-替换为/
        if (arguments.length === 1) {
          let arg = arguments[0];
          if (Object.prototype.toString.call(arg) === '[object String]' && arg.indexOf('T') === -1) {
            arguments[0] = arg.replace(/-/g, "/");   
          }
        }
        let bind = Function.bind;
        let unbind = bind.bind(bind);
        return new (unbind(Date, null).apply(null, arguments));
      }
    }(Date);

 

你可能感兴趣的:(javascript,vue移动端,前端开发)