2012-04-24 10 views
0

まず、私は完全な初心者だそう...それに応じiFrameのページ遷移のJavascriptの制御

をご回答下さい私は3つのhtmlページを動的シーケンス内のすべての1500msをロードすると、IFRAMEを作成するために管理している(www.online95.com/ (/ budget、html、voluntary.html、robust.html)に読み込まれているhtmlページのそれぞれに、円の列を追加しました(白=オフ、赤=オン)。クリックされた場合、対応するページをiframeにロードする

問題は、元のスクリプトが個々のHTMLページにリンクされていないことです元のシーケンスは、iframeに手動でロードしたページや読み込んだページに関係なく、1500ミリ秒ごとにロードされ続けます。

元のjavascriptの変数を/agency.htmlに置き換えるスクリプトを探しています。次dymanicページのロードを手動でロードされたページの後に一つである。また、私は

に私の提案は、ドンになり感謝

答えて

0

を一時停止ボタンを追加できるようにしたいと思い

にタイマーを休まます読み込まれたページにコントロールがありません。ご存じのように、読み込まれた異なるページ間のスクリプトは非常に複雑になる可能性があり、スクリプトが実際に意図するものではありません。

私は親ページにコントロールを保持します。 position:absolute; z-index:2;top/bottom: XYZpx; left/right: ABCpx;を使用して、それらを正しく配置し(親と同様にposition:relative)、正しい背景設定を使用して、それらをオーバーレイするように見えるようにすることができます。

は次にあなたがする必要があるだろう、すべての変数(var timer = window.setTimeout(...))でタイマーを格納し、ユーザーがあなたの質問に答える前に、コントロールのいずれか(controls.onclick = function(timer) { window.clearTimeout(timer); }

+0

ご意見ありがとうございます。私はこれを考えましたが、問題はどのように動的にコントローラをオン/オフに切り替えるか、ページがコントローラから直接的に順番に動的にロードされるようになることになります。現時点では、コントローラーの3つのバリエーションがあり、表示されているページに対応しています。 –

+0

コントローラーをクリックすると、クリックされたコントローラーがオン状態になります。オンのときにクラスを付ける)。それ以外の場合、setTimeoutによって呼び出される関数は、3つのコントローラの配列を回転し、対応するページをロードし、コントローラを 'on'に設定します。これは、ナビゲーションシステムをターゲットとし、オンラインで多くのリソースを見つけることができる一般的な問題です。 – Armatus

1

をクリックしたときに、私はこれがあると言っている、それをキャンセルしています本当に悪い練習、あなたはjQueryjQuery Slider Pluginを使用することができます、それはより効果的です。

iframeでもっとうまくいくのですが、できます。あなたは

<iframe id="agencyframe" onload="contentChanged(this)" src="/budget.html"> 
</iframe> 
、あなたが行うことができる方法である

<script type="text/javascript"> 

var pages=new Array(); 
     pages[0]="/budget.html"; 
     pages[1]="/voluntary.html"; 
     pages[2]="/robust.html"; 

var i=0; 
var time=4000; // this is set in milliseconds 
var timer = false; 
var timerSetter; 

function pageChange() { 
document.getElementById("agencyframe").src=pages[i]; 
i++; 
if(i==pages.length) { 
    i=0; 
} 
timerSetter = setTimeout("pageChange()",time); 
} 

function contentChanged(e) { 
    if (!timer) { pageChange(); timer=true;} 
    if (timerSetter) { 
     clearTimeout(timerSetter); 
     timerSetter = setTimeout("pageChange()",time); 
    } 
    var newSrc = e.contentWindow.location.href; 
    for (var j=0; j < pages.length; j++) { 
     if (newSrc.match(pages[j])) { 
      i = j+1; 
      if(i==pages.length) { 
       i=0; 
      } 
     } 
    } 
} 
</script> 

とiframeのためのonload属性を設定することを忘れないでくださいここ

、現在のページインデックス(i)を変更するためのiframeのonloadイベントを使用する必要があります

UPDATE:

私はあなたがインラインフレームのページを変更したい理解したように、ユーザーのクリック(ページゼロページ1ページ2)あなたはこのようなIFRAMEの場所を変更することができます

document.getElementById("agencyframe").src = "/budget.html"; 

はそう

function pageZero() { 
    document.getElementById("prin_div1").setAttribute("class", "prin_on"); 
    document.getElementById("prin_div2").setAttribute("class", "prin_off"); 
    document.getElementById("prin_div3").setAttribute("class", "prin_off"); 
    document.getElementById("agencyframe").src = pages[0]; 
} 

function pageOne() { 
    document.getElementById("prin_div1").setAttribute("class", "prin_off"); 
    document.getElementById("prin_div2").setAttribute("class", "prin_on"); 
    document.getElementById("prin_div3").setAttribute("class", "prin_off"); 
    document.getElementById("agencyframe").src = pages[1]; 
} 

function pageTwo() { 
    document.getElementById("prin_div1").setAttribute("class", "prin_off"); 
    document.getElementById("prin_div2").setAttribute("class", "prin_off"); 
    document.getElementById("prin_div3").setAttribute("class", "prin_on"); 
    document.getElementById("agencyframe").src = pages[2]; 
} 

、このようなあなたの機能を変更するUPDATE -2:よう

変更contentChanged機能これは、

function contentChanged(e) { 
    if (!timer) { pageChange(); timer=true;} 
    if (timerSetter) { 
     clearTimeout(timerSetter); 
     timerSetter = setTimeout("pageChange()",time); 
    } 
    var newSrc = e.contentWindow.location.href; 
    for (var j=0; j < pages.length; j++) { 
     if (newSrc.match(pages[j])) { 
      i = j+1; 
      document.getElementById("prin_div"+i).setAttribute("class", "prin_on"); 
      if(i==pages.length) { 
       i=0; 
      } 
     } else { 
      document.getElementById("prin_div"+(j+1)).setAttribute("class", "prin_off"); 
     } 
    } 
} 
+0

多くのおかげで、私はそのjQuery Slider Pluginを見ていましたが、それはWebページではなく画像のみであると思っていました。あなたの助けをもう一度おねがいします。 –

+0

onloadスクリプトはタイマーをリセットしないので、12000ms後に新しいページを手動でクリックすると、自動的に次のページにスキップする前にそのページに3000msだけ留まります。あなたのコードを間違ってコピーしたのか、コードがタイマーを休めるように設計されていないのかわからないのですか? –

+0

@RobWilliams、はい、あなたが正しいです、ユーザーが新しいページリンクをクリックしたときにタイマーをリセットしません。変更しました。 – ocanal