2009-10-30 11 views
5

Czy istnieją przykłady rozwiązania typu "przeciągnij i upuść", w którym przeciągane elementy mogą poruszać się tylko po pochyłej linii? Na przykład ograniczmy przeciągalność elementu, aby można było go przesuwać tylko wzdłuż linii 30º lub 10º itp.Przeciągnij i upuść wzdłuż ukośnej linii?

Większość przykładów, które udało mi się znaleźć, ogranicza obszar obszaru przeciągniętego do linii pionowej lub poziomej lub do większego elementu div rodzicielskiego.

Prawdopodobnie powiązane: Przeciągnij wzdłuż ukośnej linii nie dalej niż 100 pikseli lub wzdłuż krzywej.

Odpowiedz

4

kompletny przykład (tylko FF)

<div id="drag" style="position:absolute;width:20px;height:20px;background:red"></div> 
<script> 
var angle = 10; 
window.onload = function() 
{ 
    var d = document.getElementById("drag"); 
    d.onmousedown = function() { 
     document.onmouseup = function() { 
      document.onmousemove = null; 
     } 
     document.onmousemove = function(e) { 
      d.style.left = e.clientX; 
      d.style.top = e.clientX * Math.tan(angle * Math.PI/180); 
     } 
    } 
} 
</script> 
+0

Dodaj niektóre jednostki ('" px "') do swoich przypisań "lewych" i "górnych" i dobrze jest jechać we wszystkich przeglądarkach (o ile na stronie nie ma paska przewijania). –

1

Wydaje się, że jedynym sposobem, aby to zrobić, bez irytowania użytkownika, jest śledzenie kąta od miejsca początkowego, a jeśli są pod nieprawidłowym kątem, nie ustawiaj droptarget.

W ten sposób, jeśli puścisz, powraca do pierwotnej pozycji, a jedyne ważne miejsca do opuszczenia spełniają twoje wymagania.

+0

Ale wtedy, że zakładamy, że każda pozycja myszy nie bezpośrednio overtop linii jest nieprawidłowy (to znaczy tworzy kąt „nieprawidłowy”, jak go umieścić). Powiedziałbym, że to ograniczenie jest * szkodliwe * dla UX, ponieważ wymaga precyzyjnej kontroli nad myszą. Bardziej przydatnym UX byłoby ekstrapolowanie "poprawnego" punktu kroplenia z miejsca, w którym znajduje się mysz (w pewnym obszarze buforowym oczywiście), aby pomóc tym (większość z nas?), Którzy nie kontrolują myszy bardzo dobrze. –

+1

Nie, moja sugestia dotyczy pomysłu, że można przenosić obiekt, który jest przeciągany, gdziekolwiek się chce, ale jedynymi wyróżnionymi obiektami są te pod właściwym kątem, każde inne miejsce nie będzie droptarget. Zawiera wskazówki dotyczące tego, gdzie jest prawidłowa, na podstawie objaśnienia lub poinformowania użytkownika przez informację zwrotną, że jest ona ważna, a jeśli przenosi się gdzie indziej, wtedy inne poprawne miejsce zostanie ostatecznie wyróżnione (zaznaczone). –

0

Wydaje się to łatwe, jeśli napisałeś własny program obsługi DnD. Zasadniczo ruch DnD ograniczony do osi pionowej lub poziomej działa poprzez zmianę atrybutów CSS tylko podczas dynamicznego pozycjonowania elementu, który można przeciągnąć.

Możesz użyć tego samego pomysłu, aby dostosować to powściągliwe zachowanie. Zamiast tłumaczyć (X, Y) aktualnej pozycji myszy dla elementu CSS left/right elementu, można użyć X dla left i wyprowadzić right, przepuszczając go przez funkcję liniową, taką jak y = mx + b.