鴻蒙OSUniApp 實現一個精致的日歷組件#三方框架 #Uniapp

使用 UniApp 實現一個精致的日歷組件

前言

最近在開發一個約會小程序時,需要實現一個既美觀又實用的日歷組件。市面上雖然有不少現成的組件庫,但都不太符合我們的設計需求。于是,我決定從零開始,基于 UniApp 自己實現一個功能完善、UI精致的日歷組件。本文將分享我的實現思路和過程,希望對你有所幫助。

需求分析

首先,讓我們明確一下這個日歷組件需要滿足的需求:

  1. 日歷展示:能夠清晰展示年、月、日信息
  2. 日期選擇:支持單選、范圍選擇功能
  3. 樣式定制:支持自定義主題顏色、特殊日期標記
  4. 事件標記:能夠在特定日期顯示事件標記或小紅點
  5. 手勢操作:支持左右滑動切換月份
  6. 農歷展示:可選擇性展示農歷信息

基于以上需求,我們開始設計和編碼。

實現思路

1. 數據結構設計

日歷組件的核心是對日期數據的管理。我們需要設計一個合理的數據結構來存儲和操作日期信息。

{year: 2023,          // 當前顯示的年份month: 5,            // 當前顯示的月份(1-12)day: 15,             // 當前選中的日期weeks: [             // 按周分組的日期數據[                  // 第一周{day: 30,       // 日期month: 4,      // 所屬月份isCurrentMonth: false,  // 是否屬于當前月isToday: false,         // 是否是今天isSelected: false,      // 是否被選中hasEvent: false,        // 是否有事件lunar: '四月初一',      // 農歷信息disable: false          // 是否禁用},// ... 其他日期數據],// ... 其他周數據]
}

2. 核心功能實現

首先,我們需要計算出日歷網格中的所有日期數據。這包括當前月的所有日期,以及為了填滿網格而需要顯示的上個月和下個月的部分日期。

以下是生成日歷數據的核心函數:

/*** 生成日歷數據* @param {Number} year 年份* @param {Number} month 月份(1-12)* @return {Array} 日歷數據數組*/
function generateCalendarData(year, month) {// 獲取當前月第一天是星期幾const firstDayOfMonth = new Date(year, month - 1, 1).getDay();// 獲取當前月的天數const daysInMonth = new Date(year, month, 0).getDate();// 獲取上個月的天數const daysInPrevMonth = new Date(year, month - 1, 0).getDate();// 獲取今天的日期信息const today = new Date();const isToday = (date) => {return date.getFullYear() === today.getFullYear() && date.getMonth() === today.getMonth() && date.getDate() === today.getDate();};// 日歷數據數組let days = [];// 添加上個月的日期for (let i = 0; i < firstDayOfMonth; i++) {const prevDay = daysInPrevMonth - firstDayOfMonth + i + 1;const prevMonth = month - 1 > 0 ? month - 1 : 12;const prevYear = prevMonth === 12 ? year - 1 : year;days.push({day: prevDay,month: prevMonth,year: prevYear,isCurrentMonth: false,isToday: isToday(new Date(prevYear, prevMonth - 1, prevDay)),isSelected: false,hasEvent: false,  // 根據實際情況設置lunar: getLunarDate(prevYear, prevMonth, prevDay),  // 獲取農歷日期disable: false});}// 添加當前月的日期for (let i = 1; i <= daysInMonth; i++) {days.push({day: i,month,year,isCurrentMonth: true,isToday: isToday(new Date(year, month - 1, i)),isSelected: false,hasEvent: false,  // 根據實際情況設置lunar: getLunarDate(year, month, i),  // 獲取農歷日期disable: false});}// 添加下個月的日期,補滿 6 行const totalDays = 42;  // 6行7列const remainingDays = totalDays - days.length;for (let i = 1; i <= remainingDays; i++) {const nextMonth = month + 1 <= 12 ? month + 1 : 1;const nextYear = nextMonth === 1 ? year + 1 : year;days.push({day: i,month: nextMonth,year: nextYear,isCurrentMonth: false,isToday: isToday(new Date(nextYear, nextMonth - 1, i)),isSelected: false,hasEvent: false,  // 根據實際情況設置lunar: getLunarDate(nextYear, nextMonth, i),  // 獲取農歷日期disable: false});}// 將日期按周分組const weeks = [];for (let i = 0; i < days.length; i += 7) {weeks.push(days.slice(i, i + 7));}return weeks;
}

