Jquery UI Sortableをズームで操作しようとしています。問題は、マウスがドラッグしている要素と同じ速度で移動しないことです。これをDraggableで動作させる方法については、いくつかの例があります。ここではドラッグ可能な項目のための回避策の例です。JqueryUIを取得する方法ズーム/スケール - マウス移動でソート可能な作業
http://jsfiddle.net/TqUeS/660/
var zoom = $('#canvas').css('zoom');
var canvasHeight = $('#canvas').height();
var canvasWidth = $('#canvas').width();
$('.dragme').draggable({
drag: function(evt,ui)
{
// zoom fix
ui.position.top = Math.round(ui.position.top/zoom);
ui.position.left = Math.round(ui.position.left/zoom);
// don't let draggable to get outside of the canvas
if (ui.position.left < 0)
ui.position.left = 0;
if (ui.position.left + $(this).width() > canvasWidth)
ui.position.left = canvasWidth - $(this).width();
if (ui.position.top < 0)
ui.position.top = 0;
if (ui.position.top + $(this).height() > canvasHeight)
ui.position.top = canvasHeight - $(this).height();
}
});
私はドラッグイベントがこれのソート可能なバージョンでソートイベントによって置き換えられることを期待していますが、から見ることができるようになりフィドルの下で、それは動作しません。ソートイベントにui.positionを設定しても効果はありません。イベントが発生した後にそれを設定して破棄したようです。
http://jsfiddle.net/TqUeS/658/
var zoom = $('#canvas').css('zoom');
var canvasHeight = $('#canvas').height();
var canvasWidth = $('#canvas').width();
$('#canvas').sortable({
items: "div",
sort: function(evt,ui)
{
// zoom fix
ui.position.top = Math.round(ui.position.top/zoom);
ui.position.left = Math.round(ui.position.left/zoom);
// don't let draggable to get outside of the canvas
if (ui.position.left < 0)
ui.position.left = 0;
if (ui.position.left + $(this).width() > canvasWidth)
ui.position.left = canvasWidth - $(this).width();
if (ui.position.top < 0)
ui.position.top = 0;
if (ui.position.top + $(this).height() > canvasHeight)
ui.position.top = canvasHeight - $(this).height();
}
});
誰もが別の回避策を持っている場合、私はそれを聞いて幸せになると思います。
ドラッグ可能でテストすると、項目が各コーナーに向かってプッシュされます。これは期待される活動ですか?それはソート可能でうまくいくようです。たぶん私はその問題全体を見ていないでしょう。 – Twisty
ここでテストします:http://jsfiddle.net/Twisty/4nv60ob9/ '$("#canvas ")。css(" zoom ")を' 0.5'で置き換えると、 'NaN'の代わりに実際の値が得られます。 '無限大' – Twisty
""の値を持つStringとして読み取っています。修正の作業。 – Twisty