2011-07-11 11 views
6

mamjquery ui osi przeciągany ograniczeniem ina xi podane współrzędne

<style> 
.container { position:relative; width:600px; height:400px; overflow:hidden; } 

.div-inner { position:absolute; top:0px; left:0px; width:7200px; cursor:e-resize; } 

</style> 

$ ("div wewnętrzny"). Przeciągany ({osi: "X"}.);

<div class="container"> 
    <div class="div-inner">Drag me!</div> 
    </div> 

Chcę ograniczyć ruch w lewo i na prawo od 7200 pikseli szerokości div wewnętrznej.

jeśli był przewijalnym elementem, to pozwoliłbym mu przewinąć od lewej: 0px; w lewo: (7200-600) px;

Jak mogę to zrobić za pomocą przeciągania?

Dziękuję bardzo!

Odpowiedz

13

znalazłem rozwiązanie:

$(".div-inner").draggable({ axis: "x", 

    stop: function(event, ui) { 
     if(ui.position.left>0) 
     { 
     //alert('Return back'); 
     $(".div-inner").animate({"left": "0px"}, 600); 
     } 
     else if(ui.position.left<-6800) 
     { 
      $(".div-inner").animate({"left": "-6400px"}, 600); 
     }             
    } 
+1

Dzięki za rozwiązanie. Wygląda na to, że z biblioteką, która działa tak długo, jak jQueryUI ma to być częścią API. – todd

+0

BTW, z mojego doświadczenia wynika, że ​​ten kod nie wydaje się być zgodny z opcją [_containment_] (http://api.jqueryui.com/draggable/#option-containment) przeciągalnego interfejsu API (jQuery UI 1.10.3) . Kiedy masz ustawioną opcję powstrzymywania wraz z tym kodem, zawartość przeskakuje od początku do końca. – todd

+0

naprawdę? Dziękuję za heads-up! Jest to używane w poprzedniej wersji. – dtakis

3

Istnieje kilka przykładów ograniczonego ruchu dostępne w dokumentacji jQuery UI: http://jqueryui.com/demos/draggable/constrain-movement.html

$(function() { 
    $("#draggable").draggable({ axis: "y" }); 
    $("#draggable2").draggable({ axis: "x" }); 

    $("#draggable3").draggable({ containment: "#containment-wrapper", scroll: false }); 
    $("#draggable4").draggable({ containment: "#demo-frame" }); 
    $("#draggable5").draggable({ containment: "parent" }); 
}); 

Można oba zawierają draggables na 'rodzic', 'dokument', 'okna', [x1, y1, x2 , y2], element lub selektor. Można dodatkowo zezwolić na ruch osi x lub y.

+0

Czytałem documentatio jQueryUI i nie mogę tego dokonać. Pierwszym krokiem jest ograniczenie osi x tak jak ja. Może coś z [x1, y1, x2, y2] będzie działać, ale nie udało mi się sprawić, żeby działało. Dzięki za twój czas! – dtakis

+0

Nie jestem całkiem pewien, dlaczego twój kontener jest mniejszy niż szerokość wewnętrznego elementu. Czy jest coś takiego jak http://jsfiddle.net/Akkuma/zdJws/ co chcesz osiągnąć? – Akkuma

+0

Nie moim celem jest posiadanie rzutni, w której wewnątrz znajdują się informacje, które można przeciągnąć. Wyobraź sobie, że kontener jest oknem czasowym, które zawiera wszystkie dni, takie jak oś czasu. Pojemnik jest mały, więc mogę przeciągnąć informacje w środku. [============= [<- Aktualny widok ->] ========================== ======] – dtakis