JSでローテーバナーを作ってますが不具合について教えてください

このQ&Aのポイント
  • JSで作成したローテーバナーが外部ファイルに記述すると動作しない
  • HTMLに直接記述すると動作するが、外部ファイルにする方法はあるのか
  • 原因を教えてください
回答を見る
  • ベストアンサー

JSでローテーバナーを作ってますが不具合について教えてください

下記のサイトを参考にローテバナーを作ってます。 http://codess.heteml.jp/sample/ad/rotation.html ですが、参考サイトのHTMLに記述のスクリプトを外部ファイルにすると 動作しないのです。 検証したら一番最後の行だけ(他は外部JSのまま) Event.observe(window, "load", pageInit); をHTMLに直書きすれば動作るのです。 この記述も含めて外部ファイルにして動作するには どうしたら良くて、何が原因で動かないのでしょうか? ご教示いただければと思います。 よろしくお願いします。 <script type="text/javascript"> var ads = null; var currentIndex = null; /** * 広告初期化処理 */ function adsInit(adsId) { // 複数の広告を含む広告枠 var obj = $(adsId); if (obj) { // クラス名 ad で広告オブジェクトを検索 ads = obj.getElementsByClassName("ad"); // 最初のバナー以外を隠す for (i=1; i<ads.length; i++) { ads[i].hide(); } currentIndex = 0; } // 広告枠を表示(非表示クラスを解除) obj.className = ""; } /** * ローテーション初期化処理 */ function rotationInit() { setInterval(rotation, 5000); } /** * ローテーション */ function rotation() { // 表示中の広告を隠す ads[currentIndex].hide(); currentIndex++; if (currentIndex >= ads.length) { currentIndex = 0; } // 次の広告を表示 ads[currentIndex].show(); } /** * ページ初期化処理 */ function pageInit() { adsInit("ads"); rotationInit(); } Event.observe(window, "load", pageInit); </script>

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

一番ありそうなのが、 prototypeかjqueryを使っていると思うけど、読み込む順番が後になっているとか…?

gonta0012
質問者

お礼

順番を逆にしたらFFで表示されました! ありがとうございます。 ただ、IE7では上手く動作しないので、CSSの記述が問題のような感じです。 もうちょっと調べてみます。

