vue.js实现日历功能

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-HK" lang="zh-HK" prefix="og: http://ogp.me/ns#">
<head>
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<style>
     *{margin:0;padding:0}
        #calendar{width:210px;margin:100px auto; overflow:hidden;border:1px solid #000; padding:20px; position:relative}
        #calendar h4{ text-align:center; margin-bottom:10px}
        #calendar .a1{ position:absolute;top:20px;left:20px;}
        #calendar .a2{ position:absolute;top:20px;right:20px;}
        #calendar .week{height:30px; line-height:20px;border-bottom:1px solid #000; margin-bottom:10px}
        #calendar .week li{ float:left;width:30px;height:30px; text-align:center; list-style:none;}
        #calendar .dateList{ overflow:hidden; clear:both}
        #calendar .dateList li{float:left;width:30px;height:30px; text-align:center; line-height:30px;list-style:none;}
        #calendar .dateList .ccc{ color:#ccc;}
        #calendar .dateList .red{ background:#F90; color:#fff;}
        #calendar .dateList .sun{ color:#f00;}
        .clickColor{
            width:100px;
            height:100px;
            background:#f00;
        }
</style>
<body>
<div id="app">
    <div id="calendar">
        <h4>{{year}}年{{month}}月{{day}}日</h4>
        <a class="a1" id="prev" @click="prev">上月</a>
        <a class="a2" id="next" @click="next">下月</a>
        <ul class="week">
            <li>日</li>
            <li>一</li>
            <li>二</li>
            <li>三</li>
            <li>四</li>
            <li>五</li>
            <li>六</li>
        </ul>
        <ul class="dateList" id="dateList">    
            <li v-for="item in preMonth" style="color: #ccc;">{{item}}</li>
            <li v-for="item in currMonth" :style="day==item&&month==new Date().getMonth()+1&&year==new Date().getFullYear()?'color:red':''">{{item}}</li>
            <li v-for="item in nextMonth" style="color: #ccc;">{{item}}</li>
        </ul>
  </div>
</div>
</body>

</html>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<script>
var app = new Vue({
  el: '#app',
  data: {
    time:new Date(),
    year:"",
    month:"",
    day:"",
    week:"",
    month0:["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28"],
    month1:["29","30","31"],
    month2:["29","30"],
    month3:["29"],
    month4:[],
    currMonth:[],
    preMonth:[],
    nextMonth:[],
  },
  mounted(){
   this.date()
  },
  methods:{
    date(){
     this.year=this.time.getFullYear()
     this.month=this.time.getMonth()+1
     this.day=this.time.getDate()
     this.months(this.month)
     this.currMonth=this.month4
     this.oneDay(this.year,this.month,1)
     this.changeMonth()
    },
    prev(){
        this.month=this.month==1?12:this.month-1
        this.year=this.month==12?this.year-1:this.year
        this.oneDay(this.year,this.month,1)
        this.months(this.month)
        this.currMonth=this.month4
        this.changeMonth()
    },
    next(){
        this.month=this.month==12?1:this.month+1
        this.year=this.month==1?this.year+1:this.year
        this.oneDay(this.year,this.month,1)
        this.months(this.month)
        this.currMonth=this.month4
        this.changeMonth()
    },
    months(month){
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
            this.month4=this.month0.concat(this.month1)
        }
        if(month==4||month==6||month==9||month==11){
            this.month4=this.month0.concat(this.month2)
        }
        if(month==2){
            if(this.year%4==0){
                this.month4=this.month0.concat(this.month3)
            }else{
                this.month4=this.month0
            }
            
        }
    },
    changeMonth(){
        this.months(this.month-1)
     this.preMonth=this.month4.slice(this.month4.length-this.week,this.month4.length)
     this.months(this.month+1)
     if(this.preMonth.length+this.currMonth.length>35){
        this.nextMonth=this.month4.slice(0,42-this.preMonth.length-this.currMonth.length)
     }else{
        this.nextMonth=this.month4.slice(0,35-this.preMonth.length-this.currMonth.length)
     }
    },
    oneDay(y,m,d){ 
     this.time.setFullYear(y,m-1,d);
     this.week = this.time.getDay()
    }
  }
})
</script>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值