Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]zapis dwóch zdarzeń
Forum PHP.pl > Forum > Przedszkole
c4ash
Witajcie!

W koncu zabrałem sie za JS. Tak wiec prosze nie krzyczcie, staram sie czegos sensownego nauczyc.
Mam skrypt ktory wskazuje pozycje kursora i dodaje info na stronie:
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. window.onload = init;
  3. function init() {
  4. if (window.Event) {
  5. document.captureEvents(Event.MOUSEMOVE);
  6. }
  7. document.onclick = getXY;
  8. }
  9.  
  10.  
  11. function getXY(e) {
  12. x = (window.Event) ? e.pageX : event.clientX;
  13. y = (window.Event) ? e.pageY : event.clientY;
  14.  
  15. document.position.position1.value = x+":"+y;
  16. }
[JAVASCRIPT] pobierz, plaintext

I tutaj juz wszystko jasne... do momentu gdy chce zaznaczyc drugi punkt, ale tak, aby nie stracic tego pierwszego. Mam dwa inputy, position1 to polozenie 1, position2 to ma byc tego drugiego... Ale jak pobrac przy uzyciu tej samej funkcji druga wartosci i wpisac ja gdzie indziej?

Z gory dziekuje za pomoc.
SmokAnalog
Nie wiem czy dobrze rozumiem: chcesz, żeby po kliknięciu wypełniło się pierwsze pole, ale gdy to pole jest już wypełnione, to wtedy drugie pole, tak?

To możesz np. tak:
[JAVASCRIPT] pobierz, plaintext
  1. window.onload = init;
  2. function init() {
  3. if (window.Event) {
  4. document.captureEvents(Event.MOUSEMOVE);
  5. }
  6. document.onclick = getXY;
  7. }
  8.  
  9.  
  10. function getXY(e) {
  11. x = (window.Event) ? e.pageX : event.clientX;
  12. y = (window.Event) ? e.pageY : event.clientY;
  13.  
  14. document.getElementById(document.getElementById('position1').value === '' ? 'position1' : 'position2').value = x+":"+y;
  15. }
[JAVASCRIPT] pobierz, plaintext


Zauważ, że użyłem document.getElementById zamiast document.nazwaFormularza.nazwaPola. Żeby zadziałało, inputy muszą mieć odpowiednio id="position1" i id="position2"
c4ash
No faktycznie, dziala. Trojoperator zalatwia sprawe.
Ale teraz jeszcze inne dzialanie.. A tego to juz nie mam pojecia jak zaczac, czy ugryzc.
Co nalezy dodac, aby te punkty byly jakos zaznaczone, albo jeszcze inaczej - aby pole powstale przez klikniecie tych dwoch punktow, bylo obramowane w jakis sposob?
Aby wyjasnic moze jeszcze dokladniej - zaznaczajac dwa punkty mamy wierzcholki prostokata - jak zrobic, aby widac bylo takie obramowanie?

To co przyszlo mi do glowy, to pobrac te dane z position1 i 2 przez getElementById - nastepnie uzyc funkcji ktora sprawila by stworzyc zaznaczenie. Mysle w dobyrm kierunku?
Czy js ma gotowe funkcje, ktore mozna by wykorzystac?
SmokAnalog
Po Twoim opisie wciąż nie mam pojęcia o co chodzi smile.gif Nie wiem o jakie obramowanie chodzi.
c4ash
Ok, to moze tak: jak wykonac w js aby mozna bylo narysowac sobie prostokat na stronie, w dowolnym miejscu?
Mam juz wspolrzedne poczatku, konca. Wymyslilem, aby js rysowal diva z przezroczystym tlem, czy tam polprzezroczystym.
Czyli do zdarzenia onclick dopisac document.createElement('div') i ustawic element.style.background

Czy tok rozumowania jest dobry?
SmokAnalog
Tak, tok rozumowania jest dobry. Prostokąt będzie taki jak chcesz i tam gdzie chcesz, gdy nadasz mu style:
  • position: absolute
  • left
  • top
  • width
  • height
  • background
c4ash
Czy jest cos jeszcze, o czym powinienem wiedziec? Gdyz createElement nie dodaje nowego div`a..
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. window.onload = init;
  3. function init() {
  4. if (window.Event) {
  5. document.captureEvents(Event.MOUSEMOVE);
  6. }
  7. document.onclick = getXY;
  8.  
  9. }
  10.  
  11.  
  12. function getXY(e) {
  13. x = (window.Event) ? e.pageX : event.clientX;
  14. y = (window.Event) ? e.pageY : event.clientY;
  15.  
  16. document.getElementById(document.getElementById('position1').value === '' ? 'position1' : 'position2').value = x+":"+y;
  17.  
  18. }
  19.  
  20. function getID(oObject)
  21. {
  22. var id = oObject.id;
  23. document.position.gei.value = id;
  24.  
  25. }
  26.  
  27.  
  28. function markIt(e)
  29. {
  30. var mark = document.createElement('div');
  31. mark.id = 'mark';
  32. mark.style.background = '#fff';
  33. mark.style.position = 'absolute';
  34. mark.style.left = '50';
  35. mark.style.top = '150';
  36. mark.style.width = '50';
  37. mark.style.height = '50';
  38. document.getElementById('wrapper').appendChild('mark');
  39. }
  40. </script>
[JAVASCRIPT] pobierz, plaintext

A tresc dokumentu jest jak ponizej:
  1. <div id="kontener">
  2. <form name="position">
  3. <input name="position1" id="position1" type="text" /><input name="position2" id="position2" type="text" /><input name="gei" type="text" id="getElementId" />
  4. </form>
  5. <div id="wrapper"><img src="ferrari_01.jpg" width="1000" height="650" ismap="ismap" id="ferrari" onclick="getID(this);markIt(this);"/></div>
  6. <div id="wrapper"><img src="peugeot.jpg" width="100" height="100" id="peugeot" onclick="getID(this);"/></div>
  7. </div>
SmokAnalog
  1. Masz dwa elementy o id = wrapper
  2. Nie
    [JAVASCRIPT] pobierz, plaintext
    1. document.getElementById('wrapper').appendChild('mark');
    [JAVASCRIPT] pobierz, plaintext
    , tylko
    [JAVASCRIPT] pobierz, plaintext
    1. document.getElementById('wrapper').appendChild(mark);
    [JAVASCRIPT] pobierz, plaintext
  3. Style left, top, width i height powinny mieć na końcu podaną jednostkę, czyli nie '50', tylko '50px' itd.
c4ash
1. Poprawione, teraz oba obrazki sa w jednym div o id="wrapper".
2. Usunięte '' z appendChild.
3. Dodane jednostki do styli.

I div sie objawił. Dziekuje! Jestes wielki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.