JavaScriptにおけるタイマーとオブジェクト操作の実践

タイマーの実践的応用

JavaScriptのタイマーをCSSスタイル操作と組み合わせることで、動的なインタラクション効果を実現できます。

要素の形状変化アニメーション

<div id="shapeTarget"></div>
<script>
const shapeElement = document.getElementById("shapeTarget");
let radiusValue = 0;
shapeElement.addEventListener('click', () => {
  const intervalId = setInterval(() => {
    shapeElement.style.borderRadius = `${radiusValue++}px`;
  }, 30);
});
</script>

イージング効果付き移動

<div id="movingTarget"></div>
<script>
const mover = document.getElementById("movingTarget");
mover.style.position = 'absolute';
mover.style.left = '0px';
let velocity = 1;

mover.addEventListener('click', () => {
  const moveInterval = setInterval(() => {
    velocity *= 1.08;
    mover.style.left = `${velocity}px`;
    if(velocity > 1000) clearInterval(moveInterval);
  }, 30);
});
</script>

フェードアウト効果

<div id="fadeElement"></div>
<script>
const fadeTarget = document.getElementById("fadeElement");
fadeTarget.addEventListener('click', () => {
  const fadeInterval = setInterval(() => {
    fadeTarget.style.opacity -= 0.02;
    if(fadeTarget.style.opacity <= 0) {
      fadeTarget.style.display = 'none';
      clearInterval(fadeInterval);
    }
  }, 30);
});
</script>

モーダルダイアログのアニメーション実装

<button id="modalTrigger">表示</button>
<div class="modalContainer">
  <div class="modalContent">
    <!-- モーダル内容 -->
  </div>
</div>

<script>
const modal = document.querySelector('.modalContainer');
const content = document.querySelector('.modalContent');
const trigger = document.getElementById('modalTrigger');

trigger.addEventListener('click', () => {
  modal.style.display = 'block';
  let opacityLevel = 0;
  
  const fadeIn = setInterval(() => {
    opacityLevel += 0.05;
    modal.style.opacity = opacityLevel;
    if(opacityLevel >= 1) clearInterval(fadeIn);
  }, 30);
});

function hideModal() {
  let opacityLevel = 1;
  const fadeOut = setInterval(() => {
    opacityLevel -= 0.05;
    modal.style.opacity = opacityLevel;
    if(opacityLevel <= 0) {
      modal.style.display = 'none';
      clearInterval(fadeOut);
    }
  }, 30);
}
</script>

eval関数の活用

<textarea id="codeInput"></textarea>
<button id="executeBtn">実行</button>
<script>
document.getElementById('executeBtn').addEventListener('click', () => {
  try {
    eval(document.getElementById('codeInput').value);
  } catch(error) {
    console.error('実行エラー:', error.message);
  }
});
</script>

URLエンコーディング処理

<script>
const encodeData = (data) => {
  const base64Encoded = btoa(data);
  return encodeURIComponent(base64Encoded);
};

const decodeData = (encoded) => {
  const decoded = decodeURIComponent(encoded);
  return atob(decoded);
};
</script>

ウィンドウ操作メソッド

<button id="newWindow">新規ウィンドウ</button>
<button id="closeWindow">ウィンドウを閉じる</button>
<script>
let newWindow;

document.getElementById('newWindow').addEventListener('click', () => {
  newWindow = window.open('https://example.com', '_blank');
});

document.getElementById('closeWindow').addEventListener('click', () => {
  if(newWindow) newWindow.close();
});
</script>

JavaScriptオブジェクト操作

オブジェクト生成方法

// オブジェクトリテラル
const userProfile = {
  age: 25,
  gender: 'male',
  describe() {
    console.log(`年齢:${this.age}, 性別:${this.gender}`);
  }
};

// クラス定義
class UserAccount {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  
  displayInfo() {
    console.log(`${this.name}: ${this.age}歳`);
  }
}
const newUser = new UserAccount('田中', 30);

thisキーワードの挙動

class Account {
  constructor(balance) {
    this.balance = balance;
  }
  
  showBalance() {
    console.log(`残高: ${this.balance}円`);
  }
}

const myAccount = new Account(5000);
const balanceDisplay = myAccount.showBalance;

// 通常メソッド呼び出し
myAccount.showBalance(); // 正しく表示

// 参照のみ代入
balanceDisplay(); // thisがundefinedになる

組み込みオブジェクト活用

// 数値フォーマット
const price = 12345.678;
console.log(price.toLocaleString()); // "12,345.678"

// 日付操作
const now = new Date();
console.log(`${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`);

// 文字列処理
const textData = " JavaScript ";
console.log(textData.trim().toUpperCase()); // "JAVASCRIPT"

タグ: javascript タイマー setInterval モーダルダイアログ オブジェクト指向

6月4日 17:15 投稿