Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JS] Drag&Drop
tomek_byd
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.08.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Znalazłem parę skryptów do przesuwania obiektów jednak z każdym w pewnym momencie ma problem. Mam 2 obrazki:
  1. <img src="/obudowy/maska.png" id="img_maska" style="position: absolute; z-index: 2;"/>
  2. <div style="position: absolute; width: 500px; height: 500px; overflow: hidden;">
  3. <img src="/tmp/a2e81ca9898d476e82187b197df51f1a.jpeg" id="img_zdjecie" style="z-index: 1; position: relative;" onmousedown="OnMouseDown(event);"/>
  4. </div>

Obrazek img_maska jest przezroczystym png który nakładają pewne elementy na img_zdjecie. Gdy złapię img_zdjecie poza przykrywającymi go obrazkiem img_maska to się przesuwa, jak w img_maska w miejscu przezroczystości to już nie.
Go to the top of the page
+Quote Post
kamil4u
post
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


A jakie jest pytanie? I jakbyś mógł to opisz to trochę dokładnie lub daj SC lub (najlepsza opcja) przygotuj stronę testową smile.gif

Edit: prawdopodobnie musiałbyś lekko zmodyfikować skrypt D&D po kątem ... no właśnie nie pamiętam jak to się nazywało, ale coś z bubbling-iem prawdopodobnie http://www.quirksmode.org/js/events_order.html (pewny nie jestem)

Ten post edytował kamil4u 8.10.2009, 19:07:20


--------------------
Go to the top of the page
+Quote Post
tomek_byd
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.08.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Co do skryptu pełniejszego to tu zamieściłem działający kod http://tomek-byd.pl/. Jest to najważniejszy kawałek dużo większego kodu. Maska to ten biały kwadrat 400x400px z przezroczystym środkiem. Elementem przesuwanym jest to zdjęcie przykryte przez maskę. Specjalnie zrobiłem je o 100px większe żeby można było złapać poza maską. Jak się właśnie poza nią złapie skrypt chodzi ładnie. Jak się złapie w miejscu maski niestety nie działa.
kamil4u: dzięki za link zaraz to przejrzę i może coś mi to pomoże.
Go to the top of the page
+Quote Post
kamil4u
post
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


No to można to zrobić dużo łatwiej smile.gif
A więc w funkcji OnMouseDown podmieniasz:
Kod
var target=e.target!=null?e.target:e.srcElement;

na
Kod
var target=document.getElementById('img_zdjecie');
i html ma wyglądać coś w tym stylu:
Kod
    <div style="text-align: center; width: 100%;">
        <div style="overflow: hidden; margin-left: auto; margin-right: auto; margin-top: 25px; width: 400px; height: 400px; text-align: left;">
            <img src="Kreator_pliki/maska.png" id="img_maska" style="position: absolute; z-index: 2;" onmousedown="OnMouseDown(event);">
            <div style="overflow: hidden; position: absolute; width: 500px; height: 500px;">
                <img src="Kreator_pliki/a2e81ca9898d476e82187b197df51f1a.jpeg" id="img_zdjecie" style="z-index: 1; position: relative; left: -380px; top: -189px;" class="drag">
            </div>
        </div>
    </div>


Pozdrawiam


--------------------
Go to the top of the page
+Quote Post
tomek_byd
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.08.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


No to to rozwiązanie zaczyna działać. Jednak jest pewien kłopot. Jeśli kliknę i zacznę ciągnąc nic się nie dzieje, pokazuje się kursor ze znakiem zakazu, dopiero jak puszcze i dalej przesuwa to już się przesuwa. Dodatkowo w Chrome zaznacza się na niebiesko obrazek maski w czasie przesuwania. Niestety JS nie jest moją mocną stroną, zwłaszcza zaawansowane opcje związane z zdarzeniami i nietypowymi własnościami obiektów.
Go to the top of the page
+Quote Post
kamil4u
post
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Dodaj:
Kod
event.preventDefault();
w onmousedown w
Cytat
<img src="Kreator_pliki/maska.png" id="img_maska" style="position: absolute; z-index: 2;" onmousedown="OnMouseDown(event);">
lub to samo tyle, że zamist event samo 'e' w w funkcji OnMouseDown zaraz po
Kod
if(e==null)e=window.event;
- lepiej ten 2 sposób

--nie sprawdzałem czy zadziała--


--------------------
Go to the top of the page
+Quote Post
tomek_byd
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.08.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Metoda ta pomogła we wszystkich przeglądarkach z wyjątkiem IE. Próbowałem zaleźć sam rozwiązanie i e.returnValue=false; nie spełnia swojej roli a e.stop(); oraz e.stopPropagation(); uznawane są za błąd w IE.
Go to the top of the page
+Quote Post
kamil4u
post
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Niestety nie znam na tyle IE, a że korzystam z Linuksa nie mogę skorzystać z metody prób i błędów - jak będę miał możliwość to wyedytuję posta.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://www.webreference.com/js/column10/cancel.html


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tomek_byd
post
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 17.08.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat(erix @ 12.10.2009, 19:08:33 ) *

Niestety ta metoda też nic nie daje. IE nie wykazuje błędu ale efekt jest taki sam czyli po kliknięciu i przytrzymaniu następuje przez chwile przesunięcie a potem pokazuje się kursor zakazu i dopiero jak się puści klawisz obrazek się przesuwa. Żeby przerwać przesuwanie trzeba kliknąć jeszcze raz przycisk myszki a przecież tak to nie ma działać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 06:06