




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】HTML5自定义日历控件
ys_datetime_selector.css.ys-datetime-selector{
position:fixed;
left:0;
right:0;
top:0;
bottom:0;
background-color:rgba(0,0,0,0.3);
z-index:
999;
}
.ys-datetime-selector.display-hide{
transform:
translate3d(100%,0,0);
-webkit-transform:
translate3d(100%,0,0);
visibility:
hidden;
}
.ys-datetime-selector
.ys-datetime-selector-content{
position:absolute;
left:0;
right:0;
bottom:0;
background-color:#fff;
}
/*
========================================
ys-datetime-operation-bar
========================================
*/
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-operation-bar{
height:45px;
line-height:
44px;
border-bottom:1px
solid
#e0e0e0;
text-align:
center;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-operation-bar
span{
color:#333;
font-size:16px;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-operation-bar
a{
position:absolute;
top:0;
bottom:0;
padding:0
15px;
font-size:16px;
color:#4e9dcf;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-operation-bar
a.ys-datetime-cancel-btn{left:0;}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-operation-bar
a.ys-datetime-ok-btn{right:0;}
/*
========================================
ys-datetime-blocks
========================================
*/
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks{
position:relative;
height:170px;
-webkit-mask-box-p_w_picpath:
-webkit-linear-gradient(top,
rgba(0,0,0,0.2),
rgba(0,0,0,0.4)
20%,rgba(0,0,0,0.6)
39%,white
40%,
white
60%,rgba(0,0,0,0.6)
41%,
rgba(0,0,0,0.4)
80%,rgba(0,0,0,0.2));
-webkit-mask-box-p_w_picpath:
linear-gradient(to
top,
rgba(0,0,0,0.2),
rgba(0,0,0,0.2),
rgba(0,0,0,0.4)
20%,rgba(0,0,0,0.6)
39%,white
40%,
white
60%,rgba(0,0,0,0.6)
41%,
rgba(0,0,0,0.4)
80%,rgba(0,0,0,0.2));
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks:before{
content:"";
position:absolute;
left:0;
right:0;
height:1px;
background-color:#cdcdcd;
top:68px;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks:after{
content:"";
position:absolute;
left:0;
right:0;
height:1px;
background-color:#cdcdcd;
bottom:68px;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks>div{
width:33.333%;
float:left;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks>div.block-hide{
display:none;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks>div.width-50{
width:50%;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks>div.width-100{
width:100%;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks
.swiper-container{
height:170px;
}
.ys-datetime-selector
.ys-datetime-selector-content
.ys-datetime-blocks
.swiper-container
.swiper-slide{
height:34px;
line-height:
34px;
text-align:
center;
}
/*
==================================================
page
animation
start
==================================================
*/
.ys-datetime-selector
.datetime-selector-animated{
animation-duration:
0.3s;
-webkit-animation-duration:
0.3s;
-webkit-animation-fill-mode:
both;
animation-fill-mode:
both;
}
/*
datetime-selector-slide-down-in
*/
.ys-datetime-selector
.datetime-selector-slide-down-in{
animation-name:datetime-selector-slide-down-in;
-webkit-animation-name:datetime-selector-slide-down-in;
}
@keyframes
datetime-selector-slide-down-in
{
from{
-webkit-transform:
translate3d(0,
100%,
0);
transform:
translate3d(0,
100%,
0);
}
to{
-webkit-transform:
translate3d(0,
0,
0);
transform:
translate3d(0,
0,
0);
}
}
@-webkit-keyframes
datetime-selector-slide-down-in
{
from{
-webkit-transform:
translate3d(0,
100%,
0);
transform:
translate3d(0,
100%,
0);
}
to{
-webkit-transform:
translate3d(0,
0,
0);
transform:
translate3d(0,
0,
0);
}
}
/*
datetime-selector-slide-down-out
*/
.datetime-selector-slide-down-out{
animation-name:datetime-selector-slide-down-out;
-webkit-animation-name:datetime-selector-slide-down-out;
}
@keyframes
datetime-selector-slide-down-out
{
from{
-webkit-transform:
translate3d(0,
0,
0);
transform:
translate3d(0,
0,
0);
}
to{
-webkit-transform:
translate3d(0,
100%,
0);
transform:
translate3d(0,
100%,
0);
}
}
@-webkit-keyframes
datetime-selector-slide-down-out
{
from{
-webkit-transform:
translate3d(0,
0,
0);
transform:
translate3d(0,
0,
0);
}
to{
-webkit-transform:
translate3d(0,
100%,
0);
transform:
translate3d(0,
100%,
0);
}
}ys_datetime_selector.js(function($){
var
container
=
$(".ys-datetime-selector");
var
currentYear
=
new
Date().getFullYear();
var
currentMonth
=
new
Date().getMonth()+1;
var
currentDate
=
new
Date().getDate();
var
currentDayCount
=
getMaxDateInMonth(currentYear,currentMonth);
var
yearSwiper
=null;
var
monthSwiper
=null;
var
dateSwiper
=null;
var
callback
=
function(year,month,date){};
var
html
=
"<div
class='ys-datetime-selector
display-hide'>
"+
"
<div
class='ys-datetime-selector-content'>
"+
"
<div
class='ys-datetime-operation-bar'>
"+
"
<a
class='ys-datetime-cancel-btn'>取消</a>"+
"
<span>选择日期</span>
"+
"
<a
class='ys-datetime-ok-btn'>确定</a>
"+
"
</div>
"+
"
<div
class='ys-datetime-blocks'>
"+
"
<div
class='ys-datetime-year-block'>
"+
"
<div
class='swiper-container'>
"+
"
<div
class='swiper-wrapper'></div>"+
"
</div>
"+
"
</div>
"+
"
<div
class='ys-datetime-month-block'>
"+
"
<div
class='swiper-container'>
"+
"
<div
class='swiper-wrapper'></div>"+
"
</div>
"+
"
</div>
"+
"
<div
class='ys-datetime-date-block'>
"+
"
<div
class='swiper-container'>
"+
"
<div
class='swiper-wrapper'></div>"+
"
</div>
"+
"
</div>
"+
"
<div
style='clear:both;'></div>
"+
"
</div>
"+
"
</div>
"+
"</div>
";
/*
========================================
initialize
the
page
view
========================================
*/
function
render(){
container
=
$(html).appendTo("body");
yearSwiper
=
new
Swiper(".ys-datetime-year-block
.swiper-container",
{
direction
:
"vertical",
freeMode:true,
freeModeSticky:true,
slidesPerView:
"auto",
onTransitionEnd:function(swiper){
var
activeIndex
=
swiper.activeIndex;
var
slidesLen
=
swiper.slides.length;
if(activeIndex<20){
var
firstYear
=
parseInt($(swiper.slides[0]).attr("data-year"));
var
prevYears
=
[];
for(var
i=firstYear-1;i>=firstYear-100;i--){
prevYears.push("<div
class='swiper-slide'
data-year='"+i+"'>"+i+"年</div>");
}
swiper.prependSlide(prevYears);
}else
if(slidesLen-activeIndex<20){
var
lastYear
=
parseInt($(swiper.slides[slidesLen-1]).attr("data-year"));
var
nextYears
=
[];
for(var
i=lastYear+1;i<=lastYear+100;i++){
nextYears.push("<div
class='swiper-slide'
data-year='"+i+"'>"+i+"年</div>");
}
swiper.appendSlide(nextYears);
}
//
计算这个月有多少天
currentYear
=
parseInt($(swiper.slides[activeIndex+2]).attr("data-year"));
updateDateSwiper();
}
});
var
yearSlides
=
[];
for(var
i=currentYear-2;i<=currentYear+102;i++){
yearSlides.push("<div
class='swiper-slide'
data-year='"+i+"'>"+i+"年</div>");
}
var
prevYears
=
[];
for(var
i=currentYear-3;i>currentYear-100;i--){
prevYears.push("<div
class='swiper-slide'
data-year='"+i+"'>"+i+"年</div>");
}
yearSwiper.appendSlide(yearSlides);
yearSwiper.prependSlide(prevYears);
monthSwiper
=
new
Swiper(".ys-datetime-month-block
.swiper-container",
{
direction
:"vertical",
freeMode:true,
freeModeMomentumRatio:0.2,
loop:true,
loopAdditionalSlides:24,
freeModeSticky:true,
slidesPerView:"auto",
onTransitionEnd:function(swiper){
var
activeIndex
=
swiper.activeIndex;
if(isNaN(activeIndex)){
return;
}
//
计算这个月有多少天
currentMonth
=
parseInt($(swiper.slides[activeIndex+2]).attr("data-month"));
updateDateSwiper();
}
});
var
monthSlides=[];
for(var
i=1;i<=12;i++){
monthSlides.push("<div
class='swiper-slide'
data-month='"+i+"'>"+i+"月</div>");
}
monthSwiper.appendSlide(monthSlides);
monthSwiper.appendSlide(monthSlides);
monthSwiper.appendSlide(monthSlides);
dateSwiper
=
new
Swiper(".ys-datetime-date-block
.swiper-container",
{
direction
:"vertical",
loop
:
true,
freeMode:true,
freeModeMomentumRatio:0.2,
freeModeSticky:true,
slidesPerView:"auto",
onTransitionEnd:function(swiper){
var
activeIndex
=
swiper.activeIndex;
if(isNaN(activeIndex)){
return;
}
//
计算这个月有多少天
currentDate
=
parseInt($(swiper.slides[activeIndex+2]).attr("data-date"));
}
});
var
dateSlides=[];
for(var
i=1;i<=currentDayCount;i++){
dateSlides.push("<div
class='swiper-slide'
data-date='"+i+"'>"+i+"日</div>");
}
dateSwiper.appendSlide(dateSlides);
}
/*
========================================
bind
events
========================================
*/
function
bindEvents(){
container.on("click",function(e){
e.stopPropagation();
e.preventDefault();
container.find(".ys-datetime-selector-content").addClass("datetime-selector-slide-down-out");
});
container.on("click",".ys-datetime-selector-content",function(e){
e.stopPropagation();
e.preventDefault();
});
container.on("click",function(e){e.preventDefault();e.stopPropagation();});
container.on("click",".ys-datetime-cancel-btn",function(e){
e.stopPropagation();
e.preventDefault();
container.find(".ys-datetime-selector-content").addClass("datetime-selector-slide-down-out");
});
container.on("click",".ys-datetime-ok-btn",function(e){
e.stopPropagation();
e.preventDefault();
callback(currentYear,currentMonth,currentDate);
container.find(".ys-datetime-selector-content").addClass("datetime-selector-slide-down-out");
});
container.find(".ys-datetime-selector-content").on("animationend
webkitAnimationEnd",function(){
if($(this).hasClass("datetime-selector-slide-down-out")){
container.addClass("display-hide");
}
$(this).removeClass("datetime-selector-slide-down-in").removeClass("datetime-selector-slide-down-out");
});
}
var
initialized
=
false;
function
init(){
if(initialized){
return;
}
initialized
=
true;
render();
bindEvents();
}
/*
========================================
common
methods
========================================
*/
function
getMaxDateInMonth(year,month){
var
date
=
new
Date();
date.setFullYear(year);
date.setMonth(month);
date.setDate(0);
return
date.getDate();
}
function
updateDateSwiper(){
var
nextDayCount
=
getMaxDateInMonth(currentYear,currentMonth);
if(currentDayCount>nextDayCount){
for(var
i=currentDayCount-1;i>=nextDayCount;i--){
dateSwiper.removeSlide(i);
}
}else
if(currentDayCount<nextDayCount){
for(var
i=currentDayCount+1;i<=nextDayCount;i++){
dateSwiper.appendSlide("<div
class='swiper-slide'
data-date='"+i+"'>"+i+"日</div>");
}
}
currentDayCount
=
nextDayCount;
currentDate
=
parseInt($(dateSwiper.slides[dateSwiper.activeIndex+2]).attr("data-date"));
}
function
showDateTime(options){
options
=
options||{};
var
year
=
options.year;
var
month
=
options.month;
var
date
=
options.date;
var
type
=
options.type||"year-month-date";
if(type=="year-month-date"){
container.find(".ys-datetime-year-block").removeClass("block-hide").removeClass("width-50").removeClass("width-100");
container.find(".ys-datetime-month-block").removeClass("block-hide").removeClass("width-50").removeClass("width-100");
container.find(".ys-datetime-date-block").removeClass("block-hide").removeClass("width-50").removeClass("width-100");
}else
if(type=="year-month"){
container.find(".ys-datetime-date-block").addClass("block-hide");
container.find(".ys-datetime-year-block").addClass("width-50").removeClass("width-100").removeClass("block-hide");
container.find(".ys-datetime-month-block").addClass("width-50").removeClass("width-100").removeClass("block-hide");
}else
if(type=="year"){
container.find(".ys-datetime-date-block").addClass("block-hide");
container.find(".ys-datetime-month-block").addClass("block-hide");
container.find(".ys-datetime-year-block").addClass("width-100");
}
callback
=
options.callback||callback;
currentYear
=
year||currentYear;
currentMonth
=
month||currentMonth;
currentDate
=
date||currentDate;
currentDayCount
=
getMaxDateInMonth(currentYear,currentMonth);
var
yearSlidesLength
=
yearSwiper.slides.length;
var
minYear
=
parseInt($(yearSwiper.slides[2]).attr("data-year"));
var
maxYear
=
parseInt($(yearSwiper.slides[yearSlidesLength-3]).attr("data-year"));
if(currentYear<minYear){
var
prevYears
=
[];
for(var
i=minYear-3;i>currentYear-20;i--){
prevYears.push("<div
class='swiper-slide'
data-year='"+i+"'>"+i+"年</div>");
}
yearSwiper.prependSlide(prevYears);
yearSwiper.slideTo(17);
}else
if(currentYear>maxYear){
var
nextSlides
=
[];
for(var
i=maxYear+2;i<=currentYear+20;i++){
nextSlides.push("<div
class='swiper-slide'
d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025计算机技术与软件专业初级考试的技术演示试题及答案
- 铁板钉钉的茶艺师考试秘笈试题及答案
- 实战经验分享全媒体运营师试题及答案
- 2024全面掌握全媒体运营师试题及答案
- 专业建议:健康管理师试题及答案
- 2025年度校外住宿生安全培训及责任承担协议
- 二零二五年度建筑合同工程延期调整协议
- 2025年茶艺师应对技巧试题及答案
- 二零二五年度加油站员工劳动合同与员工工作环境改善方案
- 茶艺师的国际视野与本土实践试题及答案
- 阳台装修合同
- 建筑工程安全管理论文15篇建筑工程安全管理论文
- 基于三菱FX系列PLC的五层电梯控制系统
- 函授本科《小学教育》毕业论文范文
- 拉拔试验原始记录
- 陕西国际商贸学院
- 温室韭菜收割机设计学士学位论文
- 梁平法施工图钢筋表示法
- 《导游讲解》课程标准
- 京东ME的账号怎么注册的
- 浙江新闻奖副刊类参评作品推荐表
评论
0/150
提交评论