クロピグログ

職業訓練で学んだことまとめ

【JavaScript授業十五日目】ブラウザオブジェクト(続き)

◆遅延処理

window.setTimeout ( 処理 , 遅延時間 ) ;

 

window.setTimeout ( function ( ) {

 一定時間経過後の処理

} , 遅延時間 ) ;

 

・setTimeoutが関数をつかんでいて、遅延時間後に離すイメージ。

・関数名を書かないのは、何度も使うわけではないから。書いても問題なく動くが必要がない。

 

おさらい問題

・問題1
確認ダイアログ画面を表示すること
確認ダイアログ画面の文字は「Yahooを表示しますか?」とする
「OK」が押されたらYahooのトップページを表示「キャンセル」が押されたら
リンク先に飛ばず現在表示画面のままにする

●HTML

<a href="https://www.yahoo.co.jp/" onclick="return check();">
   ここにリンク作成
</a>

●JS

function check() {
  var res = window.confirm("Yahooを表示しますか?");
  return res←「true」か「false」でかえってくる
}

 

別解

●HTML

<a href="https://www.yahoo.co.jp/" onclick="return confirm('Yahooを表示しますか?');">
  ここにリンク作成
</a>

・HTMLのみで完結する

 

リンクを使用しない方法」

●JS

var res = window.confirm("Yahooを表示しますか?");
if (res) {
  window.location.href = "https://www.yahoo.co.jp/"; ←OKなら移動
}

・if ( ) のカッコの中は「true」or「false」で判断しているので

「res == true」は必要なく「res」のみでOK

 

・問題2
画面表示3秒後にブラウザに「今日は〇月〇日です」と表示すること

日付が変わっても表示できるようにする

●JS

var today = new Date();
var month = today.getMonth() + 1;
var date = today.getDate();
 
window.setTimeout(function () {
  document.getElementById("date").innerHTML = 
 "今日は" + month + "月" + date + "日です"
}, 3000);

 

 

・問題3
画面表示10秒後に非表示になっている画像を表示させること

●HTML

<img id="img" src="img/e_01.gif" style="display:none;">

 ●JS

window.setTimeout(function () {
  document.getElementById("img").setAttribute("style""display:block;");
}, 10000);

 

 別解

window.setTimeout(function () {
  document.getElementById("img").style.display ="block";
}, 10000);

 ・画像は置換インライン要素(幅と高さ指定可能インライン要素)

"block" → ブロックレベル要素として表示

"inline" → インライン要素として表示

"inline-block" → 置換インライン要素として表示

"none" → 非表示

 ・表示されたので問題はないが、"inline-block"のほうが正しい

 

ブラウザオブジェクト

 ウインドウのサイズ確認方法

windowオブジェクトのプロパティ
console.log(window.innerWidth);
console.log(window.innerHeight);

 

●window.setInterval

 ・一定時間経過後に繰り返し処理

・window.setInterval(関数、ミリ秒数);

・戻り値:clearInterval(処理停止)用のID用

var timerID2; 処理停止用のID番号を管理
timerID2 = window.setInterval(function () {
  console.log('処理しました2');
}, 3000);
第1引数:繰り返し呼び出す関数
第2引数:一定時間経過後の処理
console.log('timerID2:' + timerID2);

 
function stop2() {
  console.log('stop2実行');
  window.clearInterval(timerID2);
}

 

●途中で止めるとき(つまり一回目で止めればsetTimeout()と同じことできる)

var timerID2;
var i = 0;
timerID2 = window.setInterval(function () {
  console.log('処理しました2');
  i++;
  if (i == 5) {
    console.log('stop2実行');
    window.clearInterval(timerID2);
  }
}, 3000);

 

●名前ルーレット

繰り返し処理停止用の値
var timerID1;
関数内のif文の条件で使用する値
名前ルーレットの開始・停止に使用
true:名前ルーレット開始
false:名前ルーレット停止
var flag = true;
配列の部屋番号の値
var num = 0;

関数定義
function toggle() {
  名前ルーレットを回す処理
  if (flag) {
    console.log('start');
    二回目ボタン押した時にelseに分岐するように「false」にする
    flag = false;
    「スタート」から「決定」に変更
    document.getElementById('btn1').value = '決定';
    名前ルーレットを回転開始
    timerID1 = window.setInterval(function () {
      var nameList = [
        '田中'//0
        '佐藤'//1
        '鈴木'//2
      ];
配列の部屋番号を1増やす
      num++; 
      条件:配列の部屋数とnumの値が等しい
      処理:numに0を代入
      指定できる配列部屋番号を超えたら0に戻して
      存在しない部屋を参照しないようにする
      if (num == nameList.length) {
        num = 0;
      }
      console.log(num);
      document.getElementById('display1').innerHTML = nameList[num];
    }, 50);
    console.log('timerID1:' + timerID1);
  }
  名前ルーレットを止める処理
  else {
    console.log('stop');
    ボタンの文字を「決定」から「スタート」
    document.getElementById('btn1').value = 'スタート';
    ルーレット止める
    window.clearInterval(timerID1);
    ルーレット開始できるように「true」に戻す
    flag = true;
  }
}

 

●ID属性で指定した要素の属性を変更

var num = 0//配列の部屋番号

window.setInterval(function () {
  var imgList = [
    ['img/a001.png''僕のキーボード'],
    ['img/a002.png''手書きのシューズ'],
    ['img/a003.jpg''しもつかれドロップス'],
    ['img/a004.jpg''墨つぼ'],
  ];
  num++;
  if (num == imgList.length) {
    num = 0;
  }
  console.log(num);
 
  document.getElementById('change').src = imgList[num][0];
  document.getElementById('change').alt = imgList[num][1];
}, 1000);

 

●スクロールメソッド 

f:id:chromiumpig:20200819154512p:plain

●HTML

  <p>動き方(scrollメソッド2実行時のみ):
    <select id="select1">
      <option value="auto">auto</option>
      <option value="instant">instant</option>
      <option value="smooth">smooth</option>
    </select>
  </p>