###面向对象的方法实现万年历
实现思路:
   1.创建构造函数constructor
   ```
   function Calender(main){
        this.currentDate = new Date()
        this.main = main;
    }
   ```
   2.创建日历对象的prototype方法
   ```
   Calender.prototype = {
        constructor: Calender,
        //创建主体内容区域
        showMain:function(){},
        //创建标题头区域
        showHeader: function(){},   
        //创建week标题头
        showWeek: function(){}, 
        //创建容纳日期的容器
        showDate:function(){},
        //封装一个方法,待点击切换月份时,初始化页面
        showInit: function(){}
    };//对象结束
   ```
   3.实现思路:
      
``` ==> 创建日历对象的主体内容
       showMain:function(){
            var $t = this;//将this对象缓存到$t中,this指向Calender对象
            
            $t.main = document.createElement("main")
            document.body.appendChild($t.main);
            $t.main.style.width = "600px";
            $t.main.style.height = "600px";
            $t.main.style.backgroundColor = "gray";
            $t.main.style.margin = "50px auto";
            $t.main.style.borderRadius = '15px'
        }
```
``` ==> 创建标题头区域(包含切换按钮/年月)
       showHeader: function(){
            var $t = this;
            //左控制键
            var prevSpan = document.createElement('span')
            $t.main.appendChild(prevSpan)
            prevSpan.innerHTML = '<'
            
            //存放年月信息
            var span = document.createElement('span')
            $t.main.appendChild(span)
            
            //右控制键
            var nextSpan = document.createElement('span')
            $t.main.appendChild(nextSpan)
            nextSpan.innerHTML = '>'
            
            var allSpan = document.querySelectorAll('span')
            var month = $t.currentDate.getMonth() + 1
            var year = $t.currentDate.getFullYear()
            
            //设置左边年月信息
            span.innerHTML = year + '年' + month + '月'
            for(var i = 0; i < allSpan.length; i++) {
                var span = allSpan[i]
                //设置span的css样式
                span.style.display = 'inline-block'
                span.style.width = '33.3%';
                span.style.height = '100px'
                span.style.color = 'white'
                span.style.fontSize = '30px'
                span.style.textAlign = 'center'
                span.style.lineHeight = '100px'
                span.id = 'index' + i
                
                //为左右按键添加事件
                if(i==0 || i==2) {
                    span.onclick = function() {
                        month = $t.currentDate.getMonth()
                        year = $t.currentDate.getFullYear()
                        if(this.id == 'index0') {
                            month--
                        } else if(this.id == "index2") {
                            month++
                        }
                    //点击完重新设置当前月
                    $t.currentDate.setMonth(month)
                    //清空页面
                    document.body.innerHTML = ''
                    //重新布局
                    $t.showInit()
                    }
                }
            };      
        }
```
     
``` ==> 创建week标题头
      showWeek: function(){
            var $t = this;
            //创建table标签
            var table = document.createElement('table')
            $t.main.appendChild(table)
            table.style.width = '100%'
            //往表格里边添加一行
            var tr = table.insertRow()
            var weeks = ['日','一', '二', '三', '四', '五', '六' ]
            for(var i = 0; i < weeks.length; i++) {
                //往tr插入列
                var td = tr.insertCell()
                td.style.height = '50px'
                td.style.backgroundColor = 'goldenrod'
                td.style.textAlign = 'center'
                td.innerHTML = weeks[i]
            }
        },
```
     
```==> 创建容纳日期的容器
      showDate:function(){
            var $t = this;
            var table = document.createElement('table')
            $t.main.appendChild(table)
            table.style.width = '100%'
            
            //创建一个名言标签
            var  p = document.createElement("p")
            $t.main.appendChild(p)
            p.innerHTML = "每一天都是新的自己,怎么活,自己决定!"
            p.style.fontSize = "24px";
            p.style.width = "100%";
            p.style.height = "60px";
            p.style.lineHeight = "30px"
            p.style.textAlign = "center"
            p.style.color = "white"
            
            //创建日期容器
            for(var i = 0; i < 6; i++) {
                //创建6行
                var tr = table.insertRow()
                for(var k = 0; k < 7; k++) {
                    //每一行7格
                    var td = tr.insertCell()
                    td.style.height = '60px'
                    td.style.backgroundColor = 'orange'
                    td.style.textAlign = 'center'
                    td.style.fontSize = "20px"
                    var dayIndex = i * 7 + k
                    
                    //计算每一个格所对应的日期对象
                    var eachDate = getEveryDate(dayIndex)
                    //得到每一个日期的号数
                    td.innerHTML = eachDate.getDate()
                    
                    //获取当天日期的值,突出显示当天日期
                    var now = new Date()
                    var currentDay = now.getDate()
                    //console.log(currentDay)
                    if(eachDate.getMonth() == now.getMonth() && eachDate.getDate() ===currentDay)
                        td.style.backgroundColor = "aquamarine"
                    
                    //判断当前月和推算出来的日期的月份是否一样,不一样则代表不是当前月的日期,则把日期灰色显示
                    if(eachDate.getMonth() != $t.currentDate.getMonth()) {
                        td.style.backgroundColor = 'lightgray'
                        td.style.color = 'gray'
                    }
                }
            }
        },
```
``` ==> 封装一个方法,待点击切换月份时,初始化页面
      //封装一个方法,待点击切换月份时,初始化页面
        showInit: function(){
            var $t = this;
            $t.showMain()
            $t.showHeader()
            $t.showWeek()
            $t.showDate()
        }
```
     
