利用JS制作万年历的方法


Posted in Javascript onAugust 16, 2017

我们知道,万年历在人们的生活中是在平常不过的一种东西了,那么怎样用JS来实现在网页中展示一个与众不同万年历呢

1.HTML布局:

<div id="calendar">
  <div id="month_year">
    <select id="year"></select>年
    <select id="month"></select>月
  </div>
  <ul id="title">
    <li>星期日</li>
    <li>星期一</li>
    <li>星期二</li>
    <li>星期三</li>
    <li>星期四</li>
    <li>星期五</li>
    <li>星期六</li>
  </ul>
  <ul id="datesUl"></ul>
</div>

1.首先在布局上,可以先用一个id为calender(日历)的div将你的万年历包住,以便我们对万年历的位置进行设置;

2.在这个大的div中有三部分: 1. month_year 用以设置年月; 2.title 用以显示星期; 3.detesUl 用以显示具体的日期;

CSS样式:

*{
      padding: 0;
      margin: 0;
      list-style: none;
    }
    #calendar{
      width: 700px;
      background-color: lightgray;
      margin: 20px auto;

    }
    #calendar::after{
      content: "";
      display: block;
      clear: both;
    }
    #month_year{
      width: 700px;
      height: 50px;
      line-height: 50px;
      text-align: center;
    }
    ul > li{
      float: left;
      width: 100px;
      height: 50px;
      text-align: center;
      line-height: 50px;
    }
    #datesUl > li:empty{
      opacity: 0;
    }
    #datesUl > li:hover{
      background-color: lightblue;
    }

JS代码分析:

  1. 做一些初始化的处理,给俩个显示年月的选项卡中添加内容便于用户查找
  2. 构造一些我们要用到的函数: 如输入年月计算出这个月有几天,创建添加option及li的函数
<script>
  var yearSelect = document.getElementById('year');
  var monthSelect = document.getElementById('month');
  var datesUl = document.getElementById('datesUl');
  //初始化
  function init(){
    for(var year=1990;year<3000;year++){    //初始化俩个选项卡
      createOption(year,year,yearSelect);
    }
    for(var month=1;month<13;month++){
      createOption(month,month,monthSelect);
    }
    var now = new Date();            //获取当前的日期
    showSelect(now.getFullYear(),now.getMonth()+1);  //引用显示选项卡的函数

    showDates();                  //调用显示日期的函数

    yearSelect.onchange=function(){         //当选项卡改变时
      showDates();
    };
    monthSelect.onchange=function(){
      showDates();
    }
  }
  init();            //调用初始化函数   
  //创建option的函数
  function createOption(text,value,parent){
    var option = document.createElement('option');
    option.innerHTML = text;
    option.value = value;
    parent.appendChild(option);
  }
  //获取当前的日期并显示在选项卡中
  function showSelect(year,month){
    yearSelect.value = year;
    monthSelect.value = month;
  }
  //获取选择的年月的第一天是星期几
  function getDays(year,month){
    var d = new Date(year,month,1);
    return d.getDay();
  }
  //根当前的select中的年和月来显示日期
  function showDates(){
    datesUl.innerHTML= "";
    var year = yearSelect.value;
    var month = monthSelect.value;
    //创建空的li
    for(var i=0;i<getDays(year,month);i++){
      createLi("",datesUl);
    }
    //创建有日期的li
    for(var j=1;j<=getDatesOfMonth(year,month);j++){
      createLi(j,datesUl);
    }
  }
  //创建li并添加至对应的容器
  function createLi(text,parent){
    var li = document.createElement('li');
    li.innerHTML = text;
    parent.appendChild(li);
  }
  //创建一个输入年月计算出这个月有几天的函数
  function getDatesOfMonth(year,month){
    var d = new Date(year,month,0);
    return d.getDate();
  }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
JS获取地址栏参数的几种方法小结
Feb 28 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
JavaScript事件委托技术实例分析
Feb 06 Javascript
jQuery点缩略图弹出层显示大图片
Feb 13 Javascript
js改变embed标签src值的方法
Apr 10 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
webpack4 入门最简单的例子介绍
Sep 05 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
实现一个Vue自定义指令懒加载的方法示例
Jun 04 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 #Javascript
React Native 集成jpush-react-native的示例代码
Aug 16 #Javascript
jQuery实现全选、反选和不选功能
Aug 16 #jQuery
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 #Javascript
微信小程序删除处理详解
Aug 16 #Javascript
微信小程序实现倒计时60s获取验证码
Apr 17 #Javascript
微信小程序实现根据字母选择城市功能
Aug 16 #Javascript
You might like
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Python中的生成器和yield详细介绍
2015/01/09 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
详解python tcp编程
2020/08/24 Python
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
机电一体化大学生求职信
2013/11/08 职场文书
服务生自我鉴定
2014/01/22 职场文书
殡葬服务心得体会
2014/09/11 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
2014年节能工作总结
2014/12/18 职场文书
休假证明书
2015/06/24 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2019各种承诺书范文
2019/06/24 职场文书