• 原生JS面向对象方法实现万年历


    ###面向对象的方法实现万年历
    实现思路:
       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
    看的故事多了,才慢慢知道,话说多了就是打自己的脸!
  • 相关阅读:
    UML 类与类之间的关系
    HTTP协议基础
    LDAP介绍
    UML 类与类之间的关系
    我的桌面
    RoR的OO与敏捷[1][88250原创]
    Ubuntu7.10纯仿Leopard[00原创]
    37个我爱Ruby的理由
    在Ubuntu 7.10上安装Rails[00整理]
    RoR的OO与敏捷[1][88250原创]
  • 原文地址:https://www.cnblogs.com/alex-415/p/6810745.html
Copyright © 2020-2023  润新知