首页前端开发其他前端知识怎么用js实现日历功能的呢,代码是什么

怎么用js实现日历功能的呢,代码是什么

时间2024-03-26 10:02:03发布访客分类其他前端知识浏览886
导读:这篇文章给大家介绍了“怎么用js实现日历功能的呢,代码是什么”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“怎么用js实现日历功能的呢,代码是什么”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起...
这篇文章给大家介绍了“怎么用js实现日历功能的呢,代码是什么”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“怎么用js实现日历功能的呢,代码是什么”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。



示例代码

template>
    
  div id="calendar">
    
    !-- 年份 月份 -->
    
    div class="month">
    
      ul>
    
        !--点击会触发pickpre函数,重新刷新当前日期 @click(vue v-on:click缩写) -->
    
        li
          class="arrow hands el-icon-arrow-left"
          @click="pickPre(currentYear, currentMonth)"
        >
    /li>
    
        li class="year-month">
    
          span class="choose-year">
{
{
 currentYear }
}
    年/span>
    
          span class="choose-month">
{
{
 currentMonth }
}
    月/span>
    
        /li>
    
        li
          class="arrow hands el-icon-arrow-right"
          @click="pickNext(currentYear, currentMonth)"
        >
    /li>
    
      /ul>
    
    /div>
    
    !-- 星期 -->
    
    ul class="weekdays">
    
      li>
    日/li>
    
      li>
    一/li>
    
      li>
    二/li>
    
      li>
    三/li>
    
      li>
    四/li>
    
      li>
    五/li>
    
      li>
    六/li>
    
    /ul>
    
    !-- 日期 -->
    
    ul class="days">
    
      !-- 核心 v-for循环 每一次循环用li>
    标签创建一天 -->
    
      li v-for="(dayobject, i) in days" :key="i">
    
        !--本月-->
    
        !--如果不是本月  改变类名加灰色-->
    
        span
          v-if="dayobject.day.getMonth() + 1 != currentMonth"
          class="other-month"
          @click="getDayTime(dayobject.day)"
        >

          {
{
 dayobject.day.getDate() }
}
    
        /span>
    
        !--如果是本月  还需要判断是不是这一天-->
    
        span v-else>
    
          !--今天  同年同月同日-->
    
          span
            v-if="
              dayobject.day.getFullYear() == new Date().getFullYear() &
    &
    
              dayobject.day.getMonth() == new Date().getMonth() &
    &
    
              dayobject.day.getDate() == new Date().getDate()
            "
            :class="newDate == newsss ? 'active' : ''"
            @click="getDayTime(dayobject.day, i)"
          >

            {
{
 dayobject.day.getDate() }
}
    
          /span>
    
          span
            v-else
            @click="getDayTime(dayobject.day, i)"
            :class="newDate == dayobject.day ? 'active' : ''"
          >

            {
{
 dayobject.day.getDate() }
}
    
          /span>
    
        /span>
    
      /li>
    
    /ul>
    
  /div>
    
/template>
    
script>

export default {

  data() {

    return {

      currentDay: 1,
      currentMonth: 1,
      currentYear: 2021,
      currentWeek: 1,
      days: [],
      newDate: this.$formatDateYMD(new Date()),
      newsss: this.$formatDateYMD(new Date()),
    }
    ;

  }
,
  created: function () {
    
    // 在vue初始化时调用
    this.initData(null);

  }
,
  methods: {

    initData: function (cur) {
    
      // var leftcount = 0 // 存放剩余数量
      var date;

      if (cur) {
    
        date = new Date(cur);

      }
 else {
    
        var now = new Date();
    
        var d = new Date(this.formatDate(now.getFullYear(), now.getMonth(), 1));
    
        d.setDate(35);
    
        date = new Date(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));

      }
    
      this.currentDay = date.getDate();
    
      this.currentYear = date.getFullYear();
    
      this.currentMonth = date.getMonth() + 1;
    
      this.currentWeek = date.getDay();
 // 1...6,0
      if (this.currentWeek === 0) {
    
        this.currentWeek = 7;

      }
    
      var str = this.formatDate(this.currentYear, this.currentMonth, this.currentDay);
    
      this.days.length = 0;
    
      // 今天是周日,放在第一行第7个位置,前面6个
      // 初始化本周
      for (var i = this.currentWeek;
     i >
    = 0;
 i--) {
    
        var d2 = new Date(str);
    
        d2.setDate(d2.getDate() - i);

        var dayobjectSelf = {
}
    ;
     // 用一个对象包装Date对象  以便为以后预定功能添加属性
        dayobjectSelf.day = d2;
    
        this.days.push(dayobjectSelf);
 // 将日期放入data 中的days数组 供页面渲染使用
      }
    
      // 其他周
      for (var j = 1;
     j = 35 - this.currentWeek;
 j++) {
    
        var d3 = new Date(str);
    
        d3.setDate(d3.getDate() + j);

        var dayobjectOther = {
}
    ;
    
        dayobjectOther.day = d3;
    
        this.days.push(dayobjectOther);

      }

    }
,
    getDayTime(el, index) {
    
      this.newDate = el;

      console.log(el)
    }
,
    pickPre: function (year, month) {
    
      // setDate(0);
     上月最后一天
      // setDate(-1);
     上月倒数第二天
      // setDate(dx) 参数dx为 上月最后一天的前后dx天
      var d = new Date(this.formatDate(year, month, 1));
    
      d.setDate(0);
    
      this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));

    }
