Vue.jsはカレンダー機能を実装します

Vue.jsはカレンダー機能を実装します

この記事では、カレンダー機能を実装するためのVue.jsの具体的なコードを例として紹介します。具体的な内容は以下のとおりです。

ギットハブ

機能要件

Vue.js を使用して、指定した年と月のカレンダー テーブルを実装し、バックグラウンド インターフェイス データを使用して、対応する日付の空気質の説明などの情報を追加します。バックグラウンドでは今月の空気質指数のデータを伝送し、フロントエンドではカレンダーを生成し、対応する日付に空気質指数を追加します。

空気質データの例:

データ.json

{
  「コード」: 200,
  "メッセージ": "",
  "データ": [{
      「時間」: 「2020-08-01」、
      "kqzl": "素晴らしい"
    },
    {
      「時間」: 「2020-08-02」、
      "kqzl": "良い"
    },
    {
      「時間」: 「2020-08-03」、
      "kqzl": "良い"
    }
  ]
}

実装

<テンプレート>
  <div id="アプリ">
    <h1 スタイル="text-align:center;">
      2020-08</h1>
    <div class="カレンダーコンテナ">
      <div class="カレンダー週">
        <div class="cw-inner">
          <div class="cw-item"
               :style="{width: setItemWidth}"
               v-for="(item, index) 週"
               :key="インデックス">
            {{アイテム}}
          </div>
        </div>
      </div>
      <div class="カレンダー日">
        <div class="cd-list"
             v-for="(item, index) of day"
             :key="インデックス">
          <div class="cl-item"
               :style="{width: setItemWidth}"
               v-for="(子,インデックス) 項目"
               :key="インデックス"
               :class="[{has: child}]">
            <div class="ci-inner"
                 v-if="子">
              <span>{{child.date}}</span>
              <span v-if="child.text"
                    クラス="aqi"
                    :class="child.text.kqzl">
                {{child.text.kqzl}}
              </span>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</テンプレート>

<スクリプト>
import kqzlData from './assets/data.json' // 空気質データのエクスポート デフォルト {
  名前: 'アプリ',
  データ() {
    戻る {
      週: [
        '月曜日'、
        '火曜日'、
        '水曜日'、
        '木曜日'、
        '金曜日'、
        '土曜日'、
        '日曜日'、
      ]、
      日: []、
    }
  },
  計算: {
    setItemWidth() {
      100 / 7 + '%' を返す
    },
  },
  マウント() {
    this.createCalendar(2020, 8)
  },
  メソッド: {
    /**
     * @name: 日付のフォーマット * @param {date}
     */
    日付フォーマット(日付) {
      dateArr = date.split('-') とします。
      mounth = dateArr[1] >= 10 ? dateArr[1] : '0' + dateArr[1]とします。
      day = dateArr[2] >= 10 ? dateArr[2] : '0' + dateArr[2]とします。
      日付を返すArr[0] + '-' + 月 + '-' + 日
    },

    /**
     * @name: 日付情報 * @param {date}
     */
    getDayInfo(日付) {
      kqzl = kqzlData.data とします。
      formatDate = this.dateFormat(date) とします。
      txt = kqzl[kqzl.findIndex(item => item.time === formatDate)] とします。
      txt を返す
    },

    /**
     * @name: カレンダーテーブルを生成する * @param {year}
     * @param {マウントh}
     */
    createCalendar(年, 月) {
      // 一ヶ月には何日あるか let allDay = new Date(year, mounth, 0).getDate()
      // 月の 1 日は何曜日か let firstDay = this.judjeFirstDay(year, mounth)
      // 表示に必要な行数 let row = Math.ceil((allDay + firstDay) / 7)
      k = firstDay - 1 とします。
      結果 = []
      カウントを1にする
      // カレンダーの2次元配列を生成する for (let i = 0; i < row; i++) {
        結果[i] = 新しい配列(7)
        する {
          カウント <= allDay の場合 {
            結果[i][k] = {
              日付: カウント、
              // インターフェーステキストに従って日付に対応する情報を一致させます: this.getDayInfo(year + '-' + mounth + '-' + count),
            }
            キロ++
            カウント++
          } それ以外 {
            壊す
          }
        } (k < 7)の場合
        0 = 0 です
      }
      this.day = 結果
    },

    /**
     * @name: ある月の 1 日が何曜日であるかを決定します* @param {year}
     * @param {マウントh}
     */
    judjeFirstDay(年, 月) {
      date = new Date(年, 月 - 1, 1) とします。
      week = date.getDay() とします。
      weekArr = [1, 2, 3, 4, 5, 6, 7]とします。
      weekArr[週 - 1]を返す
    },
  },
}
</スクリプト>

