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 のユーザーとグループ管理によく使われるコマンドの概要

推薦する

Office ファイルのオンライン プレビュー用の Vue サンプル コード

最近、電子アーカイブに取り組んでおり、バックエンドではファイルの Huawei Cloud OSS ...

axios でリクエストをキャンセルし、重複リクエストを防ぐ方法について簡単に説明します。

目次序文コア - キャンセルトークン実用的なアプリケーションとパッケージングいくつかの小さな詳細序文...

jsを使用してシンプルな弾幕スクリーンシステムを実装する

この記事では、弾幕効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的な...

Vueでのバスの使用に関する詳細な説明

Vue バス メカニズム (バス) vuex を使用するだけでなく、vue 内の親子以外のコンポーネ...

JavaScript でオブジェクトのプロパティを削除する方法

1. 削除delete は、オブジェクトのプロパティを残さずに削除する唯一の方法ですが、その「代替」...

Ubuntu 16.04 に nvidia ドライバー + CUDA + cuDNN をインストールする詳細なチュートリアル

準備1. GPUがCUDAをサポートしているかどうかを確認するlspci | grep -i nvi...

適応的な幅と高さを持つ9つの正方形グリッドの背景画像の切り取りの分析

<br />幅と高さが適応するオリジナルの 9 グリッド レイアウトをベースに、ネットワ...

jQuery キャンバスで画像検証コード例を描画する

この記事では、jQuery Canvasの描画画像検証コードの具体的なコードを例として紹介します。具...

Linux で実行中のバックグラウンド プログラムを表示および終了する方法

Linux タスク管理 - バックグラウンド実行と終了fg、bg、ジョブ、&、ctrl + ...

MySQL SQL ステートメントが遅い場合の一般的な原因と解決策

1. インデックス不足または無効なインデックスによるクエリの遅延数千万件のデータを含むテーブルで、イ...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...

MySQLにインデックスを追加する方法

インデックスの簡単な紹介は次のとおりです。インデックスを追加する目的は、データベース クエリのパフォ...

Firefox の CSS を使用してデータを盗む

0x00 はじめに数か月前、Firefox に脆弱性 (CVE-2019-17016) があること...

Nginx 構成の実装 https

目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...

CSS3 でシンプルな白い雲が浮かぶ背景効果を実現

これは非常にシンプルな純粋な CSS3 の白い雲の浮遊する背景効果です。浮かぶ白い雲の特殊効果は、C...