林俊杰--對的時間點 (多格式、功能強大的移動端日期時間選擇插件)

      很多時候都是需要在手機瀏覽器端使用時間選擇,但是html5自帶的時間選擇樣式不好看,而且不同的瀏覽器兼容性也不好,這個時候就需要一款很好的時間選擇插件啦。最近在網上也找了很多相應的插件。

     今天給大家介紹的是隻需要一個js文件和一個代碼配置就完全可以解決所有的時間選擇問題。

1:完整的配置說明

//完整參數、方法示例
var rd = new Rolldate({
    el: '#date',
    format: 'YYYY-MM-DD',
    beginYear: 2000,
    endYear: 2100,
    minStep:1,
    lang:{title:'自定義標題'},
    trigger:'tap',
    init: function() {
      console.log('插件開始觸發');
    },
    moveEnd: function(scroll) {
      console.log('滾動結束');
    },
    confirm: function(date) {
      console.log('確定按鈕觸發');
    },
    cancel: function() {
      console.log('插件運行取消');
    }
})
rd.show();
rd.hide();

2:參數、方法說明

名稱 必填 默認值 說明
el 綁定插件的dom元素,插件內部使用document.querySelector,
也可以直接傳遞dom元素對象,只支持單個
format 'YYYY-MM-DD' 日期格式,無限制。規則:年-YYYY 月-MM 日-DD 時-hh 分-mm 秒-ss 使用/、-、空格、:之一分隔,可隨意組合
beginYear 2000 日期開始年份
endYear 2100 日期結束年份
value 日期初始化的默認值,列如'2018-03-18'
lang 年、月、日... 配置插件語言,默認:title:'選擇日期',cancel:'取消',confirm:'確認',
year:'年',month:'月',day:'日',hour:'時',min:'分',sec:'秒'
minStep 1 分鐘按指定數分隔
init null 插件觸發前的回調函數,return false可阻止插件執行
moveEnd null 插件滾動後的回調函數,函數返回一個參數(better-scroll實例)
confirm null 確認按鈕觸發前的回調函數,return false可阻止插件執行,
return其他值可修改日期,函數返回一個參數(選中的日期)
cancel null 插件取消時觸發的回調函數
trigger 'tap' 默認使用tap解決移動端click事件300ms延遲,可選click替換tap。注意使用tap會阻止其他綁定的click事件的觸發
show 主動觸發插件,當trigger爲tap時,主動觸發插件應該使用此方法
hide 主動隱藏插件

 3:實際的demo

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
	<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
	<title>時間插件</title>
	<script type="text/javascript" src="js/rolldate.js"></script> <!-- 實際開發只需要引用這個js文件即可 -->
	<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
	<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><!-- 這個是使用了bootstrap樣式 實際開發中不需要 -->
	
