通常我更喜欢为琐碎的问题编写自己的解决方案,因为通常插件会添加许多不需要的功能并增加项目的大小。在一个100k的综合浏览量/天网站中,大小使页面变慢并且30k差异(与jquery draggable相比)在账单上产生了很大的不同。我已经使用了jquery,我认为这就是我现在所需要的,所以请不要告诉我使用另一个插件或框架来拖动它。
惠特,记住我写了下面的代码,允许一个盒子可以拖动。代码工作得很好(关于代码本身的任何提示都会非常感激),但是我有一点点小故障。
当我将框拖到浏览器右边缘限制时,会出现一个水平滚动条,窗口宽度因框而变大。理想的行为是看不到水平滚动条,但允许将部分框放在窗口区域之外,就像窗口一样。
任何提示?
CSS:
.draggable {
position: absolute;
cursor: move;
border: 1px solid black;
}
使用Javascript:
$(document).ready(function() {
var x = 0;
var y = 0;
$("#d").live("mousedown", function() {
var element = $(this);
$(document).mousemove(function(e) {
var x_movement = 0;
var y_movement = 0;
if (x == e.pageX || x == 0) {
x = e.pageX;
} else {
x_movement = e.pageX - x;
x = e.pageX;
}
if (y == e.pageY || y == 0) {
y = e.pageY;
} else {
y_movement = e.pageY - y;
y = e.pageY;
}
var left = parseFloat(element.css("left")) + x_movement;
element.css("left", left);
var top = parseFloat(element.css("top")) + y_movement;
element.css("top", top);
return false;
});
});
$(document).mouseup(function() {
x = 0;
y = 0;
$(document).unbind("mousemove");
});
});
HTML:
<div id="d" style="width: 100px; left: 0px; height: 100px; top: 0px;" class="draggable">a</div>
答案 0 :(得分:3)
对于一个简单的解决方案,您可以在可拖动对象的容器中添加一些CSS以防止滚动条。
body { overflow: hidden; }
jsFiddle:http://jsfiddle.net/F894P/
答案 1 :(得分:1)
而不是:
$("#d").live("mousedown", function () {
// your code here
}); // live
试试这个:
$("body").on("mousedown","#d", function(){
// your code here
$("#parent_container").css({"overflow-x":"hidden"});
// or $("body").css({"overflow-x":"hidden"});
}); // on
#parent_container
是可拖动对象的位置。
您应该使用jQuery 1.7 +
从jQuery 1.7开始,不推荐使用.live()
方法。使用.on()
附加事件处理程序。旧版jQuery的用户应优先使用.delegate()
.live().