3. 組件開發

接下來,讓我們使用 UniApp 開發這個日歷組件。我們將創建一個獨立的組件,以便在不同項目中復用。

<!-- calendar.vue -->
<template><view class="calendar"><!-- 日歷頭部 --><view class="calendar-header"><view class="calendar-title"><text>{{ year }}年{{ month }}月</text></view><view class="calendar-controls"><view class="prev-month" @click="changeMonth(-1)"><text class="iconfont icon-left"></text></view><view class="next-month" @click="changeMonth(1)"><text class="iconfont icon-right"></text></view></view></view><!-- 星期欄 --><view class="calendar-weeks"><view class="week-item" v-for="(item, index) in weekDays" :key="index"><text :class="{'weekend': index === 0 || index === 6}">{{ item }}</text></view></view><!-- 日期網格 --><view class="calendar-days"><view class="calendar-week" v-for="(week, weekIndex) in weeks" :key="weekIndex"><viewclass="day-item"v-for="(day, dayIndex) in week":key="dayIndex":class="{'current-month': day.isCurrentMonth,'other-month': !day.isCurrentMonth,'today': day.isToday,'selected': day.isSelected,'disabled': day.disable}"@click="selectDay(day)"><view class="day-number">{{ day.day }}</view><view class="lunar-date" v-if="showLunar">{{ day.lunar }}</view><view class="event-dot" v-if="day.hasEvent"></view></view></view></view><!-- 底部操作欄 --><view class="calendar-footer" v-if="showFooter"><view class="btn-today" @click="goToToday">今天</view><view class="btn-clear" @click="clearSelection">清除</view></view></view>
</template><script>
export default {name: 'Calendar',props: {// 默認選中日期value: {type: [Date, Array],default: null},// 是否多選multiple: {type: Boolean,default: false},// 是否顯示農歷showLunar: {type: Boolean,default: true},// 是否顯示底部操作欄showFooter: {type: Boolean,default: true},// 特殊日期,包含事件的日期events: {type: Array,default: () => []},// 主題色themeColor: {type: String,default: '#2979ff'}},data() {return {year: new Date().getFullYear(),month: new Date().getMonth() + 1,weeks: [],weekDays: ['日', '一', '二', '三', '四', '五', '六'],selectedDays: []};},watch: {value: {handler(val) {this.initSelection(val);},immediate: true},events: {handler() {this.updateCalendar();}}},created() {this.updateCalendar();},methods: {// 更新日歷數據updateCalendar() {this.weeks = this.generateCalendarData(this.year, this.month);this.markEvents();this.initSelection(this.value);},// 生成日歷數據generateCalendarData(year, month) {// 實現與上文相同的函數// ...},// 切換月份changeMonth(offset) {let newMonth = this.month + offset;let newYear = this.year;if (newMonth < 1) {newMonth = 12;newYear--;} else if (newMonth > 12) {newMonth = 1;newYear++;}this.year = newYear;this.month = newMonth;this.updateCalendar();},// 選擇日期selectDay(day) {if (day.disable) return;if (this.multiple) {const index = this.selectedDays.findIndex(d => d.year === day.year && d.month === day.month && d.day === day.day);if (index === -1) {// 添加選中日期this.selectedDays.push({year: day.year,month: day.month,day: day.day});} else {// 取消選中this.selectedDays.splice(index, 1);}} else {// 單選模式this.selectedDays = [{year: day.year,month: day.month,day: day.day}];}// 更新選中狀態this.updateSelectedStatus();// 觸發事件this.$emit('input', this.getSelectedDates());this.$emit('change', this.getSelectedDates());},// 初始化選中狀態initSelection(value) {if (!value) {this.selectedDays = [];} else if (Array.isArray(value)) {this.selectedDays = value.map(date => ({year: date.getFullYear(),month: date.getMonth() + 1,day: date.getDate()}));} else if (value instanceof Date) {this.selectedDays = [{year: value.getFullYear(),month: value.getMonth() + 1,day: value.getDate()}];}this.updateSelectedStatus();},// 更新選中狀態updateSelectedStatus() {this.weeks = this.weeks.map(week => {return week.map(day => {const isSelected = this.selectedDays.some(d => d.year === day.year && d.month === day.month && d.day === day.day);return { ...day, isSelected };});});},// 標記事件markEvents() {if (!this.events || !this.events.length) return;this.weeks = this.weeks.map(week => {return week.map(day => {const hasEvent = this.events.some(event => {const eventDate = new Date(event.date);return eventDate.getFullYear() === day.year &&eventDate.getMonth() + 1 === day.month &&eventDate.getDate() === day.day;});return { ...day, hasEvent };});});},// 返回選中的日期對象getSelectedDates() {const dates = this.selectedDays.map(d => {return new Date(d.year, d.month - 1, d.day);});return this.multiple ? dates : dates[0] || null;},// 跳轉到今天goToToday() {const today = new Date();this.year = today.getFullYear();this.month = today.getMonth() + 1;this.updateCalendar();},// 清除選擇clearSelection() {this.selectedDays = [];this.updateSelectedStatus();this.$emit('input', this.multiple ? [] : null);this.$emit('change', this.multiple ? [] : null);}}
};
</script><style lang="scss">
.calendar {background-color: #fff;border-radius: 12rpx;box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);padding: 20rpx;.calendar-header {display: flex;justify-content: space-between;align-items: center;margin-bottom: 20rpx;.calendar-title {font-size: 32rpx;font-weight: bold;}.calendar-controls {display: flex;.prev-month, .next-month {width: 60rpx;height: 60rpx;display: flex;justify-content: center;align-items: center;.iconfont {font-size: 28rpx;color: #666;}}}}.calendar-weeks {display: flex;border-bottom: 1px solid #f0f0f0;padding-bottom: 10rpx;.week-item {flex: 1;text-align: center;font-size: 28rpx;color: #999;.weekend {color: #ff5252;}}}.calendar-days {.calendar-week {display: flex;margin-top: 10rpx;.day-item {flex: 1;height: 80rpx;display: flex;flex-direction: column;justify-content: center;align-items: center;position: relative;border-radius: 8rpx;&.current-month {color: #333;}&.other-month {color: #ccc;}&.today {background-color: rgba(41, 121, 255, 0.1);.day-number {font-weight: bold;}}&.selected {background-color: v-bind(themeColor);color: #fff;.lunar-date {color: rgba(255, 255, 255, 0.8);}}&.disabled {color: #ddd;cursor: not-allowed;}.day-number {font-size: 28rpx;}.lunar-date {font-size: 20rpx;color: #999;margin-top: 4rpx;}.event-dot {position: absolute;width: 8rpx;height: 8rpx;border-radius: 50%;background-color: #ff5252;bottom: 6rpx;}}}}.calendar-footer {display: flex;justify-content: flex-end;margin-top: 20rpx;.btn-today, .btn-clear {padding: 6rpx 20rpx;font-size: 24rpx;border-radius: 4rpx;margin-left: 20rpx;}.btn-today {background-color: v-bind(themeColor);color: #fff;}.btn-clear {border: 1px solid #ddd;color: #666;}}
}
</style>

農歷計算

對于農歷的計算,我們可以使用第三方庫,比如 lunar-calendar,也可以自己實現。以下是一個簡化版的農歷計算函數:

function getLunarDate(year, month, day) {// 實際項目中建議使用成熟的農歷庫// 這里只做簡單演示const lunarInfo = [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,// ... 更多農歷數據];// 簡化版的農歷計算,實際項目中請使用完整實現const lunarDay = ['初一', '初二', '初三', '初四', '初五', '初六', '初七', '初八', '初九', '初十','十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十','廿一', '廿二', '廿三', '廿四', '廿五', '廿六', '廿七', '廿八', '廿九', '三十'];// 模擬計算農歷日期,實際使用中請使用準確算法const dayIndex = (year * 10000 + month * 100 + day) % 30;return lunarDay[dayIndex];
}

實際使用示例

下面是在實際項目中使用這個日歷組件的示例:

<template><view class="container"><view class="header"><text class="title">我的日程</text></view><view class="calendar-wrapper"><Calendarv-model="selectedDate":events="eventList"themeColor="#42b983"@change="onDateChange"/></view><view class="event-list"><view class="list-title"><text>{{ formatDate(selectedDate) }}的日程</text></view><view class="empty-tip" v-if="!todayEvents.length"><text>暫無日程安排</text></view><view class="event-item" v-for="(event, index) in todayEvents" :key="index"><view class="event-time">{{ event.time }}</view><view class="event-content"><text class="event-title">{{ event.title }}</text><text class="event-desc">{{ event.description }}</text></view></view></view></view>
</template><script>
import Calendar from '@/components/calendar/calendar.vue';export default {components: {Calendar},data() {return {selectedDate: new Date(),eventList: [{date: '2023-05-15',title: '項目會議',time: '10:00',description: '討論新功能開發計劃'},{date: '2023-05-18',title: '團隊建設',time: '14:00',description: '外出活動'},{date: '2023-05-22',title: '產品發布',time: '09:30',description: '新版本上線'}]};},computed: {todayEvents() {if (!this.selectedDate) return [];const dateStr = this.formatDate(this.selectedDate);return this.eventList.filter(event => event.date === dateStr);}},methods: {onDateChange(date) {console.log('選中日期變化:', date);},formatDate(date) {if (!date) return '';const year = date.getFullYear();const month = (date.getMonth() + 1).toString().padStart(2, '0');const day = date.getDate().toString().padStart(2, '0');return `${year}-${month}-${day}`;}}
};
</script><style lang="scss">
.container {padding: 30rpx;.header {margin-bottom: 30rpx;.title {font-size: 36rpx;font-weight: bold;}}.calendar-wrapper {margin-bottom: 40rpx;}.event-list {background-color: #fff;border-radius: 12rpx;padding: 20rpx;box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);.list-title {font-size: 30rpx;font-weight: bold;margin-bottom: 20rpx;color: #333;}.empty-tip {text-align: center;padding: 40rpx 0;color: #999;}.event-item {display: flex;padding: 20rpx 0;border-bottom: 1px solid #f5f5f5;&:last-child {border-bottom: none;}.event-time {width: 120rpx;color: #666;}.event-content {flex: 1;.event-title {font-size: 28rpx;color: #333;margin-bottom: 6rpx;}.event-desc {font-size: 24rpx;color: #999;}}}}
}
</style>

適配鴻蒙系統

隨著華為鴻蒙系統的普及,我們也需要考慮在鴻蒙系統上的兼容性。好消息是,UniApp已經開始支持鴻蒙系統的開發。要讓我們的日歷組件更好地適配鴻蒙系統,可以考慮以下幾點:

  1. 遵循鴻蒙設計規范:鴻蒙系統有自己的設計語言和規范,包括字體、顏色、圓角等。我們可以根據鴻蒙的設計規范調整組件樣式。

  2. 性能優化:鴻蒙系統注重流暢性和低功耗,我們可以減少不必要的渲染和計算,優化日歷組件的性能。

  3. 手勢適配:確保日歷組件的滑動等手勢操作在鴻蒙系統上響應流暢。

  4. 分辨率適配:鴻蒙設備的分辨率可能有所不同,確保組件在各種分辨率下都能正常顯示。

  5. 權限處理:如果日歷組件需要訪問系統日歷數據,需要適配鴻蒙的權限管理機制。

總結與思考

通過本文,我們從零開始實現了一個功能豐富、外觀精致的日歷組件。這個組件具有以下特點:

  1. 靈活的日期選擇:支持單選和多選模式
  2. 農歷顯示:可選擇性顯示農歷信息
  3. 事件標記:能夠在特定日期顯示事件標記
  4. 自定義主題:支持自定義主題顏色
  5. 手勢操作:支持左右滑動切換月份

當然,這個日歷組件還可以進一步優化和擴展,比如:

  • 添加周視圖、月視圖、年視圖切換功能
  • 支持日程管理,添加、編輯、刪除日程
  • 增加日程提醒功能
  • 支持農歷節日、法定節假日標記
  • 優化性能,減少不必要的重新渲染

希望這篇文章對你在 UniApp 開發中實現日歷組件有所幫助。如果有任何問題或建議,歡迎在評論區交流討論!

參考資料

  1. UniApp 官方文檔:https://uniapp.dcloud.io/
  2. Vue.js 文檔:https://cn.vuejs.org/
  3. 農歷計算算法:https://github.com/jjonline/calendar.js
  4. 鴻蒙開發文檔:https://developer.harmonyos.com/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79810.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyQt5完整指南:從入門到實踐

引言 PyQt5是Python編程語言的一個GUI&#xff08;圖形用戶界面&#xff09;工具包&#xff0c;它是Qt5應用程序框架的Python綁定。Qt是一個跨平臺的C應用程序開發框架&#xff0c;被廣泛用于開發GUI程序和非GUI程序。PyQt5讓Python開發者能夠使用Python語言享受到Qt框架的強大…

Excel的詳細使用指南

### **一、Excel基礎操作** #### **1. 界面與基本概念** - **工作簿&#xff08;Workbook&#xff09;**&#xff1a;一個Excel文件&#xff08;擴展名.xlsx&#xff09;。 - **工作表&#xff08;Worksheet&#xff09;**&#xff1a;工作簿中的單個表格&#xff08;默認名…

Linux grep -r 查找依賴包是否存在依賴類 Class

方法一&#xff1a;通過 Linux &#xff0c;grep -r ClassPath 命令 grep -f org.apache.kafka.connect.source.SourceRecord在 jar 包所在 lib 或者 lib/plugins 目錄下執行&#xff0c;grep -r&#xff0c; flink-sql-connector-sqlserver-cdc-3.3.0.jar 中此 kafka Source…

碎片筆記|AI生成圖像溯源方法源碼復現經驗(持續更新中……)

前言&#xff1a;本篇博客分享一些溯源方法的復現經驗&#xff0c;希望能幫助到大家&#x1f389;。 目錄 1. Close-set AttributionRepmixDe-FakeDNA-Net 2. Open-set AttributionPOSE 3. Single-Model AttributionOCC-CLIPLatentTracer 1. Close-set Attribution Repmix 論…

SAP Fiori Elements Object Page

?? SAP Fiori Elements Object Page:魔法積木城堡的建造秘密 想象一下,你曾經去過一個神奇的樂高主題公園,在那里,城堡會根據你的設計圖紙自動搭建,而你只需要提供一張設計說明書,不必親自擺放每一塊積木!這就是SAP Fiori Elements Object Page的渲染魔法! ???♂…

Git 用戶名與郵箱配置全解析:精準配置——基于場景的參數選擇

目錄 一、配置查看&#xff1a;理解多層級配置體系二、精準配置&#xff1a;基于場景的參數選擇1. 倉庫級配置&#xff08;推薦&#xff09;2. 用戶級配置3. 系統級配置 三、歷史提交信息修改1. 修改最近一次提交2. 修改多個歷史提交&#xff08;危險操作&#xff09; 五、配置…

Fabric系列 - SoftHSM 軟件模擬HSM

在 fabric-ca-server 上使用軟件模擬的 HSM(密碼卡) 功能 安裝 SoftHSMv2 教程 SoftHSMv2 默認的配置文件 /etc/softhsm2.conf默認的token目錄 /var/lib/softhsm/tokens/ 初始化和啟動fabric-ca-server&#xff0c;需要設置一個管理員用戶的名稱和密碼 初始化令牌 # 初始…

醫學影像系統的集成與工作流優化

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

轉發多臺px4仿真UDP數據到地面站

轉發腳本的任務需求 仿真采用UDP通信方式&#xff0c;在 wsl 中仿真三臺飛機&#xff0c;項目需要將一臺電腦中的三臺飛機的數據打包發送到另一臺飛機的地面站&#xff0c;但地面站是無法直接訪問另一臺主機的 wsl 中的端口的&#xff0c;wsl 中的端口需要本機才能訪問&#x…

FPGA圖像處理(五)------ 圖片水平鏡像

利用bram形成雙緩沖&#xff0c;如下圖配置所示&#xff1a; wr_flag 表明 buffer0寫 還是 buffer1寫 rd_flag 表明 buffer0讀 還是 buffer1讀 通過寫入邏輯控制(結合wr_finish) 寫哪個buffer &#xff1b;寫地址 進而控制ip的寫使能 通過狀態緩存來跳轉buffer的…

微服務八股(自用)

微服務 SpringCloud 注冊中心&#xff1a;Eureka 負載均衡&#xff1a;Ribbon 遠程調用&#xff1a;Feign 服務熔斷&#xff1a;Hystrix 網關&#xff1a;Gateway/Zuul Alibaba 配置中心&#xff1a;Nacos 負載均衡&#xff1a;Ribbon 服務調用&#xff1a;Feign 服務…

ESP32_IDF_OTA_HTTP升級固件

ESP32_IDF_OTA_HTTP升級固件 前言&#xff1a;一個項目的主控使用的是ESP32&#xff0c;因為封裝外殼的原因&#xff0c;所以需要采用OTA的方式進行升級&#xff0c;因為之前有對WIFI的OTA有所了解&#xff0c;所以在此基礎上&#xff0c;使用官方提供的native_ota_example例程…

MySQL表結構化:數據類型與表生命周期詳解

引言 各位數據庫學習者大家好&#xff01;今天我們將深入探討MySQL中最核心的對象——表&#xff08;Table&#xff09;的各類操作 &#x1f3af;。表是存儲數據的基石&#xff0c;就像Excel中的工作表一樣&#xff0c;但功能要強大得多&#xff01;無論是電商網站的用戶信息&…

React中的狀態管理Dva總結

在 React 開發中&#xff0c;隨著應用的復雜度增加&#xff0c;如何高效地管理應用狀態成為了一個非常重要的問題。為了解決這一問題&#xff0c;很多開發者選擇了 Redux&#xff0c;然而 Redux 的學習曲線較陡&#xff0c;且需要配置較多的樣板代碼。為此&#xff0c;Ant Desi…

數據結構中的高級排序算法

希爾排序 你可以將希爾排序理解成——先通過幾次分組的、較小的組間插入排序將原數組變得有序&#xff0c;最后再進行一次序列基本有序的完整插入排序。 #include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))void print_arr(int arr[], int len) {for…

計算機視覺最不卷的方向:三維重建學習路線梳理

提到計算機視覺&#xff08;CV&#xff09;&#xff0c;大多數人腦海中會立馬浮現出一個字&#xff1a;“卷”。卷到什么程度呢&#xff1f;2022年秋招CV工程師崗位數下降了16%&#xff0c;但求職人數增加了23%&#xff0c;求職人數與招聘崗位的比例達到了恐怖的15:1&#xff0…

【Docker】Docker環境下快速部署Ollama與Open-WebUI:詳細指南

Docker環境下快速部署Ollama與Open-WebUI&#xff1a;詳細指南 在本篇文章中&#xff0c;我們將深入探討如何在Docker中高效部署 Ollama 和 Open-WebUI&#xff0c;并解決在實際使用中常見的問題&#xff0c;確保你的模型服務穩定高效地運行。 一、Ollama 和 Open-WebUI 快速部…

Vue3學習(組合式API——Watch偵聽器詳解)

目錄 一、Watch偵聽器。 &#xff08;1&#xff09;偵聽單個數據。 &#xff08;2&#xff09;偵聽多個數據。&#xff08;數組寫法&#xff1f;&#xff01;&#xff09; &#xff08;3&#xff09;immediate參數。(立即執行回調) &#xff08;3&#xff09;deep參數。(深層監…

SARIMA-LSTM融合模型對太陽黑子數量預測分析|附智能體數據代碼

全文智能體鏈接&#xff1a;https://tecdat.cn/?p41969 分析師&#xff1a;Peng Fan 本研究以太陽黑子活動數據為研究對象&#xff0c;旨在幫助客戶探索其未來走勢并提供預測分析。首先&#xff0c;通過對數據的清洗和處理&#xff0c;包括離群值的識別與處理以及時間序列的建…

簡單易懂的JavaScript中的this指針

文章目錄 默認綁定 / 隱式綁定如何調整this1.用變量固定this2.箭頭函數2.bind3.call/apply&#xff08;一次性&#xff09; 默認綁定 / 隱式綁定 要找this指針指向誰&#xff0c;我們首先要做的是&#xff1a;找到一個明確的對象&#xff0c;這個對象調用了含有this指針的函數…