Blogger用Vaster2でバーナーなどを自動的にランダム表示させてみる

この前は『Blogger用Vaster2でJavaScriptを使ってランダム表示を楽しんでみる』でアクセス毎に表示を変えるJavaScriptを試しましたが、「JavaScriptのdocument.write」は残念ながらHTML5では非推奨でした。

理由は「DOMへの影響やネットワーク遅延が懸念されたりデバッグ時のボトルネック」のが原因のようです。

そこで「document.write」→「document.getElementById」に置き換えます。元々、document.writeは同期処理的に動くようでイメージ通りに動いてくれなかったこともあり勉強も兼ねて変更してみました。

その前にCSS部分も少しだけ手直ししています。ここではHTML本文に直接、挿入しているので<style>タグで挟んでいます。

<style>
 @charset "utf-8";
.ad-entry-bottom {width:680;padding:0px !important;margin-bottom:10px; text-align: center;  }
.ad_left {display:inline-block; width:300px;}
.ad_right {display:inline-block; width:300px;}
@media screen and (max-width: 540px) { 
.ad-entry-bottom {width:340;}
.ad_right {display:none;}
}
</style>


従来は下記のように<script>タグを挿入してから<div>タグでHTMLで表示位置指定していました。

<script type="text/javascript">
 var lists=[
  '<img src="Chart1.jpg">',
  '<img src="Chart2.jpg">',
  '<img src="Chart3.jpg">'
];
function rndSet(){
  var rNo = Math.floor(Math.random() * lists.length);
  document.write(lists[rNo]); 
}
</script>
<div class="ad-entry-bottom" >
  <div class="ad_left">
    <script type="text/javascript">rndSet();</script>
  </div>
  <div class="ad_right">
    <script type="text/javascript">rndSet();</script>
  </div>
</div>





今回は<div>タグでHTML本文に表示位置を指定してから<script>タグの手順で動作させます。document.writeと違ってHTML要素の後にスクリプトを配置しないと動きません。
以下の記述で同じ動作をします。

<div class="ad-entry-bottom" > 
  <div id="sample1" class="ad_left"></div> 
  <div id="sample2" class="ad_right"></div>
</div>
<script type="text/javascript">
var lists=[
  '<img src="Chart1.jpg">',
  '<img src="Chart2.jpg">',
  '<img src="Chart3.jpg">'
];

rndSet1();
function rndSet1() {
  var rNo = Math.floor(Math.random() * lists.length);
  document.getElementById('sample1').innerHTML =lists[rNo];
  var rNo = Math.floor(Math.random() * lists.length);
  document.getElementById('sample2').innerHTML =lists[rNo];
}
</script> 


これで横一列に2画面がランダムに変わり、モバイル時は1画面表示になります。
しかし画面はアクセス時しか変わらないため、ちょっとさびしい。そこでアクセス時以外でも一定間隔で画像が変化するようにします。今回の設定では3秒間隔でランダムに表示が変わります。

function rndSet1() {
  var rNo = Math.floor(Math.random() * lists.length);
  document.getElementById('sample1').innerHTML =lists[rNo];
  var rNo = Math.floor(Math.random() * lists.length);
  document.getElementById('sample2').innerHTML =lists[rNo];
 setTimeout("rndSet1()",3000); 
}

以前、document.writeでは単純に追加しても全体が書き換わったりして思うように動作してくれませんでしたが、document.getElementByIdではイメージ通りに動作してくれました。






少しだけ私のレベルもアップしてきたので、今度は応用として広告などのバーナーが自動で変わるように設定してみました。

やることは以下のリストにバナー情報をデータ化して貼り付けるだけです。ただし、下記のようにjavascriptタグを含んだ形で供給された場合は、当たり前なんでしょうが駄目(笑)

<script type="text/javascript">
var lists=[
  '<script type="text/javascript">~~~</script>',
  '<script type="text/javascript">~~~</script>',
  '<script type="text/javascript">~~~</script>'
];
  ......

</script> ←自動的に消える


bloggerのHTML「編集」画面で挿入し「作成」画面に戻すと、最後の</script>タグが自動的に消されてしまい、正常に動作しません。


次回『Blogger用Vaster2でJavaScript経由でCSSを使ってランダム表示を楽しんでみる』ではCSSを利用して試してみました。