JQueryで年月日ドラムロール UI α版

Androidで動くものが見つからなかったので、気合いでiPhoneAndroidで動く年月日ドラムロールを作ってみました。
α版です。ところどころアレです。
タッチでしか動きません。ううーん。
課題としては
AndroidCSSが適用されない部分がある(Shadowとか)
・12月までスクロールすると13月が返ってくる(笑)
・タップで選択した位置に移動しない
・指を離した瞬間にスクロールが止まる、加減速がない
・年月日がループしない(12月の下に1月、1月の上に12月みたいな)
あとはー。。。んー、書き方がスマートじゃない(笑)
実用とするには、クリアすべき問題が山積みです。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=2.0,minimum-scale=1.0" />
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="format-detection" content="telephone=on">
<title>drumtest</title>
<meta name="description" content="iphoneとAndroidで動くドラムロールのテスト" />
<meta http-equiv="content-script-type" content="text/javasctipt" />
<meta http-equiv="content-style-type" content="text/css"  />
</head>
<body>

<div>
	<span id="disp_a"></span>年
	<span id="disp_b"></span>月
	<span id="disp_c"></span>日
</div>
<div id="reference_condition_date_window"></div>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js">
</script>

<script type="text/javascript">


var rcd_date = new Date();//基準日時
var rcdysy =  rcd_date.getFullYear();//年の開始
var rcdyey =  rcd_date.getFullYear() + 20;//年をいくつ用意するか
var rcdheight = 30;//1行の高さ
var rcdboxheight = rcdheight * 5;//ロールの行数

function rcd_display(targetobj){//ドラムロール描画先を指定
	$('#reference_condition_date_window').append('<div id="rcd_wrapper"></div>');
	targetobj.append('<div id="rcd_wrapper"></div>');
	$('#rcd_wrapper').append('<div id="rcdy"></div>');
	$('#rcd_wrapper').append('<div id="rcdm"></div>');
	$('#rcd_wrapper').append('<div id="rcdd"></div>');
	$('#rcd_wrapper').append('<div id="rcd_glass"></div>');

	$('#rcd_wrapper').css({
		'position':'relative',
		'display':'inline-block',
		'overflow':'hidden',
		'height':'150px',
		'line-height':'30px',
		'width':'80%',
		'border':'1px solid #cccccc',
		'font-size':'22px',
		'border-radius':'5px',
		'font-weight':'bold',
		'box-shadow':'0 20px 20px -10px rgba(0,0,0,0.7) inset,0 -20px 20px -10px rgba(0,0,0,0.7) inset',
	});

	$('#rcd_glass').css({
		'position':'absolute',
		'top':'60px',
		'left':'0',
		'height':rcdheight+'px',
		'width':'100%',
		'background-color':'rgba(140,140,255,0.3)',
		'border':'1px solid #555555',
	});

	$('#rcdy').css({
		'box-shadow':'1px 0 0 1px rgba(0,0,0,0.9)',
		'border-left':'2px solid #cccccc',
		'border-right':'2px solid #cccccc',
		'width':'40%',
	});

	$('#rcdm').css({
		'margin-left':'1px',
		'box-shadow':'1px 0 0 0 rgba(0,0,0,0.9)',
		'border-left':'2px solid #cccccc',
		'border-right':'2px solid #cccccc',
		'width':'27%',
	});

	$('#rcdd').css({
		'margin-left':'1px',
		'border-left':'2px solid #cccccc',
		'width':'27%',
	});

	$('#rcdy,#rcdm,#rcdd').css({
		'background-color':'transparent',
		'z-index':'1',
		'display':'inline-block',
		'overflow':'hidden',
		'text-align':'right',
		'height':rcdboxheight+'px',
	});

	$('#rcdy,#rcdm,#rcdd').append("<br /><br />");
	for( var i=rcdysy; i<=rcdyey; i++ ){
		$('#rcdy').append(i+"年<br />");
	}
	for( var i=1; i<=12; i++ ){
		$('#rcdm').append(i+"月<br />");
	}
	for( var i=1; i<=31; i++ ){
		$('#rcdd').append(i+"日<br />");
	}
	$('#rcdy,#rcdm,#rcdd').append("<br /><br />");
}


//obj = イベントをつけるオブジェクト,初期値,コールバック
function drmroll_set(obj,ofset_num,callbackfunc){
	if( ofset_num==undefined || ofset_num=="" || ofset_num==null ){
		ofset_num = 0;//ドラムロールの開始数値が1じゃない時用
	}
	obj.bind('touchstart', function() {
		event.preventDefault();
		var sx = event.changedTouches[0].pageX;
		var sy = event.changedTouches[0].pageY;
		var sts = obj.scrollTop();
		obj.bind('touchmove', function() {
			var y = event.changedTouches[0].pageY;
			var dy = y-sy;
			obj.scrollTop(sts-dy);
		});
		obj.bind('touchend', function() {
			var ste = obj.scrollTop();
			var amr = ste%rcdheight;
			var rcdhh = parseInt(rcdheight/2);
			if( amr <= rcdhh ){
				var ido = ste-amr;
			}else{
				var ido = ste+amr;
			}
			obj.scrollTop(ido);
			var rcdsb = rcdheight + parseInt(rcdheight/3);
			var monmon = ido += rcdsb;
			monmon = parseInt(monmon / rcdheight) + ofset_num;
			callbackfunc(monmon);
		});
	});
}

var rcdycal = function(num) {//年用コールバック
	$('#disp_a').html(num);
}
var rcdmcal = function(num) {//月用コールバック
	$('#disp_b').html(num);
}
var rcddcal = function(num) {//日用コールバック
	$('#disp_c').html(num);
}

//ドラムロール呼び出し
rcd_display($('#reference_condition_date_window'));
//ドラムロールにタッチイベントをセット
drmroll_set($('#rcdy'),rcdysy-1,rcdycal);
drmroll_set($('#rcdm'),"",rcdmcal);
drmroll_set($('#rcdd'),"",rcddcal);

</script>
</body>
</html>

しかし結局、半端なUIを自作するならよくできたカレンダーのがよくない?
ってことで、仕事の上ではボツとしました。
実装は趣味のサイトでやろう(笑)