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>
Andi hatte da mal was:
http://www.pragmamx.org/Forum-topic-27896-start-msg181032.html#msg181032
Ein Jahreswechsel dazwischen scheint ja Sinnvoll ;)
Joa, die Variante hab ich fürs Schneescript. Das ist ja ne *.js Datei. Das Feuerwerk hab ich so nicht anslaufen bekommen. :red:
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 ?
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?
Moin,
der Tip war garnicht schlecht. Sowas kann schonmal passieren. Das Datum ist aber richtig (hab einfach kurz das Schneescript ersetzt).
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:
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.