2013-03-21 10 views
6

Mam wielu, przeciągalne divs wewnątrz przewijania div. Kiedy przeciągam je do strefy zrzucanej (która jest również przewijanym div), DIV nie jest przewijane w dół. Tylko strona się porusza. Jak powiedzieć, że tylko droppable div powinien przewijać podczas przeciągania?przewijać wewnątrz doppable DIV podczas przeciągania w pobliżu dna

Tu jest mój bieżący kod jQuery do tworzenia DIV przeciągalne

$(".drag_item").draggable({ 
     helper: 'clone', 
     scroll: true, 
     drag: function(event, ui) { 
      $(this).css('z-index','100'); 
     } 
    }); 

enter image description here

Odpowiedz

0

Use "overflow=auto" to działa na mnie.

<div style="overflow:auto;"></div> 

lub

jQuery obsługuje scrollTop jako zmiennej animacji.

$("#id").animate({"scrollTop": $("#id").scrollTop() + 100}); 

Aby przewijać płynnie, nie trzeba już ustawiać setTimeout/setInterval.

+0

przepełnienie = auto jest już ustawiony, ale nie działa w strefie droppable. Zamiast tego ciało dziury jest przewijane w dół, co nie jest pożądane. Czy można powiązać funkcję przewijania ze strefą zrzucania? – Thomas1703

2

wymyśliłem tego rozwiązania:

var direction = {}; 
var bound = {}; 
var scrolling = false; 
var container = document.getElementById("container"); 

$('#table-container') 
.on('dragstart', draggable, function(event, ui) { 
    bound = { 
    right : $(container).offset().left + $(container).width() - 50, 
    left : $(container).offset().left + 50, 
    top : $(container).offset().top + 50, 
    bottom : $(container).offset().top + $(container).height() - 50 
    }; 
}) 
.on('dragstop', draggable, function(event, ui) { 
    direction = {}; 
}) 
.on('drag', draggable, function(event, ui) { 
    direction.right = event.clientX - bound.right; 
    direction.left = bound.left - event.clientX; 
    direction.up = bound.top - event.clientY; 
    direction.down = event.clientY - bound.bottom; 

    if ((direction.right > 0 || direction.left > 0|| direction.up > 0 || direction.down > 0) && !scrolling) { 
    scroll(); 
    scrolling = true; 
    } else { 
    scrolling = false; 
    } 
}); 

function scroll() { 
    if (direction.right > 0) { 
    container.scrollLeft = container.scrollLeft + (direction.right >> 1); //dividing by 2 to soften effect 
    } 
    if (direction.left > 0) { 
    container.scrollLeft = container.scrollLeft - (direction.left >> 1); 
    } 
    if (direction.down > 0) { 
    container.scrollTop = container.scrollTop + (direction.down >> 1); 
    } 
    if (direction.up > 0) { 
    container.scrollTop = container.scrollTop - (direction.up >> 1); 
    } 

    if (direction.right > 0 || direction.left > 0 || direction.up > 0 || direction.down > 0) { 
    setTimeout(scroll, 100); 
    } 
} 
Powiązane problemy