blog.gruszka.info

21 marca, 2007

Rusz swoim oknem

Napisane w: JS/DOM, Komputery/Internet, Techblog (0) Otagowane: , , , ,

Wielu z was pewnie nie raz potrzebowało możliwości przesuwania określonych obiektów na stworzonych przez siebie stronach. Jako, że staram się do rozwiązań niektórych problemów dojść sam, stworzyłem prostą bibliotekę, która nam to umożliwi :)

Pierwszą rzeczą jaką się zajmiemy będzie utworzenie pliku libWindow.js

Zadeklarujmy dwie zmienne, odpowiedzialne będą one za przechowywanie aktualnej pozycji kursora naszej myszki:

var tempX = 0;
var tempY = 0;

Aby większość z przeglądarek obsługiwała przesuwanie naszych okienek, dodajemy:

var IE = document.all ? true : false;
if (!IE) document.captureEvents(Event.MOUSEMOVE);

Zbudujmy teraz funkcję odpowiedzialną za inicjalizację przesuwania naszego okna:

function initialize(myWindow) {
    selectedWindow = myWindow;
    document.onmousemove = move_object;
}

oraz funkcję odpowiedzialną za wyłączenie zmiany pozycji naszego obiektu:

function finish() {
    document.onmousemove = "";
    tempX = 0;
    tempY = 0;
}

Kolejna funkcja będzie sercem naszej biblioteki i to ona odpowiedzialna będzie za przesuwanie odpowiednich elementów na naszej stronie:

function move_object(e) {
    if (IE) {
        tempX = event.clientX + document.body.scrollLeft - 5;
        tempY = event.clientY + document.body.scrollTop - 5;
    } else {
        tempX = e.pageX
        tempY = e.pageY
    }
    selectedWindow.style.left=tempX;
    selectedWindow.style.top=tempY;
}

Mając gotową bibliotekę JavaScript, stwórzmy odpowiedni plik HTML oraz dodajmy do niego nasz obiekt jaki zamierzamy przesuwać:

Title

I can move my window! I can move my window! I can move my window! I can move my window!

Zdarzenie onMouseDown odpowiedzialne jest za obsługę akcji przyciśnięcia przycisku myszy na naszym obiekcie, zaś zdarzenie onMouseUp za jego zwolnienie.

Do naszej strony dodajmy jeszcze odpowiedni plik z arkuszami stylów - window.css:

.window {
    position:absolute;
    height: 200px;
    width: 200px;
    border: 1px solid #000;
    background-color: yellow;
    opacity: 0.6;
    -moz-user-select: none;
}

.window h1 {
    margin: 0;
    padding: 0;
    width: 100%;
    font-size: 10px;
    background-color: green;
}

Ufff. Skończyliśmy :) Tym samym możemy przetestować działanie naszej nowo stworzonej biblioteki - przykłady.

Pokazany przykład nie jest doskonały, ponieważ po kliknięciu w dowolnym miejscu określonego obiektu jego lewy górny róg przesuwa się do aktualnej pozycji naszej myszki, ale bądź co bądź zamierzony efekt osiągnęliśmy.

Komentarze do wpisu "Rusz swoim oknem":

1 | D4rky

21 marca 2007, 21:20:14

favicon

jquery ma biblioteke od takich bajerow ;)

2 | Błażej `snipe` Gruszka

21 marca 2007, 21:21:09

@D4rky: wiem :D ale chciałem zrobić to sam :)

3 | D4rky

21 marca 2007, 21:22:29

favicon

Ależ ja rozumiem Gruszecko (sorry, ta grucha w logo mnie tak sympatycznie do gruszek nastawiła), tylko mówię ;) A żeby ruszało jak mówisz, to trzeba chyba najpierw wyhaczyć w którym miejscu diva jest robiony mouseover, ale nie znam się na JS ;)

4 | Błażej `snipe` Gruszka

21 marca 2007, 21:29:17

hehe, spoko też lubie te owoce :D co do tego ruszania, to trzeba od położenia kursora odjąć wartość początkową okna i uzyskaną wartość dodać dla tempX i tempY :) przynajmniej tak narazie sobie wykombinowałem ;)

5 | Albi

23 marca 2007, 23:04:18

Mały bug, kiedy nacisnę na środek okna, ono przeskakuje mi narożnikiem w stronę kursora. Trochę to psuje efekt ;).

6 | D4rky

23 marca 2007, 23:50:38

favicon

Albi – „Pokazany przykład nie jest doskonały, ponieważ po kliknięciu w dowolnym miejscu określonego obiektu jego lewy górny róg przesuwa się do aktualnej pozycji naszej myszki, ale bądź co bądź zamierzony efekt osiągnęliśmy.” :>

7 | Albi

23 marca 2007, 23:51:26

Hym, fakt… Mimo wszystko można poprawić ;)

8 | Błażej `snipe` Gruszka

24 marca 2007, 13:08:14

poprawie to, więc powinno być gotowe jutro wieczorkiem :)

Dodaj komentarz

Markdown ( szczegółowy opis znaczników ):
*em* | 1. lista 2. numerowana | * lista wypunktowana | _strong_ | [link](http://) | | > cytat.

Foto

Flickr

O blogu

blog.gruszka.info O wszystkim i o niczym, lub inaczej, o tym o czym mam akurat ochotę napisać :)