関連するQ&A

  • jsについて

    jsのプログラムで質問があります。 p id1を押したらテスト1が表示されますが、p id2を押したら1が表示されたまま2が表示されてしまいます。 2を押したら1を隠して2を表示させたいのですが、やり方を教えてください。 3も、同じようにしたいです。 <p id="p1">テスト1</p> <p id="p2">テスト2</p> <p id="p3">テスト3</p> <input type="button" id="button1" value="ボタン1" /> <input type="button" id="button2" value="ボタン2" /> <input type="button" id="button3" value="ボタン3" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script> $(function() { // 初期表示を非表示にする $('#p1').hide(); // 初期表示を非表示にする $('#p2').hide(); // 初期表示を非表示にする $('#p3').hide(); $("#button1").click(function() { // 表示する $("#p1").show(); }); $("#button2").click(function() { // 表示する $("#p2").show(); }); $("#button3").click(function() { // 表示する $("#p3").show(); }); }); </script>

  • tabslide.jsを書き換えたいです

    http://www.andrewsellick.com/64/fancy-sliding-tab-menu-v2 のサイトよりダウンロードしたファイルでナビゲーションを作成していますが、この機能では一定時間たたないとドロップメニューが消えません。マウスオーバー&マウスアウトで見えたり消えたりするようにしたいのですが、どのように書き換えれば実現するのか教えてください。 var sliding = 0; var slideTime = ''; // Set is sliding value function setSliding(a_ISliding){ sliding = a_ISliding; } // Get is sliding value function getSliding(){ return sliding; } // Carry out accordian styled effect function accordion(evt) { el = Event.element(evt); var eldown = getNextSibling(el); // If element is visible do nothing if ($('visible') == el) { return; } if ($('visible')) { if( getSliding() == 1 ){ return false; } var elup = getNextSibling($('visible')); setSliding( 1 ); parellelSlide( elup, eldown ); $('visible').id = ''; } else{ setSliding( 1 ); singleSlide( eldown ); } el.id = 'visible'; } // Setup accordian initial state function init() { var bodyPanels = document.getElementsByClassName('panel_body'); var panels = document.getElementsByClassName('panel'); var noPanels = panels.length; var percentageWidth = 100 / noPanels; var position = 0; // Loop through body panels and panels applying required styles and adding event listeners for (i = 0; i < bodyPanels.length; i++) { bodyPanels[i].hide(); panels[i].style.width = percentageWidth + '%'; panels[i].style.position = 'absolute'; panels[i].style.left = position + '%'; Event.observe(panels[i].getElementsByTagName('h3')[0], 'mouseover', accordion, false); Event.observe(panels[i].getElementsByTagName('h3')[0], 'mousemove', accordion, false); Event.observe(document.body, 'mousemove', resetIdle, false); position += percentageWidth; } if( $('visible') ){ // Set panel with id of visible to be initial displayed var vis = $('visible').parentNode.id+'-body'; $(vis).show(); } setIdle(); } // Next sibling method to work around firefox issues function getNextSibling(startBrother){ var endBrother=startBrother.nextSibling; while(endBrother.nodeType!=1){ endBrother = endBrother.nextSibling; } return endBrother; } function parellelSlide( elup, eldown ){ new Effect.Parallel( [ new Effect.SlideUp(elup), new Effect.SlideDown(eldown) ], { duration: 0.3, afterFinish: function() { setSliding( 0 );} }); } function singleSlide( eldown ){ new Effect.Parallel( [ new Effect.SlideDown(eldown) ], { duration: 0.3, afterFinish: function() { setSliding( 0 );} }); } function resetTabs(){ var resetEl = getNextSibling( $('visible') ); setSliding( 1 ); new Effect.Parallel( [ new Effect.SlideUp( resetEl ) ], { duration: 0.3, afterFinish: function() { setSliding( 0 );} }); $('visible').id = ''; } function resetIdle(){ if( $('visible') ){ window.clearTimeout( slideTime ); slideTime = window.setTimeout( "resetTabs()", 10000 ); } } function setIdle(){ if( $('visible') ){ slideTime = window.setTimeout( "resetTabs()", 10000 ); } } Event.observe(window, 'load', init, false); 上記がダウンロードしたtabslide.jsです。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • prototype.jsを利用したイベントの登録について

    はじめまして。 現在 prototype.js 1.4.0 を利用して、Web ページの作成を行っているのですが、イベントの登録 (Event.observe)でやりたいことと、異なる動作になってしまい困っているところです。 [ やりたいこと ] javascript側で動的に生成した各要素 (div) に対して moueover & mouseout のイベントを割り当てる。mouseover 時には background の値を変え mouseout 時には background の値を元(transparent)に戻す。 [ 困っていること ] 各要素のmouseover & mouseout 時には各要素の背景色が変更されるはずなのに、一番最後に生成した要素の背景が変更されてしまう。 [ コード ] <html> <head> <script type="text/javascript" src="prototype.js" ></script> <script type="text/javascript"> view = new Class.create(); view.prototype = { initialize:function() { var view = $('viewContents'); var idName = 'test'; for (var i=0; i<10; i++) { var id = idName + i; var d = document.createElement('div'); d.id = id; d.innerHTML = id; view.appendChild(d); Event.observe(d,'mouseover',function() {d.style.background='#aaa';}.bind(this),false); Event.observe(d,'mouseout' ,function() {d.style.background='transparent';}.bind(this),false); Event.observe(d,'click' ,function() {alert(d.id);}.bind(this),false); } } } </script> </head> <body> <p><input type="button" onclick="new view();" value="取得"></p> <div id="viewContents"></div> </body> </html> となります。 なにか基本的なところが間違っているのでしょうか? よろしくお願いいたします。

  • Google feed API の外部jsファイル化

    Google feed API をつかって、 rssリーダーを作って実験しているのですが、 以下のjavascript部分を外部jsファイルすると、 動作しなくなってしまい困っています。 javascriptには、外部js化が出来るものと 出来ないものがあるのでしょうか? どなたかご教授おねがいいたします。 <script type="text/javascript"> function load() { var feed = [ {title:'xxx', url:'http://xxx.com'} ]; var options = { numResults : 3, stacked : true, displayTime : 7000, fadeOutTime : 500, linkTarget : google.feeds.LINK_TARGET_BLANK } new GFdynamicFeedControl(feed, "feedControl", options); } google.load("feeds", "1"); google.setOnLoadCallback(load); </script>

  • このjsはどういうことですか?

    function handleFiles(files) { l("アイコン変更!!1"); if (files.length > 0) { l("アイコン変更!!2"); var file = files[0]; if (typeof FileReader !== "undefined" && file.type.indexOf("image") != -1) { l("アイコン変更!!3"); var reader = new FileReader(); reader.onload = function(evt) { load(evt.target.result) } ; reader.readAsDataURL(file) } } } function load(src) { l("アイコン変更!!load"); img = new Image(); img.onload = function() { analyze() } ; img.src = src } function analyze() { l("アイコン変更!!analyze"); if (!img) return; SmartCrop.crop(img, { width: 100, height: 100, debug: false }, draw) } function draw(result) { l("アイコン変更!!draw"); selectedCrop = result.topCrop; drawCrop(selectedCrop) } function drawCrop(crop) { l("アイコン変更!!drawCrop"); canvas.width = 100; canvas.height = 100; ctx.drawImage(img, crop.x, crop.y, crop.width, crop.height, 0, 0, canvas.width, canvas.height); img_src = canvas.toDataURL(); var img_tag = $('<img>').attr('src', img_src); $('#file_span').html(img_tag); $('#b_change_profile').prop('disabled', false) } function img_selected_clear() { $('img.selected', '#icon_table').each(function() { $(this).removeClass('selected') }) } function emit_change_icon_name() { var data = {}; data.selected_my_icon = selected_my_icon; data.character_name = $("#ipt_change_character_name").val(); socket.json.emit('change_icon_name', data) } $(function() { $('#canvas_wrap').hide(); $('#i_file').change(function(e) { handleFiles(this.files) }); 回答できる方、回答よろしくお願いします。 できれば一つずつ解説してもらえると嬉しいです。

  • AS3.0による外部swfの制御

    AS3.0による外部swfの制御 質問させていただきます。 やりたいと事は、メインとなるswfのボタンを押して、 読み込んだ外部swf(stopしている)を再生(play)したいと考えております。 メインのswfはAS3.0、読み込む外部swfはAS2.0になります。 環境はFlash CS3です。 以下がスクリプトになります。 //swf読み込み配置 var loader_obj : Loader = new Loader(); var url : URLRequest = new URLRequest("test.swf"); MovieClip(root).loader_obj.load(url); loader_obj.y = 3 loader_obj.x = 392 stage.addChild(loader_obj); //swfボタン制御 btn.addEventListener(MouseEvent.ROLL_OVER,btn_play); function btn_play(event:MouseEvent):void {MovieClip(root).photo.gotoAndPlay(2);//メインswfのムービーリップも動かす <--ここに外部swfを参照するスクリプトが入ると思うのですが・・・-->gotoAndPlay(2);//外部swfの2フレーム目から再生 } 肝心の所のスクリプトはわかりません・・・ 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • LoadVarsによるデータの読み込み

    現在、簡易ペイントチャットのようなものを作っています。 ログファイル名がSimpleWebNote1、 ログの中身はxb_old=100,200,300,400 といった感じです。 ログを取得し、","で区切ってSimpleWebNote1という配列に格納したいので ↓のような処理をしています。 (ログは4つありますがすべて同じような処理) load_obj = new LoadVars(); load_obj.load( "SimpleWebNote1.txt" ); load_obj.onLoad = function(){ str = load_obj(bx_old); SimpleWebNote1 = str.split(","); } そして100回前までのログを再描画するために ↓のような処理をしています。 for (var i=0; i<=100; i++){ _root.lineStyle (3, 0x000000, 100); _root.moveTo (SimpleWebNote1[i], SimpleWebNote2[i]); _root.lineTo (SimpleWebNote3[i], SimpleWebNote4[i]); } ですが、画面には何も表示されず困っています。 どこか間違っているとしたら指摘してほしいです。 この部分ができたら完成なので本当にもどかしいです。

  • 日付範囲指定について

    よろしくお願いします。 年、月をコンボボックスで表示させ、選択できるようにしてあります。jsの内容は以下です。 ----------------------------------------------------- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); fday(d); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } ----------------------------------------------------- これを利用して日付範囲指定(例として、2006年1月~2008年8月ような感じ)を行いたいのですが、可能でしょうか? 自分で試した方法ですと、前半(2006年1月)は表示できるのですが、後半(2008年8月)が表示できませんでした。 試したソースは以下 --------------------------------------------------- <!-- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); tyear(y); tmonth(m); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } function tyear(thisyear){ var obj = document.getElementById('tyear'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function tmonth(thismonth){ var obj = document.getElementById('tmonth'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } //--> どうかよろしくお願いします。

  • PHP requireの後にJS実行

    PHPで外部サイトからニュースを切り出して表示させているのですが ニュースを切り出した箇所にURLを改変するJavaScriptを組み込んでいます。 静的ページでJavaScriptを稼働させると正常に動作して指定箇所のURLを書き換えます。 しかしPHPで外部から読み込ませると正常に動作してくれません。 外部から動的ロードされたデータに対してJavaScriptを動作させるにはどうしたら良いでしょうか? body onload は試しましたが駄目でした。 何方かお力添えをお願い致します。 【現在のソース】 ※動的に読み込んだニュースデータの相対参照URLに指定ドメインを付与したいです。 <!-- 動的ロード箇所 --> <ul id="news"> <a href="/news/0123456789.html"></a> </ul> <!-- ここからURL書き換えscripts--> <script type="text/javascript"> kitou(); function kitou() { var a = document.getElementById('news').getElementsByTagName('a'); var i = 0; var output; for( i = 0; i < a.length; i++ ) { a[i].href = a[i].href.replace( document.domain, 'www.google.co.jp' ); } } </script>

  • chromeでxmlをJSで表示するには?

    chromeだとエラーで表示できません。 どうすればいいのでしょうか? window.onload=function(){ Docm = new ActiveXObject('microsoft.XMLDOM'); Docm.async = false; Docm.load('xmlsrc'); var string = ""; if(Docm.documentElement.hasChildNodes()) { var i = 0; var n_num = Docm.documentElement.childNodes.length; while (i < n_num) { string += Docm.documentElement.childNodes.item(i).text += " "; i++; } } else { string +="子ノードはありません。"; } hyouji.innerHTML = string; }

専門家に質問してみよう