@Šime Vidas:您的第一个解决方案简直太棒了。 (我认为第二个是多余的=)
我可以建议为垂直和水平宽度制作两个不同的功能吗?因为你几乎不可能在一个完美的正方形内移动一个 div,我相信有这样的东西会更好:
$(function () {
var pane = $('#pane'),
box = $('#box'),
wh = pane.width() - box.width(),
wv = pane.height() - box.height(),
d = {},
x = 5;
function newh(v,a,b) {
var n = parseInt(v, 10) - (d[a] ? x : 0) + (d[b] ? x : 0);
return n < 0 ? 0 : n > wh ? wh : n;
}
function newv(v,a,b) {
var n = parseInt(v, 10) - (d[a] ? x : 0) + (d[b] ? x : 0);
return n < 0 ? 0 : n > wv ? wv : n;
}
$(window).keydown(function(e) { d[e.which] = true; });
$(window).keyup(function(e) { d[e.which] = false; });
setInterval(function() {
box.css({
left: function(i,v) { return newh(v, 37, 39); },
top: function(i,v) { return newv(v, 38, 40); }
});
}, 20);
});
这正是我想要的。
如果您有基于 % 值的响应式设计,建议您像这样调整 setInterval:
setInterval(function() {
box.css({
left: function(i,v) { return newh(v, 37, 39); },
top: function(i,v) { return newv(v, 38, 40); }
});
wh = pane.width() - box.width();
wv = pane.height() - box.height();
}, 20);
如果您这样做,它会调整窗格的高度和宽度,并且框仍会停在其边框处。
我在这里做了一个小提琴http://jsfiddle.net/infidel/JkQrR/1/
非常感谢。