主頁 > 企業開發 > 記錄-Vue移動端日歷設計與實作

記錄-Vue移動端日歷設計與實作

2023-04-27 08:34:36 企業開發

這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

作業中遇到一個需求是根據日歷查看某一天/某一周/某一月的睡眠報告,但是找了好多日歷組件都不是很符合需求,只好自己手寫一個日歷組件,順便記錄一下,

先看看UI給的設計圖和,需求是有資料的日期做標記,可以查看某一周/某一月的資料,周資料不用自定義,就按照日歷上的周資料截取.

實作效果

1.規劃dom部磁區塊劃分

2.頁面實作

選擇月份和選擇年份與日期做了條件渲染,切換方式是點擊頂部時間切換選項

<template>
  <div >
    <div >
      <div  @click="dateOperate('down')">
        <div></div>
      </div>
      <div  @click="selectDate">{{ date.join("/") }}</div>
      <div  @click="dateOperate('up')">
        <div></div>
      </div>
    </div>
    <!-- 日期串列 -->
    <div  v-if="show === 'date'">
      <div >
        <!-- 日歷頭 -->
        <div v-for="item in header" :key="item">
          {{ item }}
        </div>
        <!-- 日串列 -->
        <div
          v-for="(s, k) in dayList"
          :
          :key="s + '-' + k"
          @click="selectDay(s)"
        >
          {{ s.day }}
          <div
            :
          ></div>
        </div>
      </div>
      <!-- 操作欄 -->
      <div >
        <div
          
          v-for="k in weeks + 1"
          :key="k"
          @click="weekReport(k)"
        >
          {{ k === 1 ? "" : "看周報" }}
        </div>
      </div>
    </div>
    <!-- 月份串列 -->
    <div  v-else-if="show === 'month'">
      <div
        :
        v-for="i in 12"
        :key="i"
        @click="selectMonth(i)"
      >
        {{ i }}月
      </div>
    </div>
    <!-- 年份串列 -->
    <div
      
      v-else
      @touchmove="touchMove"
      @touchstart="touchStart"
    >
      <div
        :
        v-for="i in yearList"
        :key="i"
        @click="selectYear(i)"
      >
        {{ i }}
      </div>
    </div>
    <!-- 底部操作欄 -->
    <div >
      <div >
        <div ></div>
        <div >代表有睡眠報告</div>
      </div>
      <div >
        <div  @click="cancel">取消</div>
        <div  @click="changeReport">看月報</div>
      </div>
    </div>
  </div>
</template>

css部分

