pragmaMx Support Forum

pragmaMx => Coder und Bastlerecke => Thema gestartet von: Eismann1976 am 30 Dezember 2008, 16:22:07

Titel: Feuerwerk einbinden
Beitrag von: Eismann1976 am 30 Dezember 2008, 16:22:07
Hi,

ich wollt morgen wieder ein Feuerwerk einbinden. Das hab ich bisher immer per Hand über die Fusszeilen gemacht.

Das müßte man doch auch automatisieren können (ähnlich dem X-MAS Block) so das man das Script in einem Block unterbringt und diesen nur vom 31.12. (vielleicht sogar ab ner bestimmten Uhrzeit) bis zum 01.01. anzeigt. Fänd ich praktisch.

Stell ich mir das mal wieder zu leicht vor ?

Gruß Eismann

PS: Das Script sähe so aus:
<SCRIPT TYPE="text/javascript">
/**
  * You may use this code for free on any web page provided that
  * these comment lines and the following credit remain in the code.
  * Cross Browser Fireworks from http://www.javascript-fx.com
  */
/*************************************************/
if(!window.JSFX) JSFX=new Object();

if(!JSFX.createLayer)
{/*** Include Library Code ***/

var ns4 = document.layers;
var ie4 = document.all;
JSFX.objNo=0;

JSFX.getObjId = function(){return "JSFX_obj" + JSFX.objNo++;};

JSFX.createLayer = function(theHtml)
{
var layerId = JSFX.getObjId();

document.write(ns4 ? "<LAYER  NAME='"+layerId+"'>"+theHtml+"</LAYER>" :
   "<DIV id='"+layerId+"' style='position:absolute'>"+theHtml+"</DIV>" );

var el = document.getElementById ? document.getElementById(layerId) :
document.all ? document.all[layerId] :
  document.layers[layerId];

if(ns4)
el.style=el;

return el;
}
JSFX.fxLayer = function(theHtml)
{
if(theHtml == null) return;
this.el = JSFX.createLayer(theHtml);
}
var proto = JSFX.fxLayer.prototype

proto.moveTo     = function(x,y){this.el.style.left = x;this.el.style.top=y;}
proto.setBgColor = function(color) { this.el.style.backgroundColor = color; }
proto.clip       = function(x1,y1, x2,y2){ this.el.style.clip="rect("+y1+" "+x2+" "+y2+" "+x1+")"; }
if(ns4){
proto.clip = function(x1,y1, x2,y2){
this.el.style.clip.top =y1;this.el.style.clip.left =x1;
this.el.style.clip.bottom=y2;this.el.style.clip.right =x2;
}
proto.setBgColor=function(color) { this.el.bgColor = color; }
}
if(window.opera)
proto.setBgColor = function(color) { this.el.style.color = color==null?'transparent':color; }

if(window.innerWidth)
{
gX=function(){return innerWidth;};
gY=function(){return innerHeight;};
}
else
{
gX=function(){return document.body.clientWidth;};
gY=function(){return document.body.clientHeight;};
}

/*** Example extend class ***/
JSFX.fxLayer2 = function(theHtml)
{
this.superC = JSFX.fxLayer;
this.superC(theHtml + "C");
}
JSFX.fxLayer2.prototype = new JSFX.fxLayer;
}/*** End Library Code ***/

/*************************************************/

/*** Class Firework extends FxLayer ***/
JSFX.Firework = function(fwImages)
{
window[ this.id = JSFX.getObjId() ] = this;
this.imgId = "i" + this.id;
this.fwImages  = fwImages;
this.numImages = fwImages.length;
this.superC = JSFX.fxLayer;
this.superC("<img src='"+fwImages[0].src+"' name='"+this.imgId+"'>");

this.img = document.layers ? this.el.document.images[0] : document.images[this.imgId];
this.step = 0;
this.timerId = -1;
this.x = 0;
this.y = 0;
this.dx = 0;
this.dy = 0;
this.ay = 0.2;
this.state = "OFF";
}
JSFX.Firework.prototype = new JSFX.fxLayer;

JSFX.Firework.prototype.getMaxDy = function()
{
var ydiff = gY() - 130;
var dy    = 1;
var dist  = 0;
var ay    = this.ay;
while(dist<ydiff)
{
dist += dy;
dy+=ay;
}
return -dy;
}
JSFX.Firework.prototype.setFrame = function()
{
// this.img.src=this.fwName+"/"+this.step+".gif";
this.img.src=this.fwImages[ this.step ].src;
}
JSFX.Firework.prototype.animate = function()
{

if(this.state=="OFF")
{

this.step = 0;
this.x = -200;
this.y = -200;
this.moveTo(this.x, this.y);
this.setFrame();
if(Math.random() > .95)
{
this.x = (gX()-100)*Math.random();
this.y = (gY()-100)*Math.random();
this.moveTo(this.x, this.y);
this.state = "EXPLODE";
}
}
else if(this.state == "EXPLODE")
{
this.step++;
if(this.step < this.numImages)
this.setFrame();
else
this.state="OFF";
}
}
/*** END Class Firework***/

