android md日期选择器,移动端日期选择
image.png
自己修改源的源码更加方便好用!粘贴即用,不明白的可以问我wx: xin32934
Mdate.js
是一款依托于iScroll.js的日期选择小型插件,可滑动选择年、月、日,只适用于移动端。
操作简易,只需要在页面中引入iScroll.js和Mdate.js即可。
使用说明
new Mdate("dateShowBtn", {
//"dateShowBtn"为你点击触发Mdate的id,必填项
acceptId: "dateSelectorTwo",
//此项为你要显示选择后的日期的input,不填写默认为上一行的"dateShowBtn"
beginYear:'',
//此项为Mdate的初始年份,不填写默认为当前及以前的日期
beginMonth: '',
//此项为Mdate的初始月份,不填写默认为当前及以前的日期
beginDay: "",
//此项为Mdate的初始日期,不填写默认为当前及以前的日期
endYear: "",
//此项为Mdate的结束年份,不填写默认为当年
endMonth: "",
//此项为Mdate的结束月份,不填写默认为当月
endDay: "",
//此项为Mdate的结束日期,不填写默认为当天
format: "yyyy-mm",
//此项为Mdate需要显示的格式,可填写"/"或"-"或".",不填写默认为年月日
success:function(e){//点击确定按钮回调
alert(e)//弹出选择的时间
}
})
Mdate.js修改之的源后代码
(function() {
var d = document;
var dateopts = {
beginYear: 2000,
beginMonth: 1,
beginDay: 1,
endYear: new Date().getFullYear(),
endMonth: new Date().getMonth() + 1,
endDay: new Date().getDate(),
format: "YMD"
};
var MdSelectId = "";
var MdAcceptId = "";
var dateContentBox = "";
var datePlugs = "";
var yearTag = "";
var monthTag = "";
var dayTag = "";
var indexY = 1;
var indexM = 1;
var indexD = 1;
var initM = null;
var initD = null;
var yearScroll = null;
var monthScroll = null;
var dayScroll = null;
var Mdate = function(el, opts) {
if(!opts) {
opts = {}
}
this.id = el;
this.selectorId = d.getElementById(this.id);
this.acceptId = d.getElementById(opts.acceptId) || d.getElementById(this.id);
this.beginYear = opts.beginYear || dateopts.beginYear;
this.beginMonth = opts.beginMonth || dateopts.beginMonth;
this.beginDay = opts.beginDay || dateopts.beginDay;
this.endYear = opts.endYear || dateopts.endYear;
this.endMonth = opts.endMonth || dateopts.endMonth;
this.endDay = opts.endDay || dateopts.endDay;
this.format = opts.format || dateopts.format;
this.success= opts.success;
this.dateBoxShow()
};
Mdate.prototype = {
constructor: Mdate,
dateBoxShow: function() {
var that = this;
that.selectorId.onclick = function() {
that.createDateBox();
that.dateSure()
}
},
createDateBox: function() {
var that = this;
MdatePlugin = d.getElementById("MdatePlugin");
if(!MdatePlugin) {
dateContentBox = d.createElement("div");
dateContentBox.id = "MdatePlugin";
d.body.appendChild(dateContentBox);
MdatePlugin = d.getElementById("MdatePlugin")
}
MdatePlugin.setAttribute("class", "slideIn");
that.createDateUi();
var yearUl = d.getElementById("yearUl");
var monthUl = d.getElementById("monthUl");
var dayUl = d.getElementById("dayUl");
yearUl.innerHTML = that.createDateYMD("year");
that.initScroll();
that.refreshScroll()
},
createDateUi: function() {
var that=this;
if(that.format=='yyyy-mm'){
var str = "" + '' + '' + '
" + '
" + '
" + '
" + "
" + "";
}else{
var str = "" + '' + '' + '
" + '
" + '
" + '
" + "
" + "";
}
MdatePlugin.innerHTML = str
},
createDateYMD: function(type) {
var that = this;
var str = "
";
var beginNum = null,
endNum = null,
unitName = "年",
dataStyle = "data-year";
if(type == "year") {
beginNum = that.beginYear;
endNum = that.endYear
}
if(type == "month") {
unitName = "月";
dataStyle = "data-month";
beginNum = that.beginMonth;
endNum = 12;
if(yearTag != that.beginYear) {
beginNum = 1
}
if(yearTag == dateopts.endYear) {
endNum = that.endMonth
}
}
if(type == "day") {
unitName = "日";
dataStyle = "data-day";
beginNum = 1;
endNum = new Date(yearTag, monthTag, 0).getDate();
if(yearTag == that.beginYear && monthTag == that.beginMonth) {
beginNum = that.beginDay
}
if(yearTag == that.endYear && monthTag == that.endMonth) {
endNum = that.endDay
}
}
for(var i = beginNum; i <= endNum; i++) {
str += "
" + that.dateForTen(i) + unitName + ""
}
return str + "
"
},
initScroll: function() {
var that = this;
yearScroll = new iScroll("yearwrapper", {
snap: "li",
vScrollbar: false,
onScrollEnd: function() {
indexY = Math.ceil(this.y / 40 * -1 + 1);
yearTag = yearUl.getElementsByTagName("li")[indexY].getAttribute("data-year");
monthUl.innerHTML = that.createDateYMD("month");
monthScroll.refresh();
try {
monthTag = monthUl.getElementsByTagName("li")[indexM].getAttribute("data-month")
} catch(err) {
return true
}
dayUl.innerHTML = that.createDateYMD("day");
dayScroll.refresh();
try {
dayTag = dayUl.getElementsByTagName("li")[indexD].getAttribute("data-day")
} catch(err) {
return true
}
}
});
monthScroll = new iScroll("monthwrapper", {
snap: "li",
vScrollbar: false,
onScrollEnd: function() {
indexM = Math.ceil(this.y / 40 * -1 + 1);
if(indexM == 1 && yearTag != that.beginYear) {
monthTag = 1
} else {
monthTag = monthUl.getElementsByTagName("li")[indexM].getAttribute("data-month")
}
dayUl.innerHTML = that.createDateYMD("day");
dayScroll.refresh();
try {
dayTag = dayUl.getElementsByTagName("li")[indexD].getAttribute("data-day")
} catch(err) {
return true
}
}
});
dayScroll = new iScroll("daywrapper", {
snap: "li",
vScrollbar: false,
onScrollEnd: function() {
indexD = Math.ceil(this.y / 40 * -1 + 1);
if(indexD == 1 && monthTag != that.beginMonth) {
dayTag = 1
} else {
dayTag = dayUl.getElementsByTagName("li")[indexD].getAttribute("data-day")
}
}
})
},
refreshScroll: function() {
var that = this;
var inputYear = that.acceptId.getAttribute("data-year");
var inputMonth = that.acceptId.getAttribute("data-month");
var inputDay = that.acceptId.getAttribute("data-day");
inputYear =inputYear ||new Date().getFullYear();
inputMonth = inputMonth ||new Date().getMonth()+1;
inputDay = inputDay || new Date().getDate();
initM = that.beginMonth;
initD = that.beginDay;
if(inputYear != that.beginYear && initM != 1) {
initM = 1
}
if(inputMonth != that.beginMonth && initD != 1) {
initD = 1
}
inputYear -= that.beginYear;
inputMonth -= initM;
inputDay -= initD;
yearScroll.refresh();
yearScroll.scrollTo(0, inputYear * 40, 300, true);
monthScroll.scrollTo(0, inputMonth * 40, 300, true);
dayScroll.scrollTo(0, inputDay * 40, 300, true)
},
dateSure: function() {
var that = this;
var sureBtn = d.getElementById("dateSure");
var cancelBtn = d.getElementById("dateCancel");
sureBtn.onclick = function() {
if(that.format == "YMD") {
that.acceptId.value = yearTag + "年" + monthTag + "月" + dayTag + "日"
}else if(that.format=='yyyy-mm'){
that.acceptId.value = yearTag + '-' + that.dateForTen(monthTag)
}else {
that.acceptId.value = yearTag + that.format + that.dateForTen(monthTag) + that.format + that.dateForTen(dayTag)
}
that.acceptId.setAttribute("data-year", yearTag);
that.acceptId.setAttribute("data-month", monthTag);
that.acceptId.setAttribute("data-day", dayTag);
that.dateCancel()
that.success(that.acceptId.value)
};
cancelBtn.onclick = function() {
that.dateCancel()
}
},
dateForTen: function(n) {
if(n < 10) {
return "0" + n
} else {
return n
}
},
dateCancel: function() {
MdatePlugin.setAttribute("class", "slideOut");
setTimeout(function() {
MdatePlugin.innerHTML = ""
}, 400)
},
};
if(typeof exports !== "undefined") {
exports.Mdate = Mdate
} else {
window.Mdate = Mdate
}
})();
Mdate.css文件
html, body{padding: 0; margin: 0; border: 0; vertical-align:
baseline; font-size: 15px; color: #333; }
*,
*:before,
*:after{
padding: 0;
margin: 0;
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-family: "Microsoft Yahei", "Helvetica Neue", Arial, Helvetica,
sans-serif;
word-break: break-all;
}
*:focus { outline: none; }
.fl{float: left;}
.fr{float: right;}
/*选择日期*/
.getDateBg{
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.7);
position: fixed;
left: 0;
top: 0;
z-index: 100;
transition: opacity 0.4s;
opacity: 0;
}
.getDateBox{
width: 100%;
position: fixed;
left: 0;
background-color: #fff;
box-shadow: -5px 0 5px rgba(0,0,0,0.3);
z-index: 101;
transition: bottom 0.4s;
bottom: -270px;
}
.slideIn{
display: block !important;
}
.slideIn .getDateBox{
animation: slideIn 0.4s;
-webkit-animation: slideIn 0.4s;
bottom: 0;
}
.slideOut .getDateBox{
animation: slideOut 0.4s;
-webkit-animation: slideOut 0.4s;
bottom: -400px;
}
.slideIn .getDateBg{
opacity: 1;
}
.slideOut .getDateBg{
opacity: 0;
}
.getDateBox .choiceDateTitle{
height: 2.933rem;
background-color: #f2f2f2;
}
.getDateBox .choiceDateTitle button{
height: 100%;
padding: 0 1.333rem;
color: #00c599;
font-size: 1.0rem;
background: none;
border: 0;
-webkit-tap-highlight-color: rgba(0,0,0,0.2)
}
.getDateBox .dateContent{
width: 100%;
margin: 3.0rem 0;
height: 120px;
overflow: hidden;
position: relative;
}
.getDateBox .dateContent:before{
content: "";
width: 100%;
height: 40px;
background: -webkit-linear-gradient(top, rgba(255,255,255,1), rgba(255,255,255,0));
position: absolute;
left: 0;
top: 0;
z-index: 10;
pointer-events: none;
}
.getDateBox .dateContent:after{
content: "";
width: 100%;
height: 40px;
background: -webkit-linear-gradient(bottom, rgba(255,255,255,1), rgba(255,255,255,0));
position: absolute;
left: 0;
bottom: 0;
z-index: 10;
pointer-events: none;
}
.getDateBox .dateContent .checkeDate{
width: 100%;
height: 40px;
position: absolute;
left: 0;
top: 40px;
}
.getDateBox .dateContent .checkeDate:before,
.getDateBox .dateContent .checkeDate:after{
content: "";
width: 100%;
height: 1px;
background-color: #ccc;
position: absolute;
left: 0;
top: 0;
transform: scaleY(0.5);
-webkit-transform: scaleY(0.5);
}
.getDateBox .dateContent .checkeDate:after{
top: auto;
bottom: 0;
}
#yearwrapper,
#monthwrapper,
#daywrapper{
width: 33.3%;
height: 100%;
position: absolute;
top: 0;
}
#yearwrapper{
left: 0;
}
#daywrapper{
right: 0;
}
#monthwrapper{
left: 33.3%;
}
#yearwrapper ul{
margin-left: 40%;
}
#daywrapper ul{
margin-right: 40%;
}
#yearwrapper ul li,
#monthwrapper ul li,
#daywrapper ul li{
height: 40px;
line-height: 40px;
font-size: 0.933rem;
text-align: center;
list-style: none;
}
@keyframes slideIn{
0%{bottom: -270px;}
100%{bottom: 0;}
}
@-webkit-keyframes slideIn{
0%{bottom: -270px;}
100%{bottom: 0;}
}
@keyframes slideOut{
0%{bottom: 0;}
100%{bottom: -270px;}
}
@-webkit-keyframes slideOut{
0%{bottom: 0;}
100%{bottom: -270px;}
}
android md日期选择器,移动端日期选择相关推荐
- Angular中修改第三方组件的样式 - zorro日期选择器右端不对齐的BUG
在一列上同时使用zorro的日期选择器和input组件会出现右端不对齐的BUG(nzSpan设置为一样) 上图中3个表单项:单据日期.开票.交货方式,nzSpan数值是一样的,可以看到日期选择器和下面 ...
- html表单日期选择器ppt,DatePicker 日期选择框
## DatePicker 日期选择器 ### 该文档不再维护,新版文档地址: [form-create 文档](http://fc.gd8.top) #### [在线预览](https://jsru ...
- element 日期选择器el-date-picker 月份/日期范围控制
element 日期选择器el-date-picker 月份范围控制 <template> <el-date-pickertype="month"v-model= ...
- Layui日期选择器+两个日期之间天数计算
Layui日期选择器+天数计算 下面这个图片就是我们Layui双控组件的日期范围选择器,可以选择起始时间和终止时间,那么针对于这个组件我们该怎么获取它的具体天数呢? 首先:我的需求是是要年-月-日的格 ...
- 多选月份的日期选择器_GitHub - ylmyg/SelectionTime: Android下日期选择器,支持范围选择、多选、单选、根据输入天数选择日期...
SelectionTime(1.0.1) SelectionTime是用于Android设备上选择日期开源库,高度订制,打造适合自己的日期控件 效果图(多选.范围选.单选) 安装说明 Gradle: ...
- element-ui日期选择器datepicker限制最大选择日期范围
如图,需求为最多选择范围为七天 <el-date-pickerv-model="pickerDate"type="daterange":picker-op ...
- iview日期选择器更改显示日期书_如何动态 设置 iview DatePicker 控件的 禁用日期(option)...
在公司开发的过程中遇到的问题,我们采用了iview的Vue框架. 现有一个需求:用户在初始时页面后,DatePicker 的可选时间范围不作限制,用户可选择任意一天.当用户选择了某一天(planTim ...
- Android中DatePicker日期选择器的使用和获取选择的年月日
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...
- antd 日期时间选择_【UI设计】日期选择器的常见样式总结
来源:海盐社(haiyans7) 作者:青山 在使用各种 APP 的过程中,我们经常会遇到选择日期的场景,比如记账的时候.安排行程的时候.购买车票以及预订酒店的时候.有时我们需要选择一个日期,有时则需 ...
最新文章
- 如何修改world 2007文档结构图的字体 ???
- python hist 参数_关于python中plthist参数的使用详解
- 完善vim bccalc_linux插件
- curl -O 下载文件
- 你模型的变量符合业务逻辑了吗
- python numpy array转置_python-Numpy Performance-向量及其转置的外积
- 《变革中的思索》连载九:放飞的爱;母亲和我
- 【一步一步】Spring 源码环境搭建
- android 扩展textview,Android可收缩/扩展的TextView【1】
- Mac M1 + Vmware Fusion 安装 Windows 11 arm版及相关问题解决
- 论文被多人研究过了,我还可以怎么写?
- 安卓 基于百度LBS的定位
- 书摘---创业36条军规3:创业人七大须知
- java调用本地打印机,绘制打印模板,小票模板
- 管理的两大核心,工作目标、人的价值
- Android广告图片轮播控件
- python基础logging 压缩、根据指定文件夹并进行删除
- vectorvn1610报价_【德国VECTOR VN1610模块】价格_厂家 - 中国供应商
- HTML图片的路径问题
- JAVA 中IO总结 之前篇阻塞、非阻塞