jQueryを利用したUIはさまざま実験サンプルを作ったり紹介したりしてきましたが、
未だドラッグに関してのUIをあまり実験したことがなかったので
サンプルを交えて簡単にドラッグUIを実装する方法を紹介してみます。
jQueryでドラッグUIを実装する方法(ドラッグスクロールサンプル)
まず動作サンプルから。
下記の写真下にあるスクロールバーをドラッグしてください。
スクロールバーをドラッグして動かすことで
上に配置してある写真エリアがスクロールします。
jQueryでドラッグUIを実装する際には、
通常のライブラリファイルの他に、
jQueryUIファイルである、
———————————–
jquery.ui.core.js
jquery.ui.widget.js
jquery.ui.mouse.js
jquery.ui.draggable.js
———————————–
の各ファイルを使用します。
※jQuery1.3.2以前の古いバージョンを使用する場合はjQueryUIのファイル構成が異なります。
紹介したサンプルの構成について、
まずはHTMLから。
◆HTML <div id="drag_mask"> <ul> <li><a href="http://instagr.am/p/R_QzR/?ref=nf" target="_blank" rel="noopener"><img src="img/photo01.jpg" /></a></li> <li><a href="http://instagr.am/p/TZBH0/?ref=nf" target="_blank" rel="noopener"><img src="img/photo02.jpg" /></a></li> <li><a href="http://instagr.am/p/URQV0/?ref=nf" target="_blank" rel="noopener"><img src="img/photo03.jpg" /></a></li> <li><a href="http://instagr.am/p/UiVny/?ref=nf" target="_blank" rel="noopener"><img src="img/photo04.jpg" /></a></li> <li><a href="http://instagr.am/p/T8Ua7/?ref=nf" target="_blank" rel="noopener"><img src="img/photo05.jpg" /></a></li> <li><a href="http://instagr.am/p/U-F3B/?ref=nf" target="_blank" rel="noopener"><img src="img/photo06.jpg" /></a></li> </ul> </div><!--/#drag_mask-->
全体を任意の<div>で囲い、
あとは単純な<li>リストで画像を横並びにしています。
そしてCSSは以下の様に。
◆CSS
#drag_mask {
margin: 0 auto 20px auto;
padding: 20px 0;
width: 500px;
height: 150px;
text-align: left;
border: #cccccc 1px solid;
position: relative;
overflow: hidden;
}
#drag_mask ul {
width: 1000px;
height: 150px;
text-align: left;
position: absolute;
}
#drag_mask ul li {
margin-left: 20px;
width: 140px;
height: 140px;
text-align: center;
float: left;
display: inline;
}
#drag_mask ul li img {
width: 140px;
}
#drag_line {
margin: 0 auto;
width: 500px;
height: 20px;
text-align: left;
border:1px solid #cccccc;
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
background: #cccccc;
position: relative;
}
#drag_pointer {
width: 18px;
height: 18px;
border:1px solid #555;
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
background: #555;
cursor: w-resize;
}
特に、ドラッグUIを構成する為の重要な要素というものはなく
単純なレイアウト組みとなっています。
(「#drag_line」と「#drag_pointer」はスクリプト側から生成する
ドラッグ用スクロールバーの指定になっています。)
そして肝心のスクリプト構成は
以下の様になります。
◆SCRIPT
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="js/jquery.ui.draggable.js"></script>
<script type="text/javascript">
$(function(){
$('<div id="drag_line"><div id="drag_pointer"></div></div>').insertAfter('#drag_mask');
$('#drag_pointer').draggable({
drag: function(){
var posLeft = parseInt($(this).css('left'));
$('#drag_mask ul').css({left:-(posLeft)});
},
containment:'parent',
opacity:'0.7'
});
});
</script>
jQueryファイルとjQueryUIの必要なファイルをもろもろ読み込みます。
function開始後、1行目の
「$(‘<div id=”drag_line”><div id=”drag_pointer”></div></div>’).insertAfter(‘#drag_mask’);」
は写真エリアの後にドラッグ用スクロールバーのエリアを生成する指定になっています。
実際のドラッグ操作については
「$(‘#drag_pointer’).draggable()」の指定から実行させます。
「.draggable()」から後の動作オプションにて、
「drag:」で、ドラッグ中に上部の写真エリアをスクロールするfunctionを実行し、
ドラッグする範囲「containment:」の指定を親要素にあたる「parent」に設定、
ドラッグ中は掴んでいる要素の透明度を「0.7」にする指定を加えてあります。
(今回のサンプルでは「containment:」にあたる親要素は「#drag_line」になります)
今回はドラッグ中のみfunctionを実行させていますが、
ドラッグ開始時やドラッグ終了時など、それぞれの実行タイミングで、
何か別々のfunctionを設定することも可能です。
ドラッグ操作を実行させる「$(●●●●).draggable()」に付加することができる
オプションやオブジェクトプロパティなど細かなものについては
下記のリファレンスサイトがとても参考になります。
≫Draggable – jQuery UI API 1.8.4 日本語リファレンス – StackTrace
今回のサンプルは単純なドラッグスクロールになりますが
これを元にいろいろなドラッグUIを試してみたいと思います。
(ちなみにjQueryのドラッグUIは通常、iPhoneでは動作しません。。。)
jQueryでドラッグUIが必要になった際に是非。。。
