Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JS][jQuery], Odczytywanie id jednego diva podczas przesuwania kursorem innego diva
stud3nt
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 7
Dołączył: 6.01.2012

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


Mam dwa divy. Napisałem już prosty skrypt, który umożliwia przesuwanie obydwu w pionie i poziomie. Działa na zasadzie: najeżdżasz na div, wciskasz i trzymając przycisk myszy przeciągasz. Puszczając przycisk myszy, upuszczasz. Działa to dobrze problemu z tym akurat nie ma.

Pytanie jest takie: czy jest metoda/sposób, aby odczytać id div nr 2 (czy innego dowolnego elementu) w momencie, gdy 'trzymając' i przesuwając div nr 1 najeżdżam na 2 kursorem? Wszelkie metody, jakich próbowałem, dają mi odczyt diva nr 1 (logiczne, on jest na wierzchu...). Da się to jakoś ominąć?

W zamierzeniu, chcę stworzyć konfigurowalną listę z możliwością przeciągania i upuszczania elementów. Są takie skrypty, ale po pierwsze - uczę się i chcę to zrobić sam, a po drugie - są to wielkie, kilkunastokilobajtowe kobyły w czystym JS.

Ten post edytował stud3nt 31.08.2012, 16:18:03
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%)
-----


Nareszcie ktoś się uczy i nie chce gotowego skryptu (IMG:style_emoticons/default/smile.gif) - powodzenia!

Ale dostaniesz gotowy skrypt, bo tak łatwiej wyjaśnić:
Kod
<div id="test"></div>
<div id="kontener">kontener1</div>

<style>
#test{ background-color: red; cursor: pointer; width: 100px; height: 100px; position: absolute; }

#kontener{ background-color: green; width: 200px; height: 200px; position: absolute; top: 100px; left: 300px; }

</style>

<script>
    function dragDrop( E,K,e){
        var x,y,minX;
        if(document.last)
            document.last.style.zIndex = 1;
        (document.last = E).style.zIndex = 10;
        e = e || event;
        e.stopPropagation();
        e.preventDefault();
        x = ~~(e.layerX || e.offsetX);
        y = ~~(e.layerY || e.offsetY);
        minX = -( 0.8 * parseInt(E.style.width) );  

        document.onmouseup = function(e){
            this.onmousemove = null;
        }

        document.onmousemove = function(e){
            e = e || event;
            e.preventDefault();
            E.style.left = (e.clientX - x) +'px';
            E.style.top = (e.clientY - y) +'px';


            if( (e.clientX - x) > K.offsetLeft &&
                (e.clientX - x) < (K.offsetLeft + K.offsetWidth) &&
                (e.clientY - y) > K.offsetTop &&
                (e.clientY - y) < (K.offsetTop + K.offsetHeight) ){
                E.innerHTML = 'tak';
            } else {
                E.innerHTML = 'nie';
            }
            return false;
        }
    }

document.getElementById('test').onmousedown = function(e){ dragDrop( this,
document.getElementById('kontener'), e  ); };

</script>


Pytaj o co chcesz, bo kod na pierwszy rzut oka może okazać się trudny.
Go to the top of the page
+Quote Post
stud3nt
post
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 7
Dołączył: 6.01.2012

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


Bardzo dziękuję. Widzę tu przynajmniej dwie funkcje, o których istnieniu nie miałem do tej pory pojęcia, a które, po lekturze manuala, bardzo mi się w przyszłości przydadzą. Po uważniejszej lekturze, wyciągnę pewnie jeszcze więcej.

Takie sytuacje uświadamiają człowiekowi, jak mało jeszcze wie i potrafi.
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%)
-----


Odnośnie samego skryptu drag&drop to tu chyba najlepsze wyjaśnienie: http://forum.webhelp.pl/javascript/warstwa...nie-t51511.html - pamiętam jak kiedyś sam dokładnie to analizowałem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zegarek84
post
Post #5





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(stud3nt @ 31.08.2012, 17:15:48 ) *
Pytanie jest takie: czy jest metoda/sposób, aby odczytać id div nr 2 (czy innego dowolnego elementu) w momencie, gdy 'trzymając' i przesuwając div nr 1 najeżdżam na 2 kursorem? Wszelkie metody, jakich próbowałem, dają mi odczyt diva nr 1 (logiczne, on jest na wierzchu...). Da się to jakoś ominąć?

jest na to kilka sposobów...

jeśli kontenerów do upuszczania miałbyś wiele i dodatkowo element upuszczany koniecznie chcesz trzymać pod myszką, to musisz sprawdzać pozycję myszki w stosunku do tamtych kontenerów...

inny prosty sposób to lekkie przesunięcie upuszczanego elementu w stosunku do myszki tak by nie przysłaniał elementów pod myszką, wtedy bez problemu otrzymasz dostęp do elementów znajdujących się niżej... oczywiście jeśli masz wiele kontenerów optymalnie by było nie podpinać zdarzenia pod każdy kontener do upuszczania a pod jakiś nadrzędny element i skorzystać np. z .delegate w jQuery (odpowiednik .live ale lepszy - nie chce mi się rozpisywać)... i tu dobrze by było, gdybyś rozumiał propagację zdarzeń itd., dobrze by było, gdybyś się zapoznał np. z tym blogiem by rozumieć jak to jest rozwiązane w czystym JS (a potem byś korzystał np. z jQuery chyba, że wolałbyś pisać swoje rozwiązania) http://www.quirksmode.org/js/contents.html#events

poza tym przeczytaj o drag and drop w HTML5:
Native HTML5 Drag and Drop
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 07:52