ďťż

[JS] Jak wstawić obiekt w odpowiednie miejsce? Na podstawie współrzędnych kursora

       

Podstrony


telcocafe

Na warstwie <div> znajduje się kolejna warstwa <div> ze zdarzeniem onmousedown="FUSE()". Kod:
//Place a fuse function FUSE(e) { e = e || event; var x = e.layerX || e.offsetX, y = e.layerY || e.offsetY, fX, fY = 7; if(y > 20) { fY = 25; //Place it in the second row } /* Dalsza część - jak rozpocząć? */ }

Przykład: http://ifotos.pl/mini/rrqhnp.png
Problem: wstawić bezpiecznik na miejsce 2 pinów w odpowiednim miejscu na podstawie współrzędnych kursora. Są 2 rzędy po 8 wejść, więc można umieścić 1 bezpiecznik na 14 (2 * 7) sposobów.

Oczywiście można wprowadzić 6 lub 7 instrukcji IF, ale być może lepszym rozwiązaniem są obliczenia matematyczne, aby nie powtarzać ciągle tego samego kodu, np.
if(x > 20) { fuseX = 5; } else if(x > 45) { ... } ...



Niezbyt zrozumiałem. Za mało danych przykładowych podstawiłeś. Moim rozumowaniem, to możesz odjąć ilość pikseli od lewej strony i zaokrąglić w dół wynik dzielenia przez odległość dwóch pinów i stąd masz numer pinu. Nie wiem, czy o to chodzi, bo sam chyba namieszałeś w przykładzie (w pierwszym kodzie używasz y, a w drugim już x) no i nie rozumiem skąd się bierze 20, 45 itd.

Podobny problem

Klawiatura
http://img7.imagesha...7/2835/kbdl.png

Jest kilka rzędów klawiszy. Można przyjąć, że każdy klawisz ma wymiary 30x30 pikseli, a więc odległości między klawiszami i rzędami wynoszą 30 px. Backspace można potraktować jako 2 osobne klawisze.

Kod
http://javascript.pastebin.pl/11602

Rozwiązałem problem w ten sposób. Jest osobna instrukcja IF dla każdego rzędu klawiszy, która uwzględnia przesunięcie od lewej. Pomijam niektóre klawisze, np. SHIFT, stąd przesunięcie współrzędnej X wynosi 90 w A-M.

Czy da się ten algorytm tak zwinąć, aby zajmował jak najmniej kodu?
Mam wstępny pomysł, ale może ktoś zaproponuje ciekawszą solucję.

Ostatecznie mogę dokonać zmian, np. przesunąć lub zmienić rozmiary klawiszy.
Użytkownik Ferrari edytował ten post 26 wrzesień 2009, 15:39
Już bardziej tego nie skrócisz. Wkradła Ci się tam zmienna cell, a zadeklarowałeś col. Dodatkowo if (y > 200) powoduje, że można kliknąć nawet na obudowie klawiatury. http://javascript.pastebin.pl/11614
Bardziej tego już nie uprościsz. Chyba że wiersz z klawiszami funkcyjnymi (Esc, F1, etc.) byś pominął i wiersz z tyldą by miał numer 0, to można zrobić w ten sposób (nie chce mi się liczyć, więc Cię jedynie naprowadzę):
Klawiatura po modyfikacji.
Odejmujesz od pozycji y wysokość zielonego pola, dzielisz to przez 30 i zaokrąglasz w dół. Jeśli wyjdzie <=4, to idziesz dalej. Odejmujesz od wartości x szerokość fioletowego pola, odejmujesz od tego jeszcze (y < 4 ? 15 * y : 0), dzielisz przez 30 i zaokrąglasz w dół. 15, to założenie, że tyle wynosić będzie przesunięcie (czerwone strzałki). Mam nadzieję, że coś pomogłem ;)
Użytkownik andrzej_aa edytował ten post 27 wrzesień 2009, 10:17
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.