cocos2d-html5版日历组件
根据一as3版本给改编成成了js版的。as3版本的地址: http://download.csdn.net/detail/fengye513/2722289
胜利项目做的差不多了,由于项目用的是c++,并没有动态更新逻辑的需求,所以也就没有写什么js或者lua脚本,全部c++,涉及到付费或者分享之类特殊处理,objc和java还是写了不少。话不多说,现在游戏里增加了一个会不定期更新的活动模块,逻辑部分和UI部分都会实事改动,一开始想要写lua,但是由于引擎版本差异,引擎代码被改动过等原因,放弃了lua binding的方式,于是就用到了webView这个东东,直接嵌入页面到游戏中,搞定了objc与js互调,java与js互调之后,利用cocosx-html5引擎开些了。
活动嘛,少不了签到,签到,肯定是在日历上签咯。
共三个类,类名没怎么改,还是用as那老兄的命名
DayObject :日历上每一天的数据
DateShape : 日历上每一天的视图
SuperCalendar : 日历容器 new一个SuperCalendar并addChild到你想要它出现的地方,然后调用setData()方法传递年,月,日,就可以了,
支持跳月,跳年就没写了,如果你需要的话可以看看原本的as代码里有。
上代码:
/**
* @anthor JiaDing
*
*/ var DayObject = cc.Class.extend({ innerText:null,//几号
isToady:false,//是否是当天
isMark:false,//是否签到 init:function ()
{ return true; } }); DayObject.create = function()
{
var obj = new DayObject();
if(obj && obj.init())
{
return obj;
}
return null;
};
/**
* @anthor JiaDing
*
*/ var DateShape = cc.Sprite.extend({ _label:null,
_lis:null,
_Obj:null, init:function (val)
{
var ready = false;
if (this._super())
{
// winSize = cc.Director.getInstance().getWinSize(); this._lis = [];
this._Obj = val; var markInfo = null;
if(this._Obj.isMark)
{
markInfo = "(已签)";
}
else
{
markInfo = "(未签)";
}
this._label = cc.LabelTTF.create(this._Obj.innerText+markInfo, "Arial", 25); if(this._Obj.isToady)
{
this._label.setColor(cc.c3b(255,0,0));
}
else
{
this._label.setColor(cc.c3b(255,255,255));
} this.addChild(this._label); ready = true;
}
return ready; } }); DateShape.create = function(val)
{
var shape = new DateShape();
if(shape && shape.init(val))
{
return shape;
}
return null;
}; DateShape.prototype.remove = function()
{
this.removeAllChildren(true);
this._label = null;
this._lis = null; }
/**
* @anthor JiaDing
*
*/ var SuperCalendar = cc.Layer.extend({ daysMonth:null,
thisYear:0,
thisMonth:0,
thisDay:0,
day:null,
dayObj:null,
dateSprite:null, inputDate:null,
today:null,
todayTitleInfo:null, init:function ()
{
var bRet = false;
if (this._super())
{ this.daysMonth = [31,28,31,30,31,30,31,31,30,31,30,31];//正常的月份日期
this.day = new Array(42);
this.dayObj = new Array(42); bRet = true;
}
return bRet; },
setData:function(y,m,d)
{
this.thisYear = y;
this.thisMonth = m;
this.thisDay = d;
this.today = this.thisYear + "-" + this.thisMonth + "-" + this.thisDay;
this.updateCalendar();
},
updateCalendar:function ()
{
if(this.dateSprite != null)
{
this.dateSprite.removeAllChildren(true);
this.removeChild(this.dateSprite);
this.dateSprite = null;
}
var iRemove=0;
// document.write(this.dateSprite);
if(this.dateSprite == null)
{
this.dateSprite = cc.Sprite.create();
this.addChild(this.dateSprite);
} var y = this.thisYear;
var m = this.thisMonth;
var d = this.thisDay; if(!(y <= 9999 && y >= 1000 && m > 0 && m < 13 && d > 0)){
//日期初始化
this.thisYear = 2013
this.thisMonth = 7;
this.thisDay = 10;
} this.todayTitleInfo = this.thisYear + "年 " + this.thisMonth + "月"; y = this.thisYear;
m = this.thisMonth;
d = this.thisDay;
this.daysMonth[1] = (0 == y%4 &&(y%100!=0 || y%400==0)) ? 29:28;
var w = new Date(y,m-1,1).getDay(); var prevDays = m==1? this.daysMonth[11] : this.daysMonth[m-2];
var i;
for(i=(w-1);i >= 0;i--){
this.day[i] = y + "-" + (m-1) + "-" + prevDays;
if(m == 1){
this.day[i] = (y-1) + "-" + 12 + "-" + prevDays;
}
prevDays--;
}
for(i=1;i <= this.daysMonth[m-1];i++){
this.day[i+w-1] = y + "-" + m + "-" + i;
}
for(i=1;i<42-w-this.daysMonth[m-1]+1;i++){
this.day[this.daysMonth[m-1]+w-1+i] = y + "-" + (m+1) + "-" + i;
if(m==12){
this.day[this.daysMonth[m-1]+w-1+i] = (y+1) + "-" + 1 + "-" + i;
}
} for(i=0;i<42;i++)
{
var a = this.day[i].split("-");
this.dayObj[i] = DayObject.create();
this.dayObj[i].innerText = a[2];
this.dayObj[i].isToady = false; //非本月份,不显示日期
if(i < w)
{
continue;
}
if(i >= w+this.daysMonth[m-1])
{
continue;
} //今天日期
if(this.day[i] == this.today)
{
this.dayObj[i].isToady = true;
} var dateShape = DateShape.create(this.dayObj[i]);
dateShape.setPositionX((i % 7) * 115);
//cocos2d的世界里越往下y越小,所以要(6-i)
dateShape.setPositionY( Math.floor((6-i) / 7) * 40 ); this.dateSprite.addChild(dateShape); }
},
jumpToPrevMonth:function()
{
this.thisDay = 1;
if(this.thisMonth == 1)
{
this.thisYear--;
this.thisMonth = 13;
}
this.thisMonth--;
this.updateCalendar();
},
jumpToNextMonth:function()
{
this.thisDay = 1;
if(this.thisMonth == 12)
{
this.thisYear++;
this.thisMonth = 0;
}
this.thisMonth++;
this.updateCalendar();
},
jumpToToday:function()
{
this.thisYear = 2013;
this.thisMonth = 7;
this.thisDay = 10;
this.today = this.thisYear + "-" + this.thisMonth + "-" + this.thisDay; //今天("yyyy-dd-mm")
this.updateCalendar();
}
}); SuperCalendar.create = function()
{
var layer = new SuperCalendar();
if(layer && layer.init())
{
return layer;
}
return null;
};
cocos2d-html5版日历组件的更多相关文章
- jmgraph前端画图组件(html5版)
原文:jmgraph前端画图组件(html5版) jmgraph是一个基于html5的WEB前端画图组件. 前端画图对象控件化,支持鼠标和健盘事件响应,可对单个控件样式设定,支 ...
- HTML5版的String Avoider小游戏
HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...
- 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a
现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...
- input的type属性引申的日历组件
HTML5规范里只规定date新型input输入类型,并没有规定日历弹出框的实现和样式.所以,各浏览器根据自己的设计实现日历.目前只有谷歌浏览器完全实现日历功能.相信这种局面很快就会结束,所有的浏览器 ...
- 基于Vue2-Calendar改进的日历组件(含中文使用说明)
一,前言 我是刚学Vue的菜鸟,在使用过程中需要用到日历控件,由于项目中原来是用jQuery写的,因此用了bootstarp的日历控件,但是配合Vue实在有点蛋疼,不够优雅…… 于是网上搜了好久找到了 ...
- 微信小程序横版日历,tab栏
代码地址如下:http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 日历组件 原生js
自己基于原生js编写的日历组件 git地址: https://github.com/lihefen/calendar.git demo : https://lihefen.github.io/cale ...
- 免费的HTML5版uploadify送上
相信有不少同学用过uploadify这一款文件上传插件,它支持多文件选择.能显示进度条.可配置性高,总体来说是比较好用的.官网有两个版本供下载,分别是flash版和HTML5版.不过令人惋惜的是,HT ...
- HTML5拓扑图形组件设计之道(一)
HT for Web(http://www.hightopo.com/guide/readme.html)提供了涵盖通用组件.2D拓扑图形组件以及3D引擎的一站式解决方案,正如Hightopo官网所表 ...
随机推荐
- 600万用户数据导入MYSQL、MSSQL、Oracle数据库方法【转】
1.导入MySql数据库 参考文献:http://zhuaxia.org/blog/post/145 1.1.LOAD DATA INFILE语法 因为获得的数据库文件是一个文本文件www.csd ...
- ASP.NET文章目录导航
ASP.NET文章目录导航 ASP.NET-[读书笔记]-原创:ASP.Net状态管理读书笔记--思维导图 (2013-12-25 10:13) ASP.NET-[潜在危险]-从客户端中检测到有潜在危 ...
- Windows server2003 + sql server2005 集群配置安装
http://blog.itpub.net/29500582/viewspace-1249319/
- C# 多线程详解 Part.03 (定时器)
Timer 类: 设置一个定时器,定时执行用户指定的函数.定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. using System; using System.Threadin ...
- IBatis.Net 表连接查询(五)
IBatis.Net之多表查询: 一.定制实际对应类的方式 首先配置多表的测试数据库,IBatis.Net之Oracle表连接查询配置: 首先新建两张表如下: 为两张表建立外键: ALTER TABL ...
- C++-不要在构造和析构函数中调用虚函数
在实习的单位搞CxImage库时不知为什么在Debug时没有问题,但是Release版里竟然跳出个Pure virtual function call error! 啥东西呀,竟然遇上了,就探个究竟吧 ...
- getBoundingClientRect() 来获取页面元素的位置
getBoundingClientRect() 来获取页面元素的位置 document.documentElement.getBoundingClientRect 下面这是MSDN的解释: Syn ...
- python遍历文件夹下的文件
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...
- [转] Android资源管理框架(Asset Manager)简要介绍和学习计划
转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...
- jQuery 1.7_20120209 学习笔记
html([val|fn]) parameters: function(index,html) 此函数返回一个html字符串,接受两个参数,index为元素在集合中的索引位置,html为原先的html ...