任意のNodeをDrag&Dropできるようにする。$startMouseMonitor() を併用。
スマホ用の可動範囲をpx_vw値で指定することも可能。
可動範囲は、指定Nodeのleft値(縦の場合はtop値)を考えて指定する。動作サンプルのようなスライダーの場合には、可動最大値はドラッグ領域となるバーの全幅からつまみ幅を差し引いた数値となる点に注意。
スクロール時の処理は、外部にFunctionとして『ddHandlerLR(nowX,tarId) / ddHandlerTB(nowY,tarId)』を必要に応じて用意し、その中で処理する。引数『nowX/nowY』には現在のドラッグ量が、引数『tarId』には対象Nodeのid値が渡される。ページ内に複数のドラッグ要素を配置する場合には、tarIdで分岐して処理する。
縦方向にスクロールさせる場合、スマホなどのタッチデバイスでは指定Nodeではなくページ自体が縦スクロールしてしまう場合があるので注意して使用すること。
横方向のDrag&Dropサンプル。ドラッグ量をパーセントで表示:0%
HTML :
<body onload="$startMouseMonitor(true)">//ポインタの位置を取得できるように起動する
<div id="sample1">
<div id="knob1" onmousedown="$ddHandler('knob1','LR',0,480,0,240)" ontouchstart="$ddHandler('knob1','LR',0,480,0,240)"></div>
</div>
Sass :
#sample1 {
position: relative;
width: 600px;
height: 28px;
#knob1 {
position: absolute;
top: 0;
left: 0;
width: 120px;
height: 28px;
}
}
Javascript :
function ddHandlerLR(nowX,tarId) {
if(tarId=="knob1") {
var perStr=Math.round(nowX/480*100)+"%";
$toHTML("knob1_status",perStr);
}
}
縦方向のDrag&Dropサンプル。ドラッグ量をパーセントで表示:0%
HTML :
<body onload="$startMouseMonitor()">//ポインタの位置を取得できるように起動する:PCのみ対応
<div id="sample2">
<mark id="knob2" onmousedown="$ddHandler('knob2','tb',0,200)"></mark>
</div>
Sass :
#sample2 {
position: relative;
width: 28px;
height: 280px;
#knob2 {
position: absolute;
top: 0;
left: 0;
width: 28px;
height: 80px;
}
}
Javascript :
function ddHandlerTB(nowY,tarId) {
if(tarId=="knob2") {
var perStr=Math.round(nowY/200*100)+"%";
$toHTML("knob2_status",perStr);
}
}