<style lang="scss" scoped>
.calendar {
  width: 100%;
  background-color: #fff;

  .date-top {
    width: 100%;
    padding: 20px;
    display: flex;
    justify-content: space-around;
    align-items: center;
    .left,
    .right {
      width: 100px;
      height: 100%;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      div {
        width: 20px;
        height: 20px;
        background-color: #00b7ae;
      }
    }
    .left > div {
      clip-path: polygon(0% 50%, 100% 0%, 100% 100%);
    }

    .right > div {
      clip-path: polygon(0% 0%, 100% 50%, 0% 100%);
    }

    .time {
      font-size: 38px;
      font-weight: 500;
      color: #333333;
    }
  }
  .date-list,
  .year-list,
  .month-list {
    width: 100%;
    padding: 30px;
    height: 540px;
  }
  .month-list,
  .year-list {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: auto;
    .month-item {
      text-align: center;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 30px;
      height: 122px;
    }
    .month-item:active {
      background-color: #eee;
    }
    .active {
      background-color: #dcf4f3;
    }
  }
  .date-list {
    padding-top: 0;
    display: flex;
    .date-content {
      flex: 1;
      height: 100%;
      display: grid;
      grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
      grid-template-rows: auto;
      grid-gap: 20px 20px;
      div {
        height: 100%;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        border-radius: 10px;
      }
      .other-day {
        color: rgba($color: #363636, $alpha: 0.6) !important;
      }
      .today {
        background-color: #dcf4f3;
      }
      .date-item {
        font-size: 28px;
        font-weight: 400;
        color: #363636;
        .check {
          width: 10px;
          height: 10px;
          margin-top: 6px;
          border-radius: 50%;
          background-color: #00b7ae;
          opacity: 0;
        }
        .have {
          opacity: 1;
        }
      }
    }
    .date-btn {
      height: 100%;
      width: 80px;
      font-size: 22px;
      color: #4eb9f5;
      display: grid;
      grid-template-columns: 1fr;
      grid-template-rows: auto;
      grid-gap: 20px 20px;
      margin-left: 20px;
      .btn-item {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100%;
      }
    }
  }

  .date-bottom {
    width: calc(100% - 80px);
    display: flex;
    justify-content: space-between;
    align-content: center;
    padding: 20px;
    margin: 0 auto;
    border-top: 1px solid #eee;
    .b-left,
    .b-right {
      display: flex;
      align-items: center;
    }
    .b-left {
      .tab {
        width: 27px;
        height: 26px;
        background: #dcf4f3;
        border-radius: 13px;
      }
      .totip {
        font-size: 24px;
        font-weight: 400;
        color: #363636;
        margin-left: 20px;
      }
    }
    .b-right {
      .cancel {
        font-size: 26px;
        font-weight: 500;
        color: rgba($color: #000000, $alpha: 0.5);
      }
      .m-report {
        width: 195px;
        line-height: 70px;
        color: #fff;
        font-size: 26px;
        background: linear-gradient(196deg, #50dcdc, #18b6b7);
        border-radius: 20px;
        margin-left: 50px;
        text-align: center;
      }
    }
  }
}
</style>

3.接下來是邏輯處理部分

日資料的顯示一共42條資料,先獲取當前月的總天數,將每個月的天數保存在一個陣列里,然后根據傳入的引數回傳相應的天數, 因為有閏年的存在,2月會是29天,所以做了閏年的判斷.然后獲取每周的第一天是周幾,使用new Date().getDay()獲取某一天是周幾,回傳的是0-7,這里為了方便使用將日歷表頭用陣列保存起來回傳的數字剛好是日里頭對應的下標,然后根據第一天是周幾計算出需要補上個月的幾天資料,通過new Date(y,m,0)可以獲取到上個月最后一天的,然后向日資料中添加上個月最后幾天的資料,補充下個月開始的幾天資料,直接使用42減去當月的天數和補充的上個月的天數得到的就是需要補充的下月天數.

月資料的切換顯示,前后翻動切換年資料,每年固定都是12月所以就直接寫固定值12然后v-for遍歷生成dom

年資料的切換顯示,每頁顯示12條資料,保存每頁資料的第一條和最后一條用于前后翻頁計算顯示的資料+12或者-12.

校驗選擇的月份和已選擇的日期是否匹配,因為選擇日期后再切換月份有可能切換到的月份沒有選擇的日期如31日30日29日,所以需要驗證是否正確,若是沒有的話就當前月的最后一天.

手勢操作沒有寫完整,只寫了年份選擇的滑動事件邏輯.

為了方便js部分的代碼每行都有寫詳細的注釋

自定月選擇日期范圍只需要修改日期點擊事件的邏輯,新增一個引數判斷是單日期選擇還是選擇一個日期范圍,在事件處理里面記錄點擊的兩個日期并計算中間的日期保存回傳.

<script>
import { formatTime } from "@/utils/format";
export default {
  name: "calendar",
  props: {
    haveList: {
      type: Array,
      default: [],
    },
  },
  data() {
    return {
      // 切換日期選擇
      show: "date",
      // 日歷頭
      header: ["日", "一", "二", "三", "四", "五", "六"],
      // 選擇日期
      date: [],
      // 年串列
      yearList: [],
      // 天串列
      dayList: [],
      // 定時器
      timer: null,
      // 手勢操作資料
      move: {
        pageX: 0,
        fNum: null,
        lNum: null,
      },
      // 第一天是周幾
      weeks: 0,
    };
  },
  created() {},
  mounted() {
    let time = new Date();
    this.date.push(
      time.getFullYear(),
      formatTime(time.getMonth() + 1),
      formatTime(time.getDate())
    );
    this.countDay();
  },
  methods: {
    // 計算顯示的天資料
    countDay() {
      console.log("chufa");
      let [y, m, d] = this.date;
      // 獲取第一天是周幾
      let week = new Date(`${y}/${m}/1`).getDay(),
        // 獲取當前月的上個月多少天
        lastDays = this.getDays(y, m - 1),
        // 獲取這個月有多少天
        days = this.getDays(y, m);
      // 計算這個月有多少周
      this.weeks = Math.ceil((days - (7 - week)) / 7) + 1;
      // 將當前月份的天數生成陣列
      this.dayList = Array.from({ length: this.getDays(y, m) }, (v, k) => {
        return {
          day: formatTime(k + 1),
          month: m,
          year: y,
        };
      });
      // 將本月1日前的資料補齊
      for (let i = lastDays; i > lastDays - week; i--) {
        this.dayList.unshift({
          day: i,
          // 如果當前日期是1月補齊的是去年12月的資料
          month: +m - 1 === 0 ? 12 : formatTime(+m - 1),
          year: +m - 1 === 0 ? y - 1 : y,
        });
      }
      // 計算需要補齊多少天
      let length = this.weeks * 7 - this.dayList.length;
      console.log("length", week, lastDays, days, this.weeks);
      // 將本月最后一天的資料補齊
      for (let i = 1; i <= length; i++) {
        this.dayList.push({
          day: i,
          // 如果當前日期是12月補齊的是明年年1月的資料
          month: +m + 1 > 12 ? 1 : formatTime(+m + 1),
          year: +m + 1 > 12 ? y + 1 : y,
        });
      }

      console.log(this.dayList);
    },
    // 頂部時間點擊事件
    selectDate() {
      let type = {
        month: "year",
        date: "month",
      };
      // 判斷點擊事件選擇月份還是年份
      if (this.show !== "year") {
        this.show = type[this.show];
      }
      // 如果是月份就計算dateList資料
      if (this.show === "month") {
        // 清空每頁顯示的年份資料
        this.yearList.length = 0;
        // 計算頁面顯示的年份資料 每頁顯示12條資料
        for (let i = this.date[0] - 4; i <= this.date[0] + 7; i++) {
          this.yearList.push(i);
        }
      }
    },
    // 螢屏點擊事件
    touchStart(val) {
      // 獲取按下螢屏的x軸坐標
      this.move.pageX = val.touches[0].pageX;
    },
    // 左右滑動切換事件
    touchMove(val) {
      // 獲取按下螢屏移動結束的x軸坐標
      let move = val.touches[0].pageX;
      clearTimeout(this.timer);
      // 判斷往左滑動還是往右滑動
      // 滑動結束x軸坐標減去最初按下坐標為負數就是往左滑動,翻看當前日期以后的年份
      if (move - this.move.pageX < -20) {
        console.log("右滑", this.move.lNum);
        // 定時器防抖
        this.timer = setTimeout(this.changeYear("right"), 100);
      }
      // 滑動結束x軸坐標減去最初按下坐標為正數就是往右滑動,翻看當前日期以前的年份
      if (move - this.move.pageX > 20) {
        // 定時器防抖
        this.timer = setTimeout(this.changeYear("left"), 100);
      }
    },
    // 年份選擇切換
    changeYear(type) {
      // 清空每頁顯示的年份資料
      this.yearList.length = 0;
      if (type === "right") {
        // 計算頁面顯示的年份資料 每頁顯示12條資料
        for (let i = this.move.lNum + 1; i < this.move.lNum + 13; i++) {
          this.yearList.push(i);
        }
      } else {
        for (let i = this.move.fNum - 12; i < this.move.fNum; i++) {
          this.yearList.push(i);
        }
      }
    },
    // 年份點擊事件
    selectYear(val) {
      this.date[0] = val;
      this.show = "month";
    },
    // 月份點擊事件
    selectMonth(val) {
      this.date[1] = val;
      this.show = "date";
      this.countDay();
      this.checkDay();
    },
    // 校驗選擇的月份和已選擇的日期是否匹配
    checkDay() {
      // 獲取選擇的年月有多少天 防止這年不是閏年 就將日期跳轉到28號,或者有的月份沒有31號就跳到30號
      let num = this.getDays(this.date[0], this.date[1]);
      if (num < this.date[2]) {
        this.date.splice(2, 1, num);
      }
    },
    // 日期點擊事件
    selectDay(val) {
      let oVal = this.date[1];
      this.date.splice(1, 2, val.month, val.day);
      if (val.month !== oVal) {
        this.countDay();
      }
      this.$emit("change", this.date.join("-"));
    },
    // 獲取某個月有多少天
    getDays(year, month) {
      // 一年中每個月的天數
      let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
      // 判斷是不是閏年 2月29天
      if (year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)) {
        days[1] = 29;
      }
      return days[month - 1];
    },
    //左右按鈕點擊事件
    dateOperate(type) {
      let [y, m, d] = this.date;
      // 如果是向后翻
      if (type === "up") {
        // 日期向后翻 切換月份
        if (this.show === "date") {
          if (+m === 12) {
            this.date.splice(0, 1, y + 1);
            this.date.splice(1, 1, "01");
          } else {
            this.date.splice(1, 1, formatTime(+m + 1));
          }
          // 月份向后翻 切換年份
        } else if (this.show === "month") {
          this.date.splice(0, 1, y + 1);
          // 年份向后翻 重組資料
        } else {
          this.changeYear("right");
        }

        // 如果是前后翻
      } else {
        // 日期向前翻 切換月份
        if (this.show === "date") {
          if (+m === 1) {
            this.date.splice(0, 1, y - 1);
            this.date.splice(1, 1, 12);
          } else {
            this.date.splice(1, 1, formatTime(+m - 1));
          }
          // 月份向前翻 切換年份
        } else if (this.show === "month") {
          this.date.splice(0, 1, y - 1);
          // 年份向前翻 重組資料
        } else {
          this.changeYear("left");
        }
      }
      this.countDay();
      this.checkDay();
    },
    // 右側按鈕點擊事件
    weekReport(i) {
      if (i === 1) return;
      let arr = [],
        // 選擇一周的資料 開始
        s = 7 * (i - 1) - 7,
        // 結束
        e = 7 * (i - 1);
      // 遍歷日資料 截取選擇的周資料
      for (let k = s; k < e; k++) {
        arr.push(
          `${this.dayList[k].year}-${this.dayList[k].month}-${this.dayList[k].day}`
        );
      }
      this.$emit("weekReport", arr);
    },

    // 看月報事件
    changeReport() {
      let [y, m, d] = this.date;
      this.$emit("changeReport", `${y}-${m}`);
    },
    // 取消事件
    cancel() {
      this.$emit("cancel");
    },
  },
  computed: {},
  watch: {
    yearList(nVal, oVal) {
      // 記錄每一頁顯示的資料第一位和最后一位 用于計算下一頁或者上一頁的資料
      this.move.fNum = nVal[0];
      this.move.lNum = nVal[11];
    },
    deep: true,
    immediate: true,
  },
};
</script>

formatTime是給月份和日期小于10的前面加0的方法

本文轉載于:

https://juejin.cn/post/7218048201981853757

如果對您有所幫助,歡迎您點個關注,我會定時更新技術檔案,大家一起討論學習,一起進步,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/551334.html

標籤:其他

上一篇:JS中的Map、Set、WeakMap和WeakSet

下一篇:返回列表

標籤雲
其他(158214) Python(38107) JavaScript(25395) Java(18001) C(15217) 區塊鏈(8260) C#(7972) AI(7469) 爪哇(7425) MySQL(7148) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5329) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4562) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2431) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1960) Web開發(1951) HtmlCss(1928) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1855) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 記錄-Vue移動端日歷設計與實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 作業中遇到一個需求是根據日歷查看某一天/某一周/某一月的睡眠報告,但是找了好多日歷組件都不是很符合需求,只好自己手寫一個日歷組件,順便記錄一下。 先看看UI給的設計圖和,需求是有資料的日期做標記,可以查看某一周/某一月的資料,周資料不用自 ......

    uj5u.com 2023-04-27 08:34:36 more
  • JS中的Map、Set、WeakMap和WeakSet

    在JavaScript中,Map、Set、WeakMap和WeakSet是四個不同的資料結構,它們都有不同的特點和用途: 1. Map :Map是一種鍵值對的集合,其中的鍵和值可以是任意型別的。與物件類似,它們可以通過鍵來訪問值。不同之處在于,Map可以使用任意型別作為鍵,而物件只能使用字串或Sy ......

    uj5u.com 2023-04-27 08:34:28 more
  • JS中的Map、Set、WeakMap和WeakSet

    在JavaScript中,Map、Set、WeakMap和WeakSet是四個不同的資料結構,它們都有不同的特點和用途: 1. Map :Map是一種鍵值對的集合,其中的鍵和值可以是任意型別的。與物件類似,它們可以通過鍵來訪問值。不同之處在于,Map可以使用任意型別作為鍵,而物件只能使用字串或Sy ......

    uj5u.com 2023-04-27 08:34:16 more
  • VSCode Webview中如何實作點擊下載圖片

    眾所周知,在一個普通的HTML頁面中,如果要實作一個鏈接點擊后下載圖片,只需要在頁面上放一個<a>標簽,然后將屬性href的值指向圖片的URL或者Base64字串就可以了。或者按照stackoverflow上提供的方法動態創建<a>標簽來完成圖片的下載動作。不過原理都是相同的。 但是這個方法在VS ......

    uj5u.com 2023-04-27 08:33:52 more
  • Geotools處理shape檔案

    shape檔案結構 filename.shp: shapes filename.shx: 索引檔案 filename.dbf: 結構化資料檔案 filename.qix: 空間索引檔案 filename.fix: fid索引檔案 filename.sld: 樣式檔案 依賴 <dependency> ......

    uj5u.com 2023-04-27 08:33:31 more
  • 單窗演算法的地表溫度反演:谷歌地球引擎GEE代碼

    本文介紹在GEE中基于Landsat遙感影像實作地表溫度(LST)單窗演算法反演的代碼。 1 背景知識 基于遙感資料的地表溫度(LST)反演目前得到了廣泛的應用,尤其是面向大尺度、長時間范圍的溫度資料需求,遙感方法更是可以凸顯其優勢。目前,基于各類遙感資料源的地表溫度反演方法不斷得以改進,精度亦不斷提 ......

    uj5u.com 2023-04-27 08:33:22 more
  • Geotools處理shape檔案

    shape檔案結構 filename.shp: shapes filename.shx: 索引檔案 filename.dbf: 結構化資料檔案 filename.qix: 空間索引檔案 filename.fix: fid索引檔案 filename.sld: 樣式檔案 依賴 <dependency> ......

    uj5u.com 2023-04-27 08:32:42 more
  • 單窗演算法的地表溫度反演:谷歌地球引擎GEE代碼

    本文介紹在GEE中基于Landsat遙感影像實作地表溫度(LST)單窗演算法反演的代碼。 1 背景知識 基于遙感資料的地表溫度(LST)反演目前得到了廣泛的應用,尤其是面向大尺度、長時間范圍的溫度資料需求,遙感方法更是可以凸顯其優勢。目前,基于各類遙感資料源的地表溫度反演方法不斷得以改進,精度亦不斷提 ......

    uj5u.com 2023-04-27 08:32:32 more
  • 【谷歌插件開發】獲取當前網站COOKIE并上報HTTP-API

    由于本人每天需要登錄網站查看資料并分析統計匯總,而每次機械式地搜索和簡單計算,十分繁瑣。我們可以寫個定時任務,每天根據cookie獲取網站資料并遍歷統計。
    腳本得以成功執行的關鍵是需要獲取到COOKIE
    故,寫了個谷歌插件用來上報COOKIE ......

    uj5u.com 2023-04-26 08:09:41 more
  • 閉包

    閉包理解 如何產生閉包 當一個嵌套的內部(子)函式參考了嵌套外部(父)函式的變數(函式)時--就產生了閉包 閉包是什么 使用chrome除錯查看 理解一 -- 閉包是嵌套的內部函式 理解二 -- 閉包是包含被參考變數(函式)的物件 閉包存在于嵌套的內部函式中 產生閉包的條件 函式嵌套 內部函式參考了 ......

    uj5u.com 2023-04-26 08:02:12 more