```  ==> 对象实例化和初始化页面
        //实例化一个Calender对象
        var calender = new Calender()
    
        calender.showInit()//初始化页面
```
 
源代码地址:github地址==》https://github.com/Hasyou99/Calender

原生JS面向对象方法实现万年历的更多相关文章

  1. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  2. 原生js面向对象编程-选项卡(自动轮播)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 原生js面向对象编程-选项卡(点击)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. JS面向对象方法(二) 面向对象方法实现橱窗式图面预览以及放大功能

     效果图: HTML结构如下: <div id="preview"> <div id="mediumDiv"> <img id=& ...

  5. 模板内部不支持原生js的方法?》》artTemplate模版方法注册window全部事件方法

    我的模板中出现了: {{parseInt(hasshakenum)}} 结果报错: Template Error resultPageTMP Render Error parseInt is not ...

  6. JS面向对象方法(一): 使用原生JS 实现导航栏下多级分类弹出效果

    利用二级菜单的onmouseover/out事件 重新构建一级菜单 ".hover" 样式类 代码如下: CSS部分: 在原来的目标:hover样式中 增加 .hover状态 li ...

  7. 原生js面向对象写法

    Mouse就是一个类,有自己的成员变量和成员方法,成员方法一定加上prototype,避免js原型的坑. var Mouse = function(id) { this.id = id; this.n ...

  8. 自己封装的一个原生JS拖动方法。

    代码: function drag(t,p){ var point = p || null, target = t || null, resultX = 0, resultY = 0; (!point ...

  9. 【方法】原生js实现方法ajax封装

    /* 参数说明* type[String] 请求方式('POST'或'GET') 默认设置'GET'方式* dataType[String] 获取到的后台数据格式 默认'JSON'格式* async[ ...

随机推荐

  1. vue-axios基本用法

    废话不多说,直接搞事搞事. 首先安装axios: 1):npm install 2):npm install vue-axios --save 3):npm install qs.js --save ...

  2. Leetcode 35——Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  3. JavaScript(第七天)【对象和数组】

    什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称做为类,但ECMAScript中却没有这种 ...

  4. c语言一,二数组

    一.PTA实验作业 题目1:7-4 简化的插入排序 1. 本题PTA提交列表 2. 设计思路 1.定义整形变量N,temp,i. 2.输入N 3.通过for(i=1;i<=N;i++)的循环语句 ...

  5. Beta冲刺-用户测试报告

    一.项目概述 1.1项目名称 高校学生征信系统 1.2项目简介 此项目基于SSH框架,力图为学生提供征信服务和信用相关的借款和申请活动.其中以信用统计和管理为主,信用使用为辅,构建出一个集信用收集和使 ...

  6. 敏捷冲刺每日报告--day2

      1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285)  Git链接:https://github.com/WHUSE2017/C-team ...

  7. 一起happy--C++小组Alpha版本发布说明

    1 功能介绍 该PC端APP,是一个同行者的信息搜索平台,旨在为喜欢游玩,但是身边同学朋友时间冲突,想找人结伴的年轻人提供一个检索平台,让他们尽量能够快速便捷的寻找合适同行者.该APP有登录.注册.主 ...

  8. python array 使用创建10万浮点数

    from array import array from random floats = array('d',random((for i in range(10**7)) fp = open('flo ...

  9. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19

    第三次会议:2017-11-16 第二次会议讨论的还没有完全实现,于是在第三次会议上对此进行了一些对我们工作上的看法,得出结论:多花时间啊!!!! 又没照照片图: 会议主要内容: 1.登录注册完善 2 ...

  10. 从源码角度看LinkedList一些基本操作(jdk1.7)

    介绍 LinkedList是一个双向链表,就像下图展示那样,每个节点有个指向上个元素和一个指向下个元素的指针. 接下来我会对我们经常使用的方法进行介绍,代码如下 @Test public void t ...