2012-03-02 77 views
1

根據可拖動方向(初始化後)如何設置座標軸?根據可拖動方向設置座標軸jQuery可拖動

如果將它左右拖動,則它將爲x,y(如果向上拖動)。

$("#belt").draggable({ 
    handle: "li", 
    axis: "y", 
    start: function() { 

     //I want to be dragged in the axis i belong which should be x.... 

    }, 
}); 

回答

6

可以使用距離最初約束運動以獲得哪個方向的用戶正在移動初始讀取,然後設置軸限制。

var x, y; 

$("#belt").draggable({ 
    start: function(event) { 
     x = event.originalEvent.pageX; 
     y = event.originalEvent.pageY; 
    }, 
    drag: function(event) { 
     if (x && y) { 
      axis = Math.abs(event.originalEvent.pageX - x) > Math.abs(event.originalEvent.pageY - y) ? 'x' : 'y'; 
      $("#belt").draggable('option', 'axis', axis); 
      x = y = null; 
     }   
    }, 
    stop: function() { 
     x = y = null; 
     $("#belt").draggable('option', 'axis', false); 
    }, 
    distance: 20 
});​ 

這裏有一個小提琴:http://jsfiddle.net/jhchen/B7J2E/

+0

它會如何判斷拖拽的方向是什麼?相同的元素軸需要根據方向進行切換。 – Codex73 2012-03-02 04:44:31

+0

不好意思誤解了這個問題。更新瞭解決方案。 – jhchen 2012-03-02 06:38:40

+0

非常感謝,這正是我所需要的。 – Codex73 2012-03-02 13:16:54

2

欣賞答案jhchen!我分叉你的小提琴以包含一些代碼,以便軸鎖定僅在用戶在拖動時按住Shift鍵的情況下發生。

http://jsfiddle.net/B7J2E/40/

var x, y; 

$("#test").draggable({ 
    start: function(event) { 
     console.log(event); 
     x = event.originalEvent.pageX; 
     y = event.originalEvent.pageY; 
     console.log(x, y); 
    }, 
    drag: function(event) { 
     if (event.shiftKey) { 
      if (x && y) { 
       axis = Math.abs(event.originalEvent.pageX - x) > Math.abs(event.originalEvent.pageY - y) ? 'x' : 'y'; 
       $("#test").draggable('option', 'axis', axis); 
       x = y = null; 
      }   
     } 
    }, 
    stop: function() { 
     x = y = null; 
     $("#test").draggable('option', 'axis', false); 
    }, 
    distance: 20 
});