Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: "oscylacja" eventow

Witam

Chciałem się zapytać jak rozwiązuje się w JS i/lub w JQuery problem oscylacji eventów.

Chodzi mi o taką sytuację: mam div1 z podpiętym mousemove - w jego obsłudze zasłaniam div1 innym divem (div2) wiec div1 generuje mouseout który ukrywa div2 wiec odsłania div1 który generuje mousemove i zaczyna się oscylacja eventow .....

W sytuacji gdy div2 całkowicie pokrywa div1 sprawa jest relatywnie prosta - możemy obsłużyć zdarzenia div2, komplikuje się jednak gdy div2 nachodzi częściowo na div1 i kursor może być w nim, poza nim lub na skraju.

W delphi mam kilka patentów na rozwiązanie tego problemu ale nauczyłem się już że niektóre rozwiązania są przenośne a niektóre robi się zupełnie inaczej - czasem w sposób całkowicie mnie zaskakujący ;)

konto usunięte

Temat: "oscylacja" eventow

usun event z elementow, ktore powinny byc "nietykalne"? Wtedy nie bedziesz musial sie tym przejmowac.
Nie wiem dojladnie co robisz, ale moze opcja byc wrzucenie na stronie przezroczystego diva, ktory pokryje wszystko, blokujac elementy a nad tym divem dopiero bedzie twoja wiadomosc, button czy co chcesz tam wrzucic.
Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: "oscylacja" eventow

Andrzej W.:
usun event z elementow, ktore powinny byc "nietykalne"? Wtedy nie bedziesz musial sie tym przejmowac.

Ale usuwając tracę jako obiekt kontrolę nad tym co się dzieje z kursorem nade mną. A w takim razie to ten obiekt który jest nade mną musi mi je ponownie przywrócić. A co jeśli, jak w drugim przypadku obiekt jest nade mną częściowo ale kursor też ? I userowi zadrży ręka?

Ja nie pytam jak to zrobić, nieraz z podobnymi problemami walczyłem pisząc aplikacje, ja się pytam czy jest jakaś, nazwijmy to szkoła i jakieś wsparcie w jquery - obawiam się że pójdę w stronę jakiś masakrycznych kodów do zarządzania zdarzeniami, mapowania pozycji obiektów itp itd a potem się
okaże że to się robi 5 liniami kodu - już miałem kilka takich refaktoringów - na razie to wprawki więc nie ma problemu ale w kolejce czeka duża aplikacja i nie chciał bym aby kiedyś jakiś spec zajrzał do kodu i pęk ze śmiechu - ostatnio rozwiązania które "tylko" działają mnie jakoś odpychają ;)

Próbuje się bawić z tego typu efektami : http://metro-webdesign.info/ i mam problem z cyrkulacją (o to właściwsze słowo niż oscylacja) eventów

Być może warstwa nad divem będzie jakąś drogą - muszę się pobawić.

konto usunięte

Temat: "oscylacja" eventow

Masz gdzies live przyklad tego co robisz? Mysle ze latwiej bedzie zrozumiec co sie dzieje...
Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: "oscylacja" eventow

Andrzej W.:
Masz gdzies live przyklad tego co robisz? Mysle ze latwiej bedzie zrozumiec co sie dzieje...


Na razie to są zabawy - powiedzmy taki przykład:

$('.ppanel').mousemove( function(){
var ofs = $(this).position();
var x = ofs.top +$(this).outerHeight() ;
var wd= $(this).outerWidth()-20;
var nd=$(this).prev('div');
var hx= $(nd).html();
$('#dcaption').show().css({ 'left': ofs.left , 'top': x }).css({ 'width': wd }).html(hx);

}).mouseout( function(){ $('#dcaption').hide() ;
});


do div ppanel przykleja od dołu div dcaption. I z tym nie ma problemu.
Ale jak dcaption wypozycjonuje na ppanel ( dcaption.top w 2/3 wysokości ppanel ) to jeśli "zasłoni" kursor zaczyna się cyrkulacja.
Nawiasem mówiąc jeśli $('#dcaption').show() na jakiś efekt animacji to się w ogóle zaczynają
jaja bez ładu i składu.

Proszę nie patrzeć na jakość samego kodu - to są takie wypociny na brudno ;)

Przy okazji, dlaczego fragment

var nd=$(this).prev('div');
var hx= $(nd).html();
działa a zapis
var hx=$(this).prev('div').html();
nie działa ?

Tomasz M.

Tomasz M. never go full
retard!

Temat: "oscylacja" eventow

Ja ostatnio przerzuciłęm się z eventami na...

http://reactive-extensions.github.io/RxJS/
https://github.com/Reactive-Extensions/RxJS

Pozwoliła ma rozwiązać wiele problemów w łątwy sposób no i po jQuery to chyba druga biblioteka, którą darzę wielkim szacunkiem ;)Ten post został edytowany przez Autora dnia 26.11.13 o godzinie 10:37

konto usunięte

Temat: "oscylacja" eventow

próbowałeś przed wywołaniem animacji używać .stop(true, true) ?
Artur Bilski

Artur Bilski Ruby on Rails &
Javascript Developer

Temat: "oscylacja" eventow

Pojawienie się div2 jest wyzwalane najechaniem na div1:

div1.onMouseOver = function() {
div2.show();
};


Natomiast gdy oba są już widoczne, ukrycie div2 zachodzi gdy zjedziemy z div1 i div2 jako całości:
div1.onMouseOut = div2.onMouseOut = function() {
if (!isMouseOver(div1) && !isMouseOver(div2)) {
div2.hide();
}
};


Powyżej to oczywiście pseudokod - ale implementacja w JS a tym bardziej jQuery nie powinna być trudna.Ten post został edytowany przez Autora dnia 01.12.13 o godzinie 17:59

Następna dyskusja:

DOSWIADCZONY, PRZY ORG.NAJW...




Wyślij zaproszenie do