Event erkennt nicht clipping by Opera
flashnfantasy
- javascript
0 wahsaga0 flashnfantasy0 wahsaga
0 molily0 molily
Das Problem betrifft nur den Opera-Browser.
Ich habe eine Art Bild-Lupe erstellt.
Zu sehen ist ein Ausschnitt aus dem Bild in einer DIV.
Geht man mit dem Mauszeiger über das Bild, dann fängt ein EventHandler diese Bewegung ab und bewegt das Bild mit. So wirkt es, als könnte man auf dem Bild mitscrollen.
Jetzt die Besonderheit - man kann mit Mausklick den Ausschnitt fixieren. Die Daten für den Ausschnitt werden gespeichert in einem Formular, man kann das Ganze per Submit an den Server schicken, und der berechnet den Auschnitt mittels PHP.
Alles klappt, bei Opera, IE und Firefox bis auf...
Wenn ich beim Opera den Bereich fixiere und aus dem sichtbaren Bereich rausgehe, mich aber über dem nichtsichtbaren (durch Clipping) Bereich bewege, dann fängt das Bild die Maus-Klicks weiterhin ab.
Dadurch kann ich zB nicht den Submit-Button ansprechen.
Durch den Script kriege ich aber zB mit, das der Mausklick ausserhalb des Bildes ist, also würde ich den Event gerne an den Originalempfänger schicken.
Zwei Fragen:
hi,
Wenn ich beim Opera den Bereich fixiere und aus dem sichtbaren Bereich rausgehe, mich aber über dem nichtsichtbaren (durch Clipping) Bereich bewege, dann fängt das Bild die Maus-Klicks weiterhin ab.
ja, das problem kenne ich, ist nicht auf bilder beschränkt, sondern allgemein auf ge-clip-te elemente.
opera scheint clip eher so umzusetzen, dass es das element außerhalb des sichtbaren bereiches eher als "transparent" behandelt - aber halt als immer noch "da", so dass er aus z-index-sicht über anderen elementen liegt, und diese keine klicks mehr empfangen können, nicht gehovert werden, etc.
eindeutig ein bug.
Durch den Script kriege ich aber zB mit, das der Mausklick ausserhalb des Bildes ist, also würde ich den Event gerne an den Originalempfänger schicken.
dazu müsstest du aber erst mal ermitteln, welches element sich an der stelle unter dem bild befindet - das würde m.E. in eine fiese bastelei ausarten.
- wie kann ich beim Opera verhindern, daß der nichtsichtbare Teil des Bildes den Event abfängt ?
m.E. gar nicht, s.o.
da hilft nur warten, bis opera den bug fixt. (ob er schon gemeldet ist, habe ich damals nicht nachgeschaut, ging nur um eine spielerei, die ich daraufhin wieder verworfen habe. ich gehe aber davon aus, dass der auch schon anderen leuten aufgefallen sein dürfte.)
- und falls das nicht geht, wie reiche ich den Event weiter ?
anderer vorschlag: verzichte auf clip.
wenn es nur um ein bild geht, sollte sich dieses doch als hintergrundbild eines anderen elementes einsetzen lassen - beispielsweise ein absolut positionierter div mit bestimmten maßen.
wenn du in diesem jetzt die background-position des hintergrundbildes änderst, solltest du einen ähnlichen effekt wie mit clip auf dem bild erreichen können - ohne den störenden nebeneffekt, weil der div nur die events abfangen wird, die auch wirklich auf ihm stattfinden.
wäre das eine für dein vorhaben praktikable alternative?
gruß,
wahsaga
Auf das Clipping will ich nicht verzichten - Hintergrund ist eigentlich, das ich auf Parties Leute photographiere, die dann für gewöhnlich dann bei mir auch ein Profil anlegen.
Nun haben die ein Bild in der Party-Galerie und kriegen es nicht gebacken, einen Auschnitt dieses Bildes in das Profil zu überstellen.
Da es im IE funktioniert (und der im allgemeinen genutzt wird) ist das eher Kosmetik.
Mein WorkAround ist:
sobald ich merke, daß die Maus über den sichtbaren Bereich geht, lösche ich das Event mouseDown.
Mit Mousemove alleine muß ich jetzt feststellen, wann man wieder den 'interessanten Bereich' betritt und den Event wieder zuschalten.
Das sollte klappen, denke ich.
hi,
Auf das Clipping will ich nicht verzichten
mein vorschlag bedeutete ja auch nicht, auf den _effekt_ zu verzichten - sondern ihn statt mit clip anders zu realisieren.
gruß,
wahsaga
OK,
Werde mal schauen, was ich mit Hintergrundbildern bewirken kann...
gruß,
FlashNFantasy
Hallo,
Durch den Script kriege ich aber zB mit, das der Mausklick ausserhalb des Bildes ist, also würde ich den Event gerne an den Originalempfänger schicken.
dazu müsstest du aber erst mal ermitteln, welches element sich an der stelle unter dem bild befindet - das würde m.E. in eine fiese bastelei ausarten.
Nicht notwendigerweise. Alle Events steigen irgendwann zum document-Knoten auf. Wenn man anhand der Event-Daten feststellen kann, ob der Klick relevant ist (und srcElement bzw. target stimmen), könnte man fallweise die Funktion aufrufen, die den Klick verarbeitet. Das Event-Objekt kann man ihr einfach übergeben.
Mathias
hi,
dazu müsstest du aber erst mal ermitteln, welches element sich an der stelle unter dem bild befindet - das würde m.E. in eine fiese bastelei ausarten.
Nicht notwendigerweise. Alle Events steigen irgendwann zum document-Knoten auf.
ja, das ist klar.
nur ist ja hier, wenn ich das richtig interpretiert habe, beispielsweise gefragt, dass auf einen link/submitbutton geklickt werden soll, der vom bild (trotz clipping) überlagert wird.
Wenn man anhand der Event-Daten feststellen kann, ob der Klick relevant ist (und srcElement bzw. target stimmen), könnte man fallweise die Funktion aufrufen, die den Klick verarbeitet.
den link/button wirst du aber nicht als sourceelement des events kriegen können, wenn er von dem bild verdeckt wird - oder denke ich da falsch?
deshalb ja meine befürchtung, dass man dann erst mal _ermitteln_ müsste, welches element denn nun an der stelle unter dem bild liegt, auf die geklickt wurde - würde m.E. in wildes rumrechnen mit koordinaten ausarten.
gruß,
wahsaga
Hallo,
nur ist ja hier, wenn ich das richtig interpretiert habe, beispielsweise gefragt, dass auf einen link/submitbutton geklickt werden soll, der vom bild (trotz clipping) überlagert wird.
Ähm, selbstverständlich, da hatte ich flashnfantasy falsch verstanden bzw. habe es von der falschen Seite gesehen.
den link/button wirst du aber nicht als sourceelement des events kriegen können, wenn er von dem bild verdeckt wird - oder denke ich da falsch?
Nein, mir fällt auch keine sinnvolle Möglichkeit ein.
Mathias
Hallo,
- wie kann ich beim Opera verhindern, daß der nichtsichtbare Teil des Bildes den Event abfängt ?
m.E. gar nicht
Wenn ich richtig beobachte, hilft es bereits, die Elemente, die vom transparenten Bild überlappt werden, mit höherem z-index ebenfalls absolut zu positionieren (Opera 7.54).
Die Lösung mit background-position ist wahrscheinlich unkomplizierter, ich habe sie aber noch nicht ausprobiert.
Mathias