簡體   English   中英

可拖動的框寬毛刺

[英]draggable box width glitch

通常,我更喜歡為瑣碎的問題編寫自己的解決方案,因為通常插件會添加很多不必要的功能,並會增加項目的規模。 大小會使頁面變慢,並且在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>

對於一個簡單的解決方案,您可以將一些CSS添加到可拖動對象的容器中以防止滾動條。

body { overflow: hidden; }

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

代替這個:

$("#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().

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM