• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:無限ループから脱出不可能です)

無限ループから脱出不可能な問題発生

このQ&Aのポイント
  • オフラインでは正常に作動するコードが、FC2.comにアップロードした際に画面がフリーズし、無限ループに陥ってしまう問題が発生しています。
  • 解決策をお教えいただきたいです。
  • URL: http://nonprofit4excellence.web.fc2.com/i/images/d002.html

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 おそらくの回答で申し訳ないのですが、 if ( i > max )で1が1000を越したらGoNext()を実行し、location.hrefでページ遷移を実行しています。 しかしsetInterval()を7ミリsecという短期間で繰り返しているため、location.hrefの処理が完了しようとしている間もwinScroll()を短期間で繰り返し実行しています。 1001の状態で繰り返されるため何回もlocation.hrefが実行されているような状態ではないでしょうか。 (ローカルだとレスポンスが早いため実行できているように見えるが、実際のインターネット上だとレスポンスがローカルよりかかるため) 以下のようにすれば良いと思います。 var timer; var max=1000; var i=1; function winScroll(){ if ( i > max ) { clearInterval ( timer ); GoNext() ; } else { scroll(i,0);} i++; } function GoNext() { location.href = "d003.html"; } <body onload="timer=setInterval('winScroll()',7)"> setIntervalで設定した繰り返し処理を、条件が達した時に解除します。 これにより、1000を越した場合、繰り返し処理が停止し、その後ページ遷移が呼ばれます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

