基本的に、グリッドオプションを使用してドラッグ可能なdivを30 x 30グリッドにスナップしたいのですが、ドラッグをスムーズに保ちたいと思います。それで、マウスリリース(または同様のもの)でグリッドにスナップする方法はありますか
2818 次
3 に答える
5
@Zed への修正。これは、どのグリッドに配置するかを決定するために中心を使用します。ほとんどのドラッグ可能要素が配置されます。
stop: function(e, ui) {
var grid_x = 30;
var grid_y = 30;
var elem = $( this );
var left = parseInt(elem.css('left'));
var top = parseInt(elem.css('top'));
var cx = (left % grid_x);
var cy = (top % grid_y);
var new_left = (Math.abs(cx)+0.5*grid_x >= grid_x) ? (left - cx + (left/Math.abs(left))*grid_x) : (left - cx);
var new_top = (Math.abs(cy)+0.5*grid_y >= grid_y) ? (top - cy + (top/Math.abs(top))*grid_y) : (top - cy);
ui.helper.stop(true).animate({
left: new_left,
top: new_top,
opacity: 1,
}, 200);
},
于 2011-06-19T18:10:20.423 に答える
3
それがグリッドでやりたいことのすべてである場合は、それをエミュレートできます。
$("#myobj").draggable({
...
stop: function(event, ui) {
t = parseInt($(this).css(top);
l = parseInt($(this).css(left);
$(this).css(top , t - t % 30);
$(this).css(left, l - l % 30);
}
...
});
于 2009-07-31T21:28:50.950 に答える
0
トランジションに挑戦!
私が今発見したちょっとした良いことは、ドラッグされた要素にトランジションの css プロパティを与えると、グリッドにスナップする速度に影響を与えるということです。
$(function() {
$(".draggable").draggable({
containment: 'window',
grid: [30, 30]
});
});
.draggable {
background: #333;
color: whitesmoke;
font-family: 'sans-serif', 'arial';
padding: 5px 12px;
display: inline-block;
transition: top 0.05s ease-in-out, left 0.05s ease-in-out
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<div class="draggable">Drag Me!</div>
于 2016-01-12T16:00:40.190 に答える