,
    pickNext: function (year, month) {
    
      var d = new Date(this.formatDate(year, month, 1));
    
      d.setDate(35);
    
      this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));

    }
,
    // 返回 类似 2022-05-17 格式的字符串
    formatDate: function (year, month, day) {
    
      var y = year;
    
      var m = month;
    
      if (m  10) m = "0" + m;
    
      var d = day;
    
      if (d  10) d = "0" + d;
    
      return y + "-" + m + "-" + d;

    }
,
  }
,
}
    ;
    
/script>
    
style>

#calendar {
    
  font-size: 12px;
    
  width: 100%;
    
  margin: 0 auto;
    
  background: #ecf6ff;

}

.month {
    
  width: 100%;
    
  color: #333333;

}

.month ul {
    
  margin: 0;
    
  padding: 0;
    
  display: flex;
    
  justify-content: space-between;
    
  height: 35px;

}

.year-month {
    
  display: flex;
    
  align-items: center;
    
  justify-content: space-around;
    
  margin-top: 10px;

}

.choose-month {
    
  text-align: center;
    
  font-size: 12px;

}

.arrow {
    
  padding: 15px;
    
  color: #999999;

}

 
.month ul li {
    
  font-size: 12px;
    
  text-transform: uppercase;
    
  letter-spacing: 3px;

}

.weekdays {
    
  margin: 0;
    
  padding: 10px;
    
  display: flex;
    
  flex-wrap: wrap;
    
  color: #999;
    
  justify-content: space-around;

}

.weekdays li {
    
  display: inline-block;
    
  width: 13.6%;
    
  text-align: center;

}

.days {
    
  padding: 10px;
    
  margin: 0;
    
  display: flex;
    
  flex-wrap: wrap;

}

.days li {
    
  list-style-type: none;
    
  display: inline-block;
    
  width: 14.2%;
    
  text-align: center;
    
  padding-bottom: 4px;
    
  padding-top: 10px;
    
  font-size: 12px;
    
  color: #000;

}

.days li .active {
    
  padding: 6px 10px;
    
  border-radius: 50%;
    
  background: #00b8ec;
    
  color: #fff;

}

.days li .other-month {
    
  padding: 5px;
    
  color: gainsboro;

}
    
.days li:hover >
     span >
 span {
    
  padding: 6px 10px;
    
  border-radius: 50%;
    
  background: #00b8ec;
    
  color: #fff;
    
  cursor: pointer;

}
    
/style>
    

注意:在运行过程中可能会出现一点小问题,这里我用到了一个日期处理类库 moment.js,如需安装请执行以下命令安装moment.js插件,在main.js 全局配置。

npm install moment --save

main.js

import Vue from 'vue'
import Moment from 'moment';
    
Vue.prototype.$Moment = Moment;

Vue.prototype.$formatDateYMD = function(date) {

    return Moment(date).format('YYYY-MM-DD')
}
    

关于“怎么用js实现日历功能的呢,代码是什么”的内容就介绍到这,感谢各位的阅读,相信大家对怎么用js实现日历功能的呢,代码是什么已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 怎么用js实现日历功能的呢,代码是什么
本文地址: https://pptw.com/jishu/653426.html
怎样提高php脚本性能?这些技巧你知道吗? Go语言中如何实现数据竞争,相关问题有哪些

游客 回复需填写必要信息