function winScroll(){ ここがループしていないから、 else {scroll(i,0); } で止まっているんじゃないですか?

mqm
質問者

補足

同じコードが、アップロードする前の段階では、自分のPCでは IEでもFirefox でも正常に作動しております。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • スクロールの時間調節

    初めて投稿します。 よろしくお願いします。 下記のような ソースで テキストのスクロールをしようと思いますが スクロールの早さの調節をしたい場合どうしたらよいのでしょう? プログラムには詳しくないので すぐに使える状態で教えていただけませんか? <SCRIPT language=JavaScript> <!-- var count,max,timer function init(){ count=0 max=(document.all?document.body.scrollHeight:document.height?document.height:1000) autoScroll() } function autoScroll() { if(navigator.appVersion.charAt(0)>=3) { if(count<max) { window.scroll(0,count++); timer=setTimeout("autoScroll()",4); } } } //--> </SCRIPT> <BODY onload=init()>

  • SELECTの生成でselected設定ができない

    全くもって原因がわからず、行き詰まっています。 どなたか助けてください。宜しくお願いします。 <script> window.onload=function(){ var now=new Date(); var nowDay=now.getDate(); var objD=document.FRM.selD; for(i=0; i<31; i++){ d=i+1; objD.options[i] = new Option(d+"日", d); if(d==nowDay){ objD.options[i].selected=true; } } } </script> <form name="FRM"> <select name="selD"></select> </form>

  • ループ内のaddeventlistner

    javascript初心者です、いろいろ検索したのですがわからず 教えてください。 サンプル <div id="hoge"></div> <script type=application/javascript> window.onload=function () { var html="検索エンジンのビッグ3" var big3= [ { "name":"google", "url":"http://google.com" }, { "name":"yahoo!", "url":"http://yahoo.com" }, { "name":"bing", "url":"http://bing.com" } ]; for (var i = 0, len = big3.length; i < len; i++) { html+= "<br />名前:"+big3[i].name+"<br />";  html+= "URL:"+big3[i].url+"<br />"; html+= '<input type="button" id="btn" value="投票" /><br />' }; document.getElementById("hoge").innerHTML=html; } </script> ----サンプルここまで このように配列をずらずらっと表示させてそれぞれのボタンを押すと、 その時の配列の情報を参照したいのです。 下のコードをボタンのすぐ下に置きましたが、cannot call method addEventListener of nullってエラーでできず、for文の外だと配列情報がとれず、基礎がわかっておらずすみませんが教えてください。 document.getElementById("btn").addEventListener('click',function(){alert("あなたがおしたのは"+big3[i].name)},false);

  • jQueryで、フェイドイン・フェイドアウトを追加

    fullscreenのはできたのですが、そこからのフェイドインをしてフェイドアウトをしていく仕組みを作ろうと思っていたのですが、そこだけがどうしても組み込めずにいるので助けていただけませんんでしょうか。 色々スクリプトを合体させてみたらりしてみました。 止む終えなく挫折してしまいました。 // 画像の配列を作成 var images = [ "img_001.jpg", "img_002.jpg", "img_003.jpg" ]; // 指定画像をプリロードする $(images).each(function(){ $('<img/>')[0].src = this; }); var index = 0; // 背景をコール。下記の場合、500ミリ秒で呼び出します。 $.fullscreen(images[index], {speed: 500}); setInterval(function() { index = (index >= images.length - 1) ? 0 : index + 1; $.fullscreen(images[index]); }, 5000);

  • リアルタイムに時計を表示するときのsetIntervalについて

    いつもお世話になっています。 いつも以上に稚拙な質問で申し訳ないのですが、ご助力願います。 <html> <head> <script type="text/javascript"> <!-- var today = new Date(); window.onload = function dispTime(){ document.getElementById("showTime").innerHTML = today.getFullYear() + "/" + (today.getMonth()+1) + "/" + today.getDate() + " " + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); setInterval('dispTime()',1000); } //--> </script> </head> <body> <div id="showTime"></div> </body> </html> できるだけ<body onload="">を使いたくないので、window.onloadにしてあります。 イメージとしては、document.getElementById("showTime").innerHTMLでshowTimeに時間が表示され、setIntervalで再度disptimeが呼ばれ、という無限ループになればよいと考えてこのソースになりました。 ただ現状は、ロード時に時刻が表示され、そのまま動きません。 たぶんsetIntervalの場所とか使い方がおかしいような気がするのですが、どうもよくわかりません。 参考にしたサイトによってsetInterval("dispTime()"...だったり setInterval("disptime"...だったりと記述がバラバラで、 ほとんどのところでは、body onload="setInterval("...とonload扱いでした。 body onloadは使わずに、1秒ごとに動く時刻表示をするには、どこを直せばよいでしょうか。 よろしくお願いします。

  • アニメーションをループさせたい

    すみませんjquery初心者です。 下記の様な簡単なスライドショーを作りたいのですが、 ---------------------------------------------------------------- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script> <script> setTimeout(function() { $(".slide01").hide(); $(".slide02").show(); }, 3000); setTimeout(function() { $(".slide02").hide(); $(".slide03").show(); }, 6000); setTimeout(function() { $(".slide03").fadeOut(2000); $(".slide04").fadeIn(2000); }, 9000); setTimeout(function() { $(".slide04").fadeOut(2000); $(".slide01").fadeIn(2000); }, 15000); </script> <style> p.slide01, p.slide02, p.slide03, p.slide04 { position: absolute; } </style> <div class="slide"> <p class="slide01"><img src="images/image01.jpg" alt="" /></p> <p class="slide02" style="display:none;"><img src="images/image02.jpg" alt="" /></p> <p class="slide03" style="display:none;"><img src="images/image03.jpg" alt="" /></p> <p class="slide04" style="display:none;"><img src="images/image04.jpg" alt="" /></p> </div> ---------------------------------------------------------------- 下記の様にループさせようとすると何やら挙動がおかしくなってしまいます。。 ---------------------------------------------------------------- setInterval( function () { setTimeout(function() { $(".slide01").hide(); $(".slide02").show(); }, 3000); setTimeout(function() { $(".slide02").hide(); $(".slide03").show(); }, 6000); setTimeout(function() { $(".slide03").fadeOut(2000); $(".slide04").fadeIn(2000); }, 9000); setTimeout(function() { $(".slide04").fadeOut(2000); $(".slide01").fadeIn(2000); }, 15000); },0); ---------------------------------------------------------------- どのようにすればループさせることが出来るのでしょうか? ご教授頂けると非常に助かります。 よろしくお願いします。

  • for(var i=0;...) の i の値を保持するには?

    ----- <ul> <li>test1</li> <li>test2</li> <li>test3</li> </ul> <script type='text/javascript'> (function(){ var li = document.getElementsByTagName('li'); for(var i=0,max=li.length; i<max; i++){ li[i].onclick = function(){ alert(i); }; } })(); </script> ----- 上記スクリプトを実行すると、全てのli要素でクリックしたときに "3" がalertされます。 0,1,2 をそれぞれalertしたいのですが、どういった方法が考えられるでしょうか? 現在作成しているスクリプトでは、下記のようにidに値を保持しています。 もう少しスマートな方法がある気がするのですが…。 --- li[i].id = 'test' + i; li[i].onclick = function(){ alert(this.id.replace(/^test(\d+)/, '$1')); }; ---

  • ロールオーバーについて

    ロールオーバーをシンプルなjavascriptで実装するとの事でとあるサイトにて、以下のようなスクリプトがありました。 http://css-happylife.com/archives/2007/0621_0010.php ▼▼▼スクリプト▼▼▼ function smartRollover() { if(document.getElementsByTagName) { var images = document.getElementsByTagName("img"); for(var i=0; i < images.length; i++) { if(images[i].getAttribute("src").match("_off.")) { images[i].onmouseover = function() { this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on.")); } images[i].onmouseout = function() { this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off.")); } } } } } if(window.addEventListener) { window.addEventListener("load", smartRollover, false); } else if(window.attachEvent) { window.attachEvent("onload", smartRollover); } ▲▲▲スクリプト▲▲▲ DOMを使ってimgのソースを 画像「_off.」から「_on.」に書き換えているんだなということまではわかるのですが、 if(document.getElementsByTagName) とか、 if(window.addEventListener) 等の記述があります。 ifのあとの()の中身は i>0 や (i>5)&&(i<=10) 等、演算子を用いた条件を記述するタイプした目にしたことがないのですが、 これはどういった事を表しているのでしょうか? ご教授お願いいたします。

  • 1ページ内で複数のwindow.onload = functionの動作

    Ajaxを使用して取得してきたRSSをinnerHTMLで表示するスクリプトを1ページ内に複数設置したいのですが、うまくいきません。 prototype.jsを使うと複数のonloadを制御できるという記事を参考にしたのですが、動作しませんでした。(WindowsIE6で検証してます) http://hori-uchi.com/archives/2005_09.html BODY以下のソースはこちらです。現状だとどちらか一つだけなら動作する感じです。これをどちらも動作する方法をご教授いただけませんでしょうか。宜しくお願いします。 //RSS取得1箇所目 <div id="p1">roading1</div><script> window.onload = function(){ var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script")); u.type = "text/javascript"; u.charset = "utf-8"; u.src = "http://###"; } var xml = {}; xml.onload = function(data){ var items1 = data.items; var g = "\n"; for(var i = 0; i < Math.min(items1.length, 20); i++){ // } document.getElementById("p1").innerHTML = g; } </script> //RSS取得2箇所目 <div id="p2">roading2</div><script> window.onload = function(){ var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script")); u.type = "text/javascript"; u.charset = "utf-8"; u.src = "http://***"; } var xml = {}; xml.onload = function(data){ var items2 = data.Result; var h = "\n"; for(var i = 0; i < Math.min(items2.length, 20); i++){ // } document.getElementById("p2").innerHTML = h; } </script>

  • 時間差で要素が出てくるエフェクトを導入

    http://ziyudom.com/js-delay/を参考に時間差で要素が出てくるエフェクトを導入したかったのですが、うまくいきません。 いっぺんに時間差なく行われてしまいます。 一つ終わって次という形にしたいです。 ないしはほんの少し差をつけたいです。 スクロールがカキはできないのですかね。うまく再現できていませんがソースはわかると思います。スクロールの仕方があれば教えてください。 http://codepen.io/anon/pen/WGqjZZ ・css .js-translate3d-lower-right,.js-translate3d-lower-right-2,.js-translate3d-lower-right-3 { opacity : 0;/* 対象の要素の初期の不透明度 */ transform: translate3d(-1rem,-2rem,-1rem); /*transform : translate(5rem, 0);横からスライド*/ transition : all 500ms; } ・動くがいっぺんに動いてしまう。 var $deferredAnim = $.Deferred( function( deferredAnim ){ //thenでファンクション名を繋げる deferredAnim.then(anim_01) .then(anim_02) .then(anim_03) }); //実行 $deferredAnim.resolve(); function anim_01 (){ $(function(){ $(window).scroll(function (){ $('.js-translate3d-lower-right').each(function(){ var elemPos = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > elemPos - windowHeight + 350){ $(this).addClass('scrollin'); } }); }); }); } function anim_02 (){ $(function(){ $(window).scroll(function (){ $('.js-translate3d-lower-right-2').each(function(){ var elemPos = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > elemPos - windowHeight + 350){ $(this).addClass('scrollin'); } }); }); }); } function anim_03 (){ $(function(){ $(window).scroll(function (){ $('.js-translate3d-lower-right-3').each(function(){ var elemPos = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > elemPos - windowHeight + 350){ $(this).addClass('scrollin'); } }); }); }); } ・こちらだと動かない最後の}にエラーと出る $(function(){ $(window).scroll(function (){ $('.js-translate3d-lower-right').each(function(){ var elemPos = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > elemPos - windowHeight + 350){ $(this).addClass('scrollin'); } }); }); } function anim_02 (){ $(window).scroll(function (){ $('.js-translate3d-lower-right').each(function(){ var elemPos = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > elemPos - windowHeight + 350){ $(this).addClass('scrollin'); } }); }); } function anim_03 (){ $(window).scroll(function (){ $('.js-translate3d-lower-right').each(function(){ var elemPos = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > elemPos - windowHeight + 350){ $(this).addClass('scrollin'); } }); }); }