event für js-funktion ändern
paco
- javascript
0 Paco0 Paco
0 Matti Mäkitalo
Hallo allerseits,
habe eine Anfängerfrage. Ich habe folgendes (freie) skript gefunden, dass bei Mausklick ein kleines Feuerwerk an der Stelle des Mauszeigers produziert:
var fireworks={
timeout: 40, // = fireworks speed, larger number = slower speed (suggested 50)
sparksAflyin : 0,
totalSparks : 0,
sparksOn : 1,
iecompattest:function (){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
},
mouseDown:function (e) {
var f=fireworks, e=e? e : window.event;
if (f.sparksOn) {
f.mousex = typeof e.pageX=='number'? e.pageX : e.x+f.iecompattest().scrollLeft;
f.mousey = typeof e.pageY=='number'? e.pageY : e.y+f.iecompattest().scrollTop;
if (!f.sparksAflyin) {
f.sparksAflyin = 1;
f.totalSparks = 0;
for(var i = 0; i < 10; i++)
document.getElementById('sDiv'+i).style.visibility = 'visible',
f.moveTo(i,0);
}
}
},
moveTo:function (i,j){
var f=fireworks, j=j;
if (j < f['a'+i]['x'].length) {
var tempx = f['a'+i]['x'][j]+f.mousex,
tempy = f['a'+i]['y'][j++]+f.mousey,
ww=window.innerWidth?window.innerWidth:f.iecompattest().offsetWidth,
wh=window.innerHeight?window.innerHeight:f.iecompattest().offsetHeight,
px=typeof pageXOffset=='number'?pageXOffset:f.iecompattest().scrollLeft,
py=typeof pageYOffset=='number'?pageYOffset:f.iecompattest().scrollTop;
tempx = tempx+30 > ww+px? ww+px-30 : tempx;
tempy = tempy+30 > wh+py? wh+py-30 : tempy;
document.getElementById('sDiv'+i).style.left = tempx+'px';
document.getElementById('sDiv'+i).style.top = tempy+'px';
setTimeout(function(){f.moveTo(i,j);}, f.timeout)
}
else {
document.getElementById('sDiv'+i).style.visibility = '';
f.totalSparks++;
}
if (f.totalSparks == 10) {
f.sparksAflyin = 0;
f.totalSparks = 0;
}
},
a0:{x:[20,20,10,0,0,0,0,0,0,0,0,0],
y:[-20,-40,-60,-80,-60,-40,-20,0,20,40,60,80]},
a1:{x:[20,20,17,36,60,78,90,92,93,98,108,120,133,152,181],
y:[-20,-20,-33,-38,-38,-27,-2,25,51,84,113,141,162,212,253]},
a2:{x:[20,20,2,3,4,5,6,7,8,9,10,12,13,15,18],
y:[-20,-20,-33,-38,-38,-27,-2,25,51,84,113,141,162,212,253]},
a3:{x:[-20,-20,-2,-1,7,10,18,35,60,102,94,94,93,97,108,111,117,127],
y:[-20,-25,-64,-89,-104,-150,-173,-197,-213,-199,-151,-101,-66,-17,27,87,140,189]},
a4:{x:[-20,-20,-10,-39,-30,-69,-64,-138,-154,-200,-181,-209,-191,-207,-203,-213,-202,-221,-211],
y:[-20,-20,-28,-51,-79,-100,-135,-154,-193,-183,-149,-134,-89,-60,8,51,107,157,201]},
a5:{x:[-20,-29,-51,-72,-105,-133,-164,-189,-209,-229,-247,-270,-279,-282,-283,-283,-285,-286,-288],
y:[-20,-55,-86,-116,-154,-183,-205,-217,-217,-198,-169,-120,-44,-8,40,87,144,190,248]},
a6:{x:[-20,-20,-7,14,44,79,143,186,217,226,234,244,250,259,265,274],
y:[-20,-21,-72,-113,-139,-166,-188,-181,-126,-68,-3,54,134,187,215,257]},
a7:{x:[20,20,-3,-9,-13,-27,-33,-44,-54,-66,-77,-95,-107,-136,-150,-160,-164,-168,-171,-172,-172,-176,-175],
y:[-20,-26,-43,-63,-89,-116,-145,-169,-201,-222,-240,-253,-254,-245,-220,-195,-160,-124,-81,-53,-26,19,68]},
a8:{x:[-20,20,-35,39,0,45,-1,24,-15,14,-20,35,-18,38,-11,16,49,64,81,93,100,103,109],
y:[-20,-20,-32,-42,-62,-76,-89,-107,-132,-147,-173,-180,-192,-209,-236,-193,-119,-73,-24,51,95,130,188]},
a9:{x:[-20,-51,-89,-110,-165,-191,-228,-240,-259,-271,-277,-281,-287],
y:[-20,-20,-35,-37,-34,-16,10,47,105,150,189,227,273]}
};
// document.onmousedown = fireworks.mouseDown;
hoffe das war nicht zu lang..
Das möchte ich jetzt so umbauen, dass ich es bei einem anderen click-event _einmalig_ abfeuern kann.
Ich versteh aber leider zuwenig von javascript.. Wenn ich die letzte Zeile bei meinem onClick aufrufe, funktioniert das skript wie ursprünglich geplant und wird dauerhaft bei jedem onmousedown ausgeführt.
Wenn ich in meinem click-event nur die Funktion fireworks.mousedown() aufrufe fehlt dem skript die variable e (Zeile 9, e is undefined)
wenn ich diese vorher (wie innerhalb des skripts) mit
var e=e? e : window.event;
initialisiere ist sie immer noch undefined.
Weiß jemand auf die schnelle rat?
dankeschön,
Paco
ich weiß, dass solche fragen a la "hier ist mein code, bitte macht ihr das alles für mich" recht unverschämt sind und normalerweise mach ich das auch nicht, weil ich ganz gern verstehe was ich da tu. Ich brauch javascript nur echt selten, bin jQuery-verwöhnt und kann da jetzt auch nicht so arg viel Zeit reinstecken.
Super wär ein kleiner Hinweis, ich tu mich schwer mit diesen Funktionen die sich selber aufrufen und weiß nicht wie ich e vorher definieren kann. Soll ja wohl das klick-event an einer bestimmten Bildschirmposition sein..
Hm. War das jetzt so eine schlimme Frage, dass nicht mal ein genervtes "google ist dein freund", rtfm oder "benutz die sufu" kommt?
Hoffentlich nicht..
Hi,
mouseDown:function (e) {
var f=fireworks, e=e? e : window.event;
if (f.sparksOn) {
f.mousex = typeof e.pageX=='number'? e.pageX : e.x+f.iecompattest().scrollLeft;
f.mousey = typeof e.pageY=='number'? e.pageY : e.y+f.iecompattest().scrollTop;
if (!f.sparksAflyin) {
f.sparksAflyin = 1;
f.totalSparks = 0;
for(var i = 0; i < 10; i++)
document.getElementById('sDiv'+i).style.visibility = 'visible',
f.moveTo(i,0);
}
}
> Wenn ich in meinem click-event nur die Funktion fireworks.mousedown() aufrufe fehlt dem skript die variable e (Zeile 9, e is undefined)
>
> wenn ich diese vorher (wie innerhalb des skripts) mit
> `var e=e? e : window.event;`{:.language-javascript}
> initialisiere ist sie immer noch undefined.
wenn du die Funktion fireworks.mousedown als Event-Handler zuweist, dann wird diese automatisch mit einem Event-Objekt aufgerufen. Für den Internet-Explorer kannst du das aktuelle Event über window.event abfragen, so wie du es <http://de.selfhtml.org/javascript/objekte/event.htm@title=in SelfHTML> nachlesen kannst.
In deiner Funktion benutzt du die Koordinaten, bei denen das Event abgefeuert wurde. window.event sollte IMHO, wenn du es mit einem nicht-IE aufrufst, leer sein.
An die Mauskoordinaten kommst du meines Wissens nur im Rahmen eines Events. Wenn du also irgendeinem event-Handler eine eigene Funktion zuweist, in dessen Rahmen du fireworks.mousedown aufrufst, dann ruf diese Funktion mit dem Event auf, welches du aus dem Kontext deines Event-Handlers hast.
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)