わかりました、私はこれで少し遊んでいて、あなたを動かすためのコードをいくつか持っています。このコードはあなたが望むことをしていると思います.jsfiddleを見てください.
必要なことを行う方法を見つけるために、jqueryui のソースを調べなければなりませんでした。コードは、いくつかのプライベート プロパティを使用し、それを実現するためにプライベート メソッドを呼び出します。私のハックの背後にある基本的な考え方は、ドラッグ イベントで jqueryui ソースによってのみ評価されるため、イベント時にcursorAt
プロパティを設定したいということです 。そのため、後で変更しても新しい値は使用されません。drag
cursorAt
start
したがって、これを呼び出すと、渡したパラメーターが新しいプロパティ_adjustOffsetFromHelper()
として再解釈され、適用されます。cursorAt
ここでトリッキーな部分は、新しいプロパティに渡す正しい上と左の値を把握することでした。cursorAt
私はプライベートプロパティ.offset.click.top
とを使用してできる限りそれらを近似します.offset.click.left
が、トップが一致せず、値をハードコードする必要があった場合、おそらくマージンオフセットなどで、.offset.top
試してみたい他のプライベートプロパティで遊ぶことができますハードコードされた値を取り除きます。
このコードをさらに改善するには、 ドラッグ可能な jqueryui のソースを確認することをお勧めします。特に、_mouseStart()
メソッド ( drag_start 時に実行されるコード) には、便利な位置付け変数がいくつかあります。
jsFiddle コードの貼り付け:
HTML:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
<div id="score"> </div>
<div class="myDiv">1</div>
<div class="myDiv">2</div>
<div class="myDiv">3</div>
CSS:
#score
{
height:50px;
}
.myDiv
{
width:40px;
height:40px;
margin:10px;
border:1px solid #000000;
float:left;
cursor:pointer;
text-align:center;
line-height:40px;
position:relative;
top:0;
left:0;
}
ジャバスクリプト:
var adjusted = false;
$(".myDiv").draggable({
start: function () {
ImmagineDrag = $(this);
startImageX = ImmagineDrag.position().top;
startImageY = ImmagineDrag.position().left;
},
drag: function () {
currentImageX = ImmagineDrag.position().top;
currentImageY = ImmagineDrag.position().left;
$('#score').html(currentImageX);
if(currentImageX > 200) {
if (!adjusted) {
adjusted = true;
drg = ImmagineDrag.data("draggable");
ctop = drg.offset.click.top;
cleft = drg.offset.click.left;
newtop = currentImageX - startImageX + ctop;
newleft = currentImageY - startImageY + cleft;
drg._adjustOffsetFromHelper({top:newtop-12,left:newleft});
}
}
},
stop: function () {
}
});
</p>