###面向对象的方法实现万年历
实现思路:
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面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- 原生js面向对象编程-选项卡(自动轮播)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 原生js面向对象编程-选项卡(点击)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JS面向对象方法(二) 面向对象方法实现橱窗式图面预览以及放大功能
效果图: HTML结构如下: <div id="preview"> <div id="mediumDiv"> <img id=& ...
- 模板内部不支持原生js的方法?》》artTemplate模版方法注册window全部事件方法
我的模板中出现了: {{parseInt(hasshakenum)}} 结果报错: Template Error resultPageTMP Render Error parseInt is not ...
- JS面向对象方法(一): 使用原生JS 实现导航栏下多级分类弹出效果
利用二级菜单的onmouseover/out事件 重新构建一级菜单 ".hover" 样式类 代码如下: CSS部分: 在原来的目标:hover样式中 增加 .hover状态 li ...
- 原生js面向对象写法
Mouse就是一个类,有自己的成员变量和成员方法,成员方法一定加上prototype,避免js原型的坑. var Mouse = function(id) { this.id = id; this.n ...
- 自己封装的一个原生JS拖动方法。
代码: function drag(t,p){ var point = p || null, target = t || null, resultX = 0, resultY = 0; (!point ...
- 【方法】原生js实现方法ajax封装
/* 参数说明* type[String] 请求方式('POST'或'GET') 默认设置'GET'方式* dataType[String] 获取到的后台数据格式 默认'JSON'格式* async[ ...
随机推荐
- Linux命令 ls -l s输出内容含义详解
1. ls 只显示文件名或者文件目录 2. ls -l(这个参数是字母L的小写,不是数字1) 用来查看详细的文件资料 在某个目录下键入ls -l可能会显示如下信息: 文件属性(占10个字符空间) ...
- linux小白成长之路10————SpringBoot项目部署进阶
[内容指引] war包部署: jar包部署: 基于Docker云部署. 一.war包部署 通过"云开发"平台初始化的SpringBoot项目默认采用jar形式打包,这也是我们推荐的 ...
- mobiscroll2.5.4 日期组件
<script type="text/javascript"> function setCss(o) { $('input:jqmData(role="dat ...
- 201621123057 《Java程序设计》第8周学习总结
1. 本周学习总结 思维导图归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 ArrayList是允许重复的,但当用它来 ...
- MySQL 操作详解
MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...
- Java 中 compareTo方法问题
compareTo方法原理:先读取出字符串的第一个“字母”进行比较,比较的方法是ascii码表的值(字符所对应的十进制值),如果前面的大那么返回1,后面的大返回-1:此位置相同,继续比较下一位,直到最 ...
- Java 持久化之 --io流与序列化操作
1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...
- token 验证
组件: https://jwt.io/#libraries-io
- 新概念英语(1-129)Seventy miles an hour
Lesson 129 Seventy miles an hour 时速70英里 Listen to the tape then answer this question. What does Ann ...
- Spring Security入门(3-9)Spring Security登录成功以后