利用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 写的简单进度条控件
Jan 22 Javascript
JQuery的ajax基础上的超强GridView展示
Sep 18 Javascript
拥抱模块化的JavaScript
Mar 07 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
Aug 30 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
Apr 23 Javascript
JsRender for object语法简介
Oct 31 Javascript
JavaScript中Null与Undefined的区别解析
Jun 30 Javascript
初识Javascript小结
Jul 16 Javascript
基于jquery步骤进度条源码分享
Nov 12 Javascript
使用Math.max,Math.min获取数组中的最值实例
Apr 25 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 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
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
酒店前厅员工辞职信
2014/01/08 职场文书
园艺师求职信
2014/04/27 职场文书
说明书怎么写
2014/05/06 职场文书
先进班集体事迹材料
2014/12/25 职场文书
初二学生评语大全
2014/12/26 职场文书
毕业设计论文评语
2014/12/31 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL