JavaScriptとHTML5タグを使用して自分のJoomlaテンプレートに素敵な(!)アニメーションを作成しました 異なるレイヤーに7つの透明な雲がすべて動きますページの向こう側に移動しながら、互いの上に表示されます。サイト名は、その上にあるレイヤーに応じて、雲がその背後にあるか、または雲の前に入るようにするためのものです。ユーザーがフロントページを離れたときにHTML5 <CANVAS>のアニメーションがJoomlaで正しく表示されない
あなたが自分自身でそれを見ることができます: http://www.flunki.com
すべては、フロントページ上で動作します。 しかし、リンク(たとえば、左側のブログ)をクリックすると、アニメーションが停止し、画面の左側に静的な雲(時には2つ)があります。 フロントページに戻ってもこれは解決されず、リロードも行われません。 F5リロードにより問題が解決されます。
私には、ページをどこかにキャッシュすること(JoomlaのCacheはオフになっています)と関係がありますが、問題を解決する方法が見つかりませんでした。
誰でもお手伝いできますか? init()
で
<script type="text/javascript">
var canvas;
var ctx;
var max;
var logopos;
var background;
var logo;
var width = 1300;
var height = 150;
var cloud1;
var cloud1_x;
var cloud1_y;
var cloud2;
var cloud2_x;
var cloud2_y;
var cloud3;
var cloud3_x;
var cloud3_y;
var cloud4;
var cloud4_x;
var cloud4_y;
var cloud5;
var cloud5_x;
var cloud5_y;
var cloud6;
var cloud6_x;
var cloud6_y;
var cloud7;
var cloud7_x;
var cloud7_y;
var cloud8;
var cloud8_x;
var cloud8_y;
var irun;
function init() {
canvas = document.getElementById("clouds");
width = window.innerWidth;
irun =+ 1;
height = canvas.height;
ctx = canvas.getContext("2d");
// init background
background = new Image();
background.src = 'http://www.flunki.com/templates/celebs_plazza/images/backblue.png';
// init logo
logo = new Image();
logo.src = 'http://www.flunki.com/templates/celebs_plazza/images/logo.png';
// init cloud1
cloud1 = new Image();
cloud1.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud40.png';
cloud1.onload = function(){
cloud1_x = 60;
cloud1_y = 5;
};
// init cloud3
cloud3 = new Image();
cloud3.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud50.png';
cloud3.onload = function(){
cloud3_x = max/2;
cloud3_y = 60;
};
// init cloud5
cloud5 = new Image();
cloud5.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud60.png';
cloud5.onload = function(){
cloud5_x = max-180;
cloud5_y = 35;
};
// init cloud7
cloud7 = new Image();
cloud7.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud70.png';
cloud7.onload = function(){
cloud7_x = 200;
cloud7_y = 75;
};
// init cloud2
cloud2 = new Image();
cloud2.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud60.png';
cloud2.onload = function(){
cloud2_x = max-100;
cloud2_y = 15;
};
// init cloud4
cloud4 = new Image();
cloud4.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud50.png';
cloud4.onload = function(){
cloud4_x = max-300;
cloud4_y = -15;
};
// init cloud6
cloud6 = new Image();
cloud6.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud70.png';
cloud6.onload = function(){
cloud6_x = max-560;
cloud6_y = 8;
};
// init cloud8
cloud8 = new Image();
cloud8.src = 'http://www.flunki.com/templates/celebs_plazza/images/cloud40.png';
cloud8.onload = function(){
cloud8_x = 0;
cloud8_y = 38;
};
return setInterval(main_loop, 10);
}
function update(){
max = window.innerWidth;
logopos = (640 + ((window.innerWidth-960)/2));
cloud1_x -= .05;
if (cloud1_x < -128) {
cloud1_x = max;
}
cloud3_x -= .2;
if (cloud3_x < -128) {
cloud3_x = max;
}
cloud5_x -= .15;
if (cloud5_x < -128) {
cloud5_x = max;
}
cloud7_x -= .1;
if (cloud7_x < -128) {
cloud7_x = max;
}
cloud2_x += .1;
if (cloud2_x>max) {
cloud2_x = -128;
}
cloud4_x += .05;
if (cloud4_x>max) {
cloud4_x = -128;
}
cloud6_x += .15;
if (cloud6_x>max) {
cloud6_x = -128;
}
cloud8_x += .2;
if (cloud8_x>max) {
cloud8_x = -128;
}
}
function draw() {
ctx.canvas.width = window.innerWidth-20;
ctx.drawImage(background,0,0);
ctx.drawImage(cloud1, cloud1_x, cloud1_y);
ctx.drawImage(cloud2, cloud2_x, cloud2_y);
ctx.drawImage(cloud3, cloud3_x, cloud3_y);
ctx.drawImage(cloud4, cloud4_x, cloud4_y);
ctx.drawImage(cloud5, cloud5_x, cloud5_y);
ctx.drawImage(cloud6, cloud6_x, cloud6_y);
ctx.drawImage(logo,logopos,0);
ctx.drawImage(cloud7, cloud7_x, cloud7_y);
// ctx.drawImage(cloud8, cloud8_x, cloud8_y);
}
function main_loop() {
draw();
update();
}
init();
</script>
ヒントとコメントありがとうございました。私は後で追加したポイント1を理解して修正しましたが、それを置く場所については明らかに考えませんでした。私はポイント2を理解し、これを認識していませんでした。コードをあなたが提案したコードに変更しましたが、今やより多くの雲が読み込まれますが、以前と同じように静的になります。私は正直言ってあなたの最後の点には反対です(MAX varの配置を除いて)。私は配列とループを認識していますが、すべての雲が異なる場所、異なる速度の異なる平面から始まるので、これは効果を微調整するための最も明白な方法だと思いました。 – Nik
それは怠惰でもありました。 8P – Nik