###面向对象的方法实现万年历
实现思路:
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[ ...
随机推荐
- ResultSet的getInt()和getString()方法详解
数据库tt的examstudent数据表如下: 在MySQL中执行查询语句如下: ResultSet rs = null; String sql="SELECT flow_id,Typ ...
- 数据结构基础——结构体struct及类型别名typedef的使用
一.结构体的创建 在C语言中,实现数据结构的一种常用方法便是使用结构体(structure)其示例代码如下: struct stu { int num; char ch; }; struct表示创建结 ...
- C++高效安全的运行时动态类型转换
关键字:static_cast,dynamic_cast,fast_dynamic_cast,VS 2015. OS:Window 10. C++类之间类型转换有:static_cast.dynami ...
- CDH:5.14.0 中 Hive BUG记录
CDH5.14.0使用的HIVE版本: 自建表log: +----------------------------------------------------+--+ | createtab_st ...
- Linux入门(2)_给初学者的建议
1 学习Linux的注意事项 严格区分大小写(命令, 文件, 选项) Linux中所有内容以文件形式保存, 包括硬件 硬盘文件是/dev/sd[a-p] 光盘文件是/dev/sr0等 Linux不靠扩 ...
- MapReduce工作机制——Word Count实例(一)
MapReduce工作机制--Word Count实例(一) MapReduce的思想是分布式计算,也就是分而治之,并行计算提高速度. 编程思想 首先,要将数据抽象为键值对的形式,map函数输入键值对 ...
- 深度学习之 cnn 进行 CIFAR10 分类
深度学习之 cnn 进行 CIFAR10 分类 import torchvision as tv import torchvision.transforms as transforms from to ...
- Mysql主从复制架构实战
[root@Mysql-master ~]# vim /etc/my.cnf log-bin=mysql-bin server-id = 1 #slave端server-id值改成2 mysql&g ...
- Python内置函数(60)——compile
英文文档: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Compile the source i ...
- C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字
这篇文章是 GDI+ 总结系列的第三篇,如果对 GDI+ 的基础使用不熟悉的朋友可以先看第一篇文章<C# 使用 GDI+ 画图>. 需求 需求是要实现给图片添加任意角度旋转的文字,文字的旋 ...