メニューを切り替える
個人設定メニューを切り替える
個人メニューを切り替える
ログインしていません
編集を行うと、IPアドレスが公開されます。

「場所でさがす」の版間の差分

提供: 川西図鑑
ページの作成:「<templatestyles src="カテゴリー一覧/styles.css" /> 川西市内の店舗・施設を「場所」から探せます。 最寄り駅・エリアごとに情報を整理しています。 <div class="category-grid"> <div class="category-card" id="station"> <h3 class="category-title">最寄駅から探す</h3> <div class="category-actions"> <html><a href="#station" class="genre-toggle">最寄り駅一覧を表示</a></html> </div> <div class="subgenres"> * …」
 
編集の要約なし
1行目: 1行目:
<templatestyles src="カテゴリー一覧/styles.css" />
<templatestyles src="カテゴリー一覧/styles.css" />
<html>
<script>
// ページ読み込み後に実行
document.addEventListener('DOMContentLoaded', function() {
  const grid = document.querySelector('.category-grid');
  let currentExpandedPanel = null;
 
  // すべてのジャンルで探すボタンにクリックイベントを追加
  const toggleButtons = document.querySelectorAll('.genre-toggle');
 
  toggleButtons.forEach(button => {
    button.addEventListener('click', function(e) {
      e.preventDefault();
     
      const card = this.closest('.category-card');
      const cardId = card.id;
      const wasOpen = card.classList.contains('is-open');
     
      // 既存の展開パネルを削除
      if (currentExpandedPanel) {
        currentExpandedPanel.remove();
        currentExpandedPanel = null;
      }
     
      // すべてのカードを閉じる
      document.querySelectorAll('.category-card').forEach(c => {
        c.classList.remove('is-open');
      });
     
      // クリックしたカードがもともと閉じていた場合のみ開く
      if (!wasOpen) {
        card.classList.add('is-open');
       
        // サブジャンルの内容を取得
        const subgenresContent = card.querySelector('.subgenres').innerHTML;
       
        // カードの位置を取得して、同じ行の最後に展開パネルを挿入
        const allCards = Array.from(grid.children).filter(el => el.classList.contains('category-card'));
        const cardIndex = allCards.indexOf(card);
       
        // グリッドの列数を計算(ウィンドウ幅に基づく)
        const gridStyle = window.getComputedStyle(grid);
        const gridTemplateColumns = gridStyle.gridTemplateColumns.split(' ').length;
       
        // 同じ行の最後のカードのインデックスを計算
        const rowEndIndex = Math.floor(cardIndex / gridTemplateColumns) * gridTemplateColumns + gridTemplateColumns - 1;
        const insertAfterCard = allCards[Math.min(rowEndIndex, allCards.length - 1)];
       
        // 展開パネルを作成
        const expandedPanel = document.createElement('div');
        expandedPanel.className = 'subgenres-expanded';
        expandedPanel.innerHTML = subgenresContent;
       
        // 展開パネルを挿入
        insertAfterCard.after(expandedPanel);
        currentExpandedPanel = expandedPanel;
       
        // アニメーション用に少し遅延
        setTimeout(() => {
          expandedPanel.classList.add('is-visible');
        }, 10);
      }
    });
  });
 
  // ウィンドウリサイズ時に展開パネルの位置を再計算
  let resizeTimer;
  window.addEventListener('resize', function() {
    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(function() {
      const openCard = document.querySelector('.category-card.is-open');
      if (openCard) {
        // 再度開き直す
        openCard.querySelector('.genre-toggle').click();
        openCard.querySelector('.genre-toggle').click();
      }
    }, 250);
  });
});
</script>
</html>
川西市内の店舗・施設を「場所」から探せます。   
川西市内の店舗・施設を「場所」から探せます。   
最寄り駅・エリアごとに情報を整理しています。
最寄り駅・エリアごとに情報を整理しています。

2026年1月29日 (木) 12:30時点における版

川西市内の店舗・施設を「場所」から探せます。 最寄り駅・エリアごとに情報を整理しています。

エリアからさがす

▶ エリア一覧を表示

◆ 川西中央エリア

◆ 多田・清和台エリア

◆ けやき坂・緑台エリア

◆ 東谷・山下エリア

◆ 北部・山間エリア


※ 各駅・エリアページから、 飲食店・美容・施設などのカテゴリー別一覧を見ることができます。