0

通常我更喜欢为琐碎的问题编写自己的解决方案,因为通常插件会添加许多不需要的功能并增加您的项目规模。大小使页面变慢,并且 100k 页面浏览量/天网站中的 30k 差异(与 jquery 可拖动相比)对账单产生了很大影响。我已经使用 jquery,我认为这就是我现在所需要的,所以请不要告诉我使用另一个插件或框架来拖动东西。

考虑到这一点,我编写了以下代码,以允许可以拖动一个框。代码工作得很好(任何关于代码本身的提示都会非常感激),但我遇到了一个小故障。

当我将框拖到浏览器右边缘限制时,会出现一个水平滚动条,窗口宽度因框而变大。理想的行为是看不到水平滚动条,但允许将框的一部分放在窗口区域之外,就像 windows 窗口一样。

有小费吗?

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>
4

2 回答 2

3

对于一个简单的解决方案,您可以将一些 CSS 添加到可拖动对象的容器中以防止滚动条。

body { overflow: hidden; }

jsFiddle:http: //jsfiddle.net/F894P/

于 2012-06-13T16:19:32.870 回答
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().

于 2012-06-13T16:32:51.317 回答