/*** Class FireworkDisplay extends Object ***/
JSFX.FireworkDisplay = function(n, fwImages, numImages)
{
window[ this.id = JSFX.getObjId() ] = this;
this.timerId = -1;
this.fireworks = new Array();
this.imgArray = new Array();
this.loadCount=0;
this.loadImages(fwImages, numImages);

for(var i=0 ; i<n ; i++)
this.fireworks[this.fireworks.length] = new JSFX.Firework(this.imgArray);
}
JSFX.FireworkDisplay.prototype.loadImages = function(fwName, numImages)
{
for(var i=0 ; i<numImages ; i++)
{
this.imgArray[i] = new Image();
this.imgArray[i].obj = this;
this.imgArray[i].onload = window[this.id].imageLoaded;
this.imgArray[i].src = fwName+"/"+i+".gif";
}
}
JSFX.FireworkDisplay.prototype.imageLoaded = function()
{
this.obj.loadCount++;
}

JSFX.FireworkDisplay.prototype.animate = function()
{
status = this.loadCount;
if(this.loadCount < this.imgArray.length)
return;

for(var i=0 ; i<this.fireworks.length ; i++)
this.fireworks[i].animate();
}
JSFX.FireworkDisplay.prototype.start = function()
{
if(this.timerId == -1)
{
this.state = "OFF";
this.timerId = setInterval("window."+this.id+".animate()", 40);
}

}
JSFX.FireworkDisplay.prototype.stop = function()
{
if(this.timerId != -1)
{
clearInterval(this.timerId);
this.timerId = -1;
for(var i=0 ; i<this.fireworks.length ; i++)
{
this.fireworks[i].moveTo(-100, -100);
this.fireworks[i].step = 0;;
this.fireworks[i].state = "OFF";
}
}
}
/*** END Class FireworkDisplay***/

JSFX.FWStart = function()
{
if(JSFX.FWLoad)JSFX.FWLoad();
myFW.start();
}
myFW = new JSFX.FireworkDisplay(num_fireworks=20, firework_images="fw01", num_frames=21);
JSFX.FWLoad=window.onload;
window.onload=JSFX.FWStart;

</SCRIPT>
Titel: Re: Feuerwerk einbinden
Beitrag von: reddragon am 30 Dezember 2008, 17:59:41
Andi hatte da mal was:
http://www.pragmamx.org/Forum-topic-27896-start-msg181032.html#msg181032

Ein Jahreswechsel dazwischen scheint ja Sinnvoll ;)
Titel: Re: Feuerwerk einbinden
Beitrag von: Eismann1976 am 30 Dezember 2008, 18:35:15
Joa, die Variante hab ich fürs Schneescript. Das ist ja ne *.js Datei. Das Feuerwerk hab ich so nicht anslaufen bekommen.   :red:
Titel: Re: Feuerwerk einbinden
Beitrag von: Eismann1976 am 30 Dezember 2008, 22:32:17
Sorry Doppelpost edit ging nichtmehr

Ich hab das Script jetzt mal in eine feuerwerk.js gepackt. Ruf ich das ganze per

<script type="text/javascript" src="script/feuerwerk.js"></script>

in den Einstellungen / Fusszeile auf, funktioniert es wie gewünscht. Binde ich das ganze per

/* Beginn der Anzeige Feuerwerk (Datum, ohne Jahr) */
$beginn = '31.12.';

/* Ende der Anzeige (Datum, ohne Jahr) */
$ende = '1.1.';

/* nur Startseite */
if (defined('MX_HOME_FILE')) {
/* Berechnung / Bedingung */
if ((time() >= strtotime($beginn . date('Y')) && time() <= mktime(0, 0, 0, 12, 31, date('Y')))
|| (time() >= mktime(0, 0, 0, 1, 1, date('Y')) && (time() <= strtotime($ende . date('Y'))))) {

/* das Javascript... */
pmxHeader::add('<script type="text/javascript" src="script/feuerwerk.js"></script>');

}
}


anstatt des Schneescripts in die my_header.php ein kommt nix. Sehr komisch.

Nochwas, würde es reichen wenn man $beginn und $ende in $beginn2 und $ende2 ändert um das für Schnee und Feuerwerk getrennt einstellbar über die my_header.php zu steuern ?
Titel: Re: Feuerwerk einbinden
Beitrag von: matze0709 am 30 Dezember 2008, 23:38:06
Hallo zusammen,

ich bin neu hier und bin aber schon öfter als Gast in diesem Forum unterwegs um für meine HP zu lernen.

Aber zum Thema:
@ Eismann1976

Kann es daran liegen, dass du dieses Einbindung in die my_header am 30.12. testen möchtest?
Du hast doch aber im Script geschrieben "Beginn der Anzeige: 31.12."

Das kann ja dann heute noch nicht laufen, oder?
Titel: Re: Feuerwerk einbinden
Beitrag von: Eismann1976 am 31 Dezember 2008, 06:26:49
Moin,

der Tip war garnicht schlecht. Sowas kann schonmal passieren. Das Datum ist aber richtig (hab einfach kurz das Schneescript ersetzt).
Titel: Re: Feuerwerk einbinden
Beitrag von: GerhardSt am 31 Dezember 2008, 15:11:32
Hi Eismann1976, :)

hast du in der feuerwerk.js oben noch <SCRIPT TYPE="text/javascript"> stehen und unten </SCRIPT>


Dann kann das nicht funktionieren ;)

Lösche das mal raus und dein Script müsste laufen :BD:
Titel: Re: Feuerwerk einbinden
Beitrag von: Eismann1976 am 31 Dezember 2008, 15:43:21
Ne, ist natürlich raus.

Es geht ja wenn ich es in die Fusszeile einbinde (hab ich heute mangels Alternative). Deswegen nervt mich es ja so, dass es nicht mit Andis Codeschnippsel funzt.