<スタイル lang="scss">
.カレンダーコンテナ{
  テキスト配置: 中央;
  .calendar-week {
    下マージン: 4px;
    パディング: 0 4px;
    色: #fff;
    .cw-インナー{
      オーバーフロー: 非表示;
      背景: #a0a0a0;
      .cw-アイテム {
        フロート: 左;
        パディング: 8px 0;
      }
    }
  }
  .カレンダー日{
    .cd-リスト{
      オーバーフロー: 非表示;
      .cl-item {
        フロート: 左;
        最小高さ: 30px;
        ボックスのサイズ: 境界線ボックス;
        パディング: 4px;
        .ci-インナー{
          背景: #f5f5f5;
          パディング: 8px 0;
          スパン {
            表示: インラインブロック;
            &.aqi {
              色: #fff;
              背景: #a7cf8c;
              パディング: 0 4px;
              境界線の半径: 4px;
            }
            &。素晴らしい{
              背景: #a7cf8c;
            }
            &。良い{
              背景: #f7da64;
            }
            &。 軽度 {
              背景: #f29e39;
            }
            &。適度
              背景: #da555d;
            }
            &。厳しい
              背景: #b9377a;
            }
            &。深刻な{
              背景: #881326;
            }
          }
        }
      }
    }
  }
}
</スタイル>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue.js+boostrapプロジェクト実践(事例詳細説明)
  • Vue.jsでタブ切り替えと色変更操作を実装する解説
  • Vue.js での $emit の使用に関する詳細な説明
  • Vue.js スロットにおけるスコープ付きスロットの使用法の詳細な説明
  • Vue.jsはタイムライン機能を実装します
  • Vue.jsは背景テーブルコンポーネントのカプセル化を管理します
  • Vue.js フロントエンドプロジェクト向け多言語ソリューションのアイデアと実践
  • 大規模な Vue.js プロジェクトの構築と維持のための 10 のベスト プラクティス

<<:  CentOS7.6にMYSQL8.0をインストールする詳細な手順

>>:  Linux のユーザーとグループ管理によく使われるコマンドの概要

推薦する

JavaScript カスタム カレンダー効果

この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...

Mac 向け MySQL のインストールと設定のチュートリアル

この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...

イラスト風ウェブサイトホームページデザイン ウェブサイトデザインの新トレンド

視覚効果が非常に美しく、訪問者に強い印象を残すことがわかります。さらに、重要なポイントが強調され、訴...

MySQL ソート機能の詳細

目次1. 問題のシナリオ2. 原因分析3. 解決策4. 知識を広げる4.1 クエリの最適化を制限する...

Linux nohup はプログラムをバックグラウンドで実行し、表示します (nohup と &)

1. バックグラウンド実行一般的に、Linux 上のプログラムは .sh ファイル (./sh フ...

Windows サーバー管理におけるセキュリティの考慮事項

ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...

オンラインチャットを実現するVue+sshフレームワーク

この記事では、オンラインチャットを実現するためのVue + sshフレームワークの具体的なコードを参...

MySql で、存在しない場合は挿入し、存在する場合は更新する方法

まとめシナリオによっては、レコードがない場合は挿入し、レコードがある場合は更新するという要件がある場...

10 種類のモダンなレイアウトを実現するための CSS コード

序文日曜日に自宅で web.dev の 2020 3 日間ライブを視聴したところ、興味深い点がたくさ...

VMware kali仮想マシン環境の設定方法

1|0 カーネルをコンパイルする(1)uname -rコマンドを実行してカーネルバージョンを表示しま...

イメージの起動時にdocker runまたはdocker restartが自動的に終了する問題を解決します

コマンドを実行します: docker run --name centos8 -d centos /b...

CentOS 7 でゲートウェイを変更して IP を設定する方法の例

Centos7 バージョンをインストールするときに、外部ネットワークへの接続を選択すると、外部ネット...

効果的なウェブフォームのための 8 つのルール

ユーザーから情報を収集する場合、Web フォームを使用するより簡単で直接的な方法はありません。適切に...

CSS の複数行テキストがオーバーフローする場合の省略記号の例

複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...

MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い

1. テーブルAのデータを使用してMySQLのテーブルBの内容を更新するたとえば、データ テーブル内...