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官网所表 ...
随机推荐
- PMP 项目管理
1.什么是项目管理 项目管理就是把各种知识,技能,工具,技术应用于项目活动,来满足项目的需求.这个是从技术方面来说的.其实在项目管理的技术 层面背后,还有理念层面的内容.学习项目管理,除了学习技术 ...
- Redis系列-存储篇sorted set主要操作函数小结
redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sorted set的常用函数: 1)insert a) zadd ...
- WCF中常见的几种Host,承载WCF服务的方法
1:写在前面 我们都知道WCF在运行的时候必须自己提供宿主来承载服务.WCF 本身没有附带宿主,而是提供了一个 ServiceHost 的类,该类允许您在自己的应用程序中host WCF 服务.然后调 ...
- 在JavaScript 自定义对象来模拟Java中的Map
直接看代码: //模拟一个Map对象 function Map(){ //声明一个容器 var container={}; //定义一个put方法,向容器中存值 this.put=function(k ...
- Zone.js
https://github.com/angular/zone.js/ Zone.js
- 第46套题【STL】【贪心】【递推】【BFS 图】
已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...
- (转载)重新对APK文件签名
1.将证书(debug.keystore)复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign) 2.在cmd中切换到需要重新签名的apk文件的目录下 3.使用WinRAR打开要重新 ...
- xlistview的XML(脚)xlistview_footer
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- JS 获取当前浏览器类型
JS代码: function getType() { if(navigator.userAgent.indexOf("MSIE")>0) { return "MSI ...
- JVM-class文件完全解析-常量池
在.java文件,讲过javac编译后产生的 .class文件中,头4个字节表示的是魔数,接着魔数后面的第5,6个字节存储的是次版本号,第7,8个字节存储的主板本号.那么再接下来的就是表示常量池入口了 ...