</head>
<body>
		<h3>下面是實際的配置</h3>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-1" placeholder="YYYY-MM">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-2" placeholder="YYYY-MM-DD">
				</div>
			</div>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-3" placeholder="YYYY-MM-DD hh">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-4" placeholder="YYYY-MM-DD hh:mm">
				</div>
			</div>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-5" placeholder="YYYY-MM-DD hh:mm:ss">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-6" placeholder="hh:mm">
				</div>
			</div>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-7" placeholder="hh:mm:ss">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-8" placeholder="YYYY">
				</div>
			</div>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-9" placeholder="MM">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-10" placeholder="DD">
				</div>
			</div>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-11" placeholder="hh">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-12" placeholder="mm">
				</div>
			</div>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-13" placeholder="ss">
				</div>
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group1-14" placeholder="YYYY/DD">
				</div>
			</div>
		</div>
		<div id="test">測試其他元素上點擊是否可以觸發</div>
		<h4><strong>回調函數:</strong></h4>
		<p>init、moveEnd、confirm、cancel</p>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group2-1" placeholder="完整實例">
				</div>
			</div>
			<h5 class="col-xs-12">init return false可阻止插件運行</h5>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group2-2" placeholder="init">
				</div>
			</div>
			<h5 class="col-xs-12">confirm return false阻止插件運行,return其他值可以修改日期展示</h5>
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group2-3" placeholder="confirm修改日期">
				</div>
			</div>
		</div>

		<h4><strong>自定義語言</strong></h4>
		<p>lang</p>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group3-1" placeholder="lang">
				</div>
			</div>
		</div>

		<h4><strong>設置默認日期</strong></h4>
		<p>value</p>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group4-1" placeholder="設置默認日期">
				</div>
			</div>
		</div>

		<h4><strong>el傳dom對象</strong></h4>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group5-1" placeholder="el傳dom對象">
				</div>
			</div>
		</div>

		<h4><strong>分鐘間隔</strong></h4>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group6-1" placeholder="分鐘間隔5">
				</div>
			</div>
		</div>
		<h4><strong>使用原生click</strong></h4>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group7-1" placeholder="trigger:'click'">
				</div>
			</div>
		</div>
		<h4><strong>其他示例</strong></h4>
		<div class="row">
			<div class="form-group clearfix">
				<div class="col-xs-6">
					<input readonly class="form-control" type="text" id="date-group8-1" placeholder="不能小於當前的日期">
				</div>
			</div>
		</div>
	
	<script>
		window.onload = function() {

			// 格式
			new Rolldate({
				el: '#date-group1-1',
				format: 'YYYY-MM',
				beginYear: 2000,
				endYear: 2100
			})
			new Rolldate({
				el: '#test',
				format: 'YYYY-MM',
				beginYear: 2000,
				endYear: 2100,
				confirm: function(date) {
					console.log(date);
					console.log('確定按鈕觸發');
                    //return "選擇的時間爲:"+date;  可以設置自定義顯示的數據
				}
			})
			new Rolldate({
				el: '#date-group1-2',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100
			})
			new Rolldate({
				el: '#date-group1-3',
				format: 'YYYY-MM-DD hh'
			})
			new Rolldate({
				el: '#date-group1-4',
				format: 'YYYY-MM-DD hh:mm',
				beginYear: 2000,
				endYear: 2100
			})
			new Rolldate({
				el: '#date-group1-5',
				format: 'YYYY-MM-DD hh:mm:ss',
				beginYear: 2000,
				endYear: 2100
			})
			new Rolldate({
				el: '#date-group1-6',
				format: 'hh:mm'
			})
			new Rolldate({
				el: '#date-group1-7',
				format: 'hh:mm:ss'
			})
			new Rolldate({
				el: '#date-group1-8',
				format: 'YYYY',
				beginYear: 2000,
				endYear: 2100
			})
			new Rolldate({
				el: '#date-group1-9',
				format: 'MM'
			})
			new Rolldate({
				el: '#date-group1-10',
				format: 'DD'
			})
			new Rolldate({
				el: '#date-group1-11',
				format: 'hh'
			})
			new Rolldate({
				el: '#date-group1-12',
				format: 'mm'
			})
			new Rolldate({
				el: '#date-group1-13',
				format: 'ss'
			})
			new Rolldate({
				el: '#date-group1-14',
				format: 'YYYY/DD'
			})
			/* 回調函數
			 * tips:	在vue及其他mvvm框架中使用時,在confirm中修改v-model綁定的數據即可
			 */
			new Rolldate({
				el: '#date-group2-1',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100,
				init: function() {
					console.log('插件開始觸發');
				},
				moveEnd: function(scroll) {
					console.log(scroll)
					console.log('滾動結束');
				},
				confirm: function(date) {
					console.log(date)
					console.log('確定按鈕觸發');
				},
				cancel: function() {
					console.log('插件運行取消');
				}
			})
			new Rolldate({
				el: '#date-group2-2',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100,
				init: function() {
					if (1 == 1) {
						console.log('阻止插件繼續執行');
						return false;
					}
				}
			})
			new Rolldate({
				el: '#date-group2-3',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100,
				confirm: function(date) {
					return date.replace(/-/g, '/');
				}
			})
			// 自定義
			var lang = {
				title: '自定義標題',
				cancel: '取消',
				confirm: '確認',
				year: '年',
				month: '月',
				day: '日',
				hour: '時',
				min: '分',
				sec: '秒'
			};
			// 如果某個值未修改可不傳 以上同 var lang = {title:'自定義標題'} 允許傳空串
			new Rolldate({
				el: '#date-group3-1',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100,
				lang: lang
			})

			// 設置默認日期 內部使用document.getElementById('date').bindDate = new Date('2019/05/13');
			new Rolldate({
				el: '#date-group4-1',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100,
				value: '2017-10-21' //或2017-10-21 23:52:50
			})

			// el傳dom對象,只支持單個
			new Rolldate({
				el: document.getElementById('date-group5-1'),
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100
			})

			// 分鐘按指定數分隔
			new Rolldate({
				el: '#date-group6-1',
				format: 'hh:mm',
				minStep: 5
			})
			// 使用原生click
			new Rolldate({
				el: '#date-group7-1',
				trigger: 'click'
			})

			// 其他示例
			//日期判斷
			new Rolldate({
				el: '#date-group8-1',
				format: 'YYYY-MM-DD',
				beginYear: 2000,
				endYear: 2100,
				confirm: function(date) {
					var d = new Date(),
						d1 = new Date(date.replace(/\-/g, "\/")),
						d2 = new Date(d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()); //如果非'YYYY-MM-DD'格式,需要另做調整

					if (d1 < d2) {
						alert('不能小於當前的日期');
						return false;
					}
				}
			})
		}
	</script>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章