根据一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版日历组件的更多相关文章

  1. jmgraph前端画图组件(html5版)

    原文:jmgraph前端画图组件(html5版)      jmgraph是一个基于html5的WEB前端画图组件.        前端画图对象控件化,支持鼠标和健盘事件响应,可对单个控件样式设定,支 ...

  2. HTML5版的String Avoider小游戏

    HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...

  3. 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a

    现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...

  4. input的type属性引申的日历组件

    HTML5规范里只规定date新型input输入类型,并没有规定日历弹出框的实现和样式.所以,各浏览器根据自己的设计实现日历.目前只有谷歌浏览器完全实现日历功能.相信这种局面很快就会结束,所有的浏览器 ...

  5. 基于Vue2-Calendar改进的日历组件(含中文使用说明)

    一,前言 我是刚学Vue的菜鸟,在使用过程中需要用到日历控件,由于项目中原来是用jQuery写的,因此用了bootstarp的日历控件,但是配合Vue实在有点蛋疼,不够优雅…… 于是网上搜了好久找到了 ...

  6. 微信小程序横版日历,tab栏

    代码地址如下:http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  7. 日历组件 原生js

    自己基于原生js编写的日历组件 git地址: https://github.com/lihefen/calendar.git demo : https://lihefen.github.io/cale ...

  8. 免费的HTML5版uploadify送上

    相信有不少同学用过uploadify这一款文件上传插件,它支持多文件选择.能显示进度条.可配置性高,总体来说是比较好用的.官网有两个版本供下载,分别是flash版和HTML5版.不过令人惋惜的是,HT ...

  9. HTML5拓扑图形组件设计之道(一)

    HT for Web(http://www.hightopo.com/guide/readme.html)提供了涵盖通用组件.2D拓扑图形组件以及3D引擎的一站式解决方案,正如Hightopo官网所表 ...

随机推荐

  1. BZOJ1570 [JSOI2008]Blue Mary的旅行

    建分层图,每一层表示一天的情况 从S向第0层的1号点连边,每层的n向T连INF的边 枚举天数,每多一天就多建一层然后跑最大流,如果当前流量大于人数则输出答案 由于路径长度不会超过n,因此tot个人走这 ...

  2. ViewPager滑动页面的实现方法

    package com.lixu.pagerview; import java.util.ArrayList; import android.app.Activity; import android. ...

  3. CENTOS 修改MYSQL文件到内存盘

    # 必须说明的是: # 0 内存盘的特性是断电就丢数据. # 1 对数据时效性要求高的自己做主从 # 2 重启or关机必须导出数据和开机加载数据. # 3 最好弄个脚本 开关机自己调用. # 4 简单 ...

  4. HDU 4906 Our happy ending(2014 Multi-University Training Contest 4)

    题意:构造出n个数 这n个数取值范围0-L,这n个数中存在取一些数之和等于k,则这样称为一种方法.给定n,k,L,求方案数. 思路:装压 每位 第1为表示这种方案能不能构成1(1表示能0表示不能)   ...

  5. java中的native方法和修饰符(转)

    Java中的native修饰符 今天偶然看代码,发现别人有这样写的方法,并且jar里面有几个dll文件,比较奇怪,于是把代码打开,发现如下写法. public native String GSMMod ...

  6. redis OK

    http://redis.readthedocs.org/en/2.4/set.html1, client.end();redis.expire(key,10) ,lsize,llen APPEND ...

  7. CSS-长图水平居中

    场景:客户方给我了一张1920px的长图给我,然后告诉我在屏幕不到1920px时候,屏幕显示图片的中心位置,左右边缘可以不要. 当屏幕小于1000px的时候,图片显示中心部分1000px的图片,且可以 ...

  8. Jquery实现的Tabs标签页

    效果图: HTML: <div class="tabs"> <ul id="tabs"> <li class="tab- ...

  9. poj2769 暴力

    //Accepted 208 KB 157 ms //纯暴力 //vis数组初始化时要用多少设置多少,不然TLE #include <cstdio> #include <cstrin ...

  10. Python学习路程day3

    set集合 ​set是一个无序且不重复的元素集合,访问速度快,天生解决重复问题 s1 = set() s1.add('luo')​ s2 = set (['luo','wu','wei','ling' ...