WheelEvent#
WheelEvent.initWheelEvent()#
Metoda initWheelEvent()
inicjuje dane zdarzenie wartościami przekazanymi do metody.
Składnia#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
wheelEvent.initWheelEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList deltaX, deltaY, deltaZ, deltaMode);
gdzie poszczególne człony oznaczają:
wheelEvent
- zdarzenie będące obiektem kontekstu.type
- typ zdarzenia w postaci łańcucha znakowego. Może to być dowolny łańcuch znakowy (nawet pusty).bubbles
- boolowskietrue
oznacza, że zdarzenie zezwala na obsługę fazy bąbelkowania. Boolowskiefalse
zabrania bąbelkowania.cancelable
- boolowskietrue
oznacza, że domyślne akcje dla zdarzenia mogą zostać anulowane. Boolowskiefalse
nie zezwala na przerywanie domyślnych akcji.view
- obiekt okna lub wartośćnull
.detail
- szczegółowe informacje w postaci liczby całkowitej.screenX
- współrzędna pozioma miejsca wystąpienia zdarzenia w stosunku do ekranu urządzenia.screenY
- współrzędna pionowa miejsca wystąpienia zdarzenia w stosunku do ekranu urządzenia.clientX
- współrzędna pozioma miejsca wystąpienia zdarzenia w stosunku do obszaru operacyjnego.clientY
- współrzędna pionowa miejsca wystąpienia zdarzenia w stosunku do obszaru operacyjnego.button
- liczba całkowita reprezentującą aktywność konkretnego przycisku w chwili wysłania zdarzenia.relatedTarget
- dodatkowy obiekt, który jest powiązany z nowym zdarzeniem.modifiersList
- łańcuch znakowy reprezentujący klawisz modyfikujący lub listę klawiszy modyfikujących oddzielonych spacjami, które uważane są za aktywne (np."Ctrl Alt Shift"
).deltaX
- liczba rzeczywista reprezentująca przewinięcie lub obrót kółka względem osi X.deltaY
- liczba rzeczywista reprezentująca przewinięcie lub obrót kółka względem osi YdeltaZ
- liczba rzeczywista reprezentująca przewinięcie lub obrót kółka względem osi ZdeltaMode
- liczba całkowita reprezentującą jednostkę pomiaru w układzie współrzędnych.
Na podstawie współrzędnych clientX
i clientY
implementacje mogą obliczać inne współrzędne, jak np. współrzędne celu lub inne rozszerzające właściwości zdarzeń myszy (np. pageX
czy pageY
).
Algorytm wywołania metody initWheelEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Wykonaj inicjowanie z typem
type
, bąbelkowaniembubbles
oraz anulowaniemcancelable
na obiekcie kontekstu, a następnie ustaw kolejno jego właściwośćview
naview
,detail
nadetail
,screenX
nascreenX
,screenY
nascreenY
,clientX
naclientX
,clientY
naclientY
,button
nabutton
,relatedTarget
narelatedTarget
,deltaX
nadeltaX
,deltaY
nadeltaY
,deltaZ
nadeltaZ
,deltaMode
nadeltaMode
oraz odpowiadające właściwości klawiszy modyfikujących wymienione wmodifiersList
(jeśli istnieją).
Inicjowanie zdarzeń metodą initWheelEvent()
jest obowiązkowe w przypadku niezaufanych zdarzeń, przed ich wysłaniem za pomocą metody EventTarget.dispatchEvent()
, które utworzone zostały za pomocą polecenia Document.createEvent()
. Zdarzenia tworzone za pomocą konstruktora new WheelEvent()
, i pochodnych, są inicjowane automatycznie. Także zaufane zdarzenia są inicjowane automatycznie przez daną implementacje.
W ramach uzupełnienia warto przeanalizować wady i zalety poszczególnych poleceń odpowiedzialnych za tworzenie niezaufanych zdarzeń.
Jeśli metoda initWheelEvent()
jest wielokrotnie wywoływana przed wysłaniem zdarzenia, to pod uwagę brane jest ostatnie takie wywołanie. Jeśli metoda initWheelEvent()
zostanie wywołana w trakcie propagacji zdarzenia (np. przez jakiś uchwyt zdarzenia), to nie powoduje ona żadnego efektu i musi zostać natychmiastowo zakończona.
Ze względów bezpieczeństwa zdarzenia modyfikowane przy użyciu metody initWheelEvent()
muszą ustawiać wartość właściwości Event.isTrusted
na boolowskie false
.
Prosty przykład:
<script>
// Tworzymy nowe zdarzenie z domyślnymi wartościami
var wheelEvent = document.createEvent("WheelEvent");
document.write(wheelEvent); // [object WheelEvent]
document.write("<br>");
document.write(wheelEvent.type); // "" - pusty łańcuch
document.write("<br>");
document.write(wheelEvent.bubbles); // false
document.write("<br>");
document.write(wheelEvent.cancelable); // false
document.write("<br>");
document.write(wheelEvent.view); // null
document.write("<br>");
document.write(wheelEvent.detail); // 0
document.write("<br>");
document.write(wheelEvent.screenX); // 0
document.write("<br>");
document.write(wheelEvent.screenY); // 0
document.write("<br>");
document.write(wheelEvent.clientX); // 0
document.write("<br>");
document.write(wheelEvent.clientY); // 0
document.write("<br>");
document.write(wheelEvent.altKey); // false
document.write("<br>");
document.write(wheelEvent.ctrlKey); // false
document.write("<br>");
document.write(wheelEvent.metaKey); // false
document.write("<br>");
document.write(wheelEvent.shiftKey); // false
document.write("<br>");
document.write(wheelEvent.button); // 0
document.write("<br>");
document.write(wheelEvent.buttons); // 0
document.write("<br>");
document.write(wheelEvent.relatedTarget); // null
document.write("<br>");
document.write(wheelEvent.deltaX); // 0
document.write("<br>");
document.write(wheelEvent.deltaY); // 0
document.write("<br>");
document.write(wheelEvent.deltaZ); // 0
document.write("<br>");
document.write(wheelEvent.deltaMode); // 0
document.write("<br>");
document.write(wheelEvent.defaultPrevented); // false
document.write("<br>");
document.write(wheelEvent.isTrusted); // false
document.write("<br>");
document.write(wheelEvent.eventPhase); // 0
document.write("<br>");
document.write(wheelEvent.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
document.write("<br>");
document.write(wheelEvent.currentTarget); // null
document.write("<br>");
document.write(wheelEvent.target); // null
document.write("<br><br>");
// Inicjujemy zdarzenie własnymi wartościami
wheelEvent.initWheelEvent("piesek", true, true, window,
69, 50, 100, 150,
200, 1, document.documentElement, "Alt Control Shift Meta",
5.1, 10.2, 15.3, 2)
document.write(wheelEvent); // [object WheelEvent]
document.write("<br>");
document.write(wheelEvent.type); // piesek
document.write("<br>");
document.write(wheelEvent.bubbles); // true
document.write("<br>");
document.write(wheelEvent.cancelable); // true
document.write("<br>");
document.write(wheelEvent.view); // [object Window]
document.write("<br>");
document.write(wheelEvent.detail); // 69
document.write("<br>");
document.write(wheelEvent.screenX); // 50
document.write("<br>");
document.write(wheelEvent.screenY); // 100
document.write("<br>");
document.write(wheelEvent.clientX); // 150
document.write("<br>");
document.write(wheelEvent.clientY); // 200
document.write("<br>");
document.write(wheelEvent.altKey); // true
document.write("<br>");
document.write(wheelEvent.ctrlKey); // true
document.write("<br>");
document.write(wheelEvent.metaKey); // true
document.write("<br>");
document.write(wheelEvent.shiftKey); // true
document.write("<br>");
document.write(wheelEvent.button); // 1
document.write("<br>");
document.write(wheelEvent.buttons); // 7
document.write("<br>");
document.write(wheelEvent.relatedTarget); // [object HTMLHtmlElement]
document.write("<br>");
document.write(wheelEvent.deltaX); // 5.1
document.write("<br>");
document.write(wheelEvent.deltaY); // 10.2
document.write("<br>");
document.write(wheelEvent.deltaZ); // 15.3
document.write("<br>");
document.write(wheelEvent.deltaMode); // 2
document.write("<br>");
document.write(wheelEvent.defaultPrevented); // false
document.write("<br>");
document.write(wheelEvent.isTrusted); // false
document.write("<br>");
document.write(wheelEvent.eventPhase); // 0
document.write("<br>");
document.write(wheelEvent.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
document.write("<br>");
document.write(wheelEvent.currentTarget); // null
document.write("<br>");
document.write(wheelEvent.target); // null
</script>
Metodę initWheelEvent()
pozostawiono ze względu na polecenie Document.createEvent()
. Warto nadmienić, że po zakończeniu obsługi wszystkich faz zdarzenia może ono zostać ponownie wysłane. Dzięki metodzie initWheelEvent()
można zmienić jego podstawowe parametry, co byłoby niemożliwe przy wykorzystaniu właściwości zdarzeń, ponieważ są one tylko do odczytu.
Na chwilę obecną jedynie w przeglądarce IE11 wszystko działa prawidłowo. Firefox nie obsługuje polecenia Document.createEvent("WheelEvent")
, Chrome z kolei obsługuje, ale nie implementuje metody initWheelEvent()
.
Interfejs Web IDL#
void initWheelEvent(DOMString type, boolean bubbles, boolean cancelable, Window? view, long detail, long screenX, long screenY, long clientX, long clientY, short button, EventTarget? relatedTarget, DOMString modifiersList double deltaX, double deltaY, double deltaZ, unsigned long deltaMode);