【超詳細】手搓一個微信日記本


🎀 文章作者:二土電子

🌸 關注公眾號獲取更多資料!

🐸 期待大家一起學習交流!


??這里對之前的微信記事本小程序進行了重新編寫,增加了更加詳細的步驟描述,將全部圖片都改成了本地圖片,針對一些細節進行了補充,本文完整工程可關注文末公眾號獲取。

實現效果

文章目錄

  • 一、安裝開發工具
  • 二、新建小程序項目
  • 三、文件夾詳解
  • 四、新建/刪除頁面
    • 4.1 刪除頁面
    • 4.2 添加頁面
  • 五、新建圖標文件夾
  • 六、全局配置
  • 七、index頁面設計
    • 7.1 設置頁面背景
    • 7.2 添加日記本圖標
    • 7.3 點擊圖標跳轉
  • 八、list頁面設計
    • 8.1 添加日記按鈕
    • 8.2 顯示全部日記
    • 8.3 刪除日記
  • 九、add頁面設計
    • 9.1 添加文本輸入框
    • 9.2 添加保存按鈕
  • 十、details頁面設計
    • 10.1 跳轉實現
    • 10.2 詳情頁面實現
  • 十一、注意事項

一、安裝開發工具

注冊這里就不再贅述了,可以直接到微信公眾平臺注冊賬號。注冊完成后進入頁面,點擊左側的“開發工具”,下載自己所需的版本即可。


下載開發工具

二、新建小程序項目

新建時我們選擇不使用云服務,選擇TS-基礎模板。

新建項目

三、文件夾詳解

第二步點擊確定后,我們就進入了微信小程序開發的頁面。其中有許多文件夾,這里我們簡單介紹一下各個文件夾的作用。

微信小程序開發文件夾

  • pages
    存放所有的小程序頁面,這里只有兩個頁面,分別是index和logs。
  • utils
    用來存放工具性質的模塊,比如時間格式化。
  • app.json
    小程序的全局配置文件。
  • app.ts
    小程序的全局邏輯文件
  • app.wxss
    小程序的全局樣式文件

除了上述描述的文件,每一個頁面都有自己的.jison、.ts、.wxml和.wxss文件

  • .jison
    jison是一種數據格式,并不是編程語言,在小程序中,JSON扮演的靜態配置的角色。值得注意的是,.jison文件中不能添加注釋。
  • .wxml
    類似于.html,我們看到的一些控件都是在這里添加的。
  • .ts
    邏輯文件,一些功能的函數實現。
  • .wxss
    樣式文件,用來調整整體頁面一些控件或文字的樣式。

四、新建/刪除頁面

我們要設計的記賬本主要有個頁面

  • index
    引導頁面,有一個日記本圖標,點擊可進入下一個頁面。
  • list
    全部日記列表頁面,可在本頁面點擊添加日記、刪除日記或者進入日記詳情。
  • add
    添加日記頁面。
  • details
    日記詳情頁面。

我們首先需要刪除掉原先自帶的logs頁面,然后新建其他幾個頁面。

4.1 刪除頁面

刪除比較簡單,我們選中logs頁面的文件夾,右鍵刪除即可,但是不要忘記,我們還需要在app.jison文件中將logs頁面的路徑刪掉。

刪除頁面

4.2 添加頁面

添加頁面也非常簡單,并不需要我們手動新建文件夾,添加文件夾下面的其他文件。我們只需要在app.jison文件中寫入我們想要添加的頁面,保存之后就會自動在pages文件夾中生成頁面文件夾,非常的方便。這里給大家演示一下。

添加頁面

五、新建圖標文件夾

此次設計的日記本,使用的是本地圖標,因此這里介紹的是如何添加本地圖標,當然也可以自己去網上找一些網頁圖片添加進來,這里就不再做詳細介紹了。

如果想使用本地圖標,我們需要給所有的圖標準備一個文件夾,這里我們直接新建到微信小程序工程文件所在的文件夾里。

新建圖標文件夾

六、全局配置

首先我們簡單的對我們小程序全局進行簡單的美化,實際也就是在app.jison文件中,修改窗口的一些參數。

我們修改了導航欄的背景顏色,導航欄的文字和字體顏色。
導航欄配置

這里貼一下程序,方便復制粘貼

  "window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": "#c8b4eb","navigationBarTitleText": "ertu電子","navigationBarTextStyle": "white"},

七、index頁面設計

7.1 設置頁面背景

我們上面說了,本次使用的圖片全部是本地圖片,這里準備了一個背景圖片,存放在images文件夾,添加進來即可。

.wxml文件程序

<view><image class="bg-image" src="/images/background.jpg"></image>
</view>

.wxss文件程序

/* 背景圖片樣式 */
.bg-image{width: 100%;height: 100%;position: fixed;z-index: -1;   /* 放在最底層 */
}

至此,背景圖片添加完成,可以看一下效果。

添加背景圖片

7.2 添加日記本圖標

添加日記圖標與上面的操作類似,下載好圖標后,創建樣式,添加到頁面。程序如下

.wxml程序

<image class="appicon" src="/images/diaryicon.png"></image>

.wxss程序

/* App圖標樣式 */
.appicon{margin: 5%;   /* 設置上、下、左、右間距 */width: 100rpx;height: 100rpx;position: fixed;
}

實現效果如下

添加日記圖標

為了提示該圖標功能為日記本,這里添加一個文字提示,.wxml文件添加下面的程序

  <text style="color: white; font-size: medium; position: relative; left: 36rpx; top: 145rpx">日記本</text>

7.3 點擊圖標跳轉

接下來我們需要實現,點擊日記本圖標,跳轉到日記列表頁面。實際就是給日記本圖標添加一個點擊事件的處理函數。

首先修改.wxml文件程序,給圖片的點擊事件添加一個處理函數。

<image class="appicon" src="/images/diaryicon.png" bind:tap="gotolistpage"></image>

然后在.ts文件中編寫詳細的函數實現。

  gotolistpage(){wx.navigateTo({url: '../list/list'   //跳轉鏈接})}
})

實現效果如下

點擊圖標跳轉

八、list頁面設計

8.1 添加日記按鈕

首先按照上面介紹的方法,修改list頁面的背景,添加一個添加日記的圖標,給圖標的點擊事件添加一個跳轉功能,跳轉到添加日記頁面。實現效果如下

添加日記跳轉

8.2 顯示全部日記

顯示全部日記首先需要在.wxml文件中添加一個滾動的控件用來顯示全部日記列表,程序如下

  <!--底部滾動--><scroll-view class="des-scr" scroll-y="true"><!--循環顯示所有日記內容--><block wx:for="{{totalDiaryConcent}}"><!-- 利用data-將當前的索引傳遞到刪除或者打開詳情的函數 --><view class="des-view" bindtap="diary_detail" bindlongtap="delet" data-content="{{item}}" data-saveid="{{index}}"><text class="des-text">{{item.des}}</text><text class="des-tiemText">{{index + 1}}</text></view><!-- </navigator> --></block></scroll-view>

通過上面的程序我們可以看出,我們給每一條日記增加了一個點擊事件處理函數和長按事件處理函數,功能會在后面介紹。

然后在.ts文件中,實現獲取當前本地緩存的全部日記功能。首先在.ts文件中添加用到的數據

  data: {id: '',totalDiaryConcent: []   // 全部日記},

然后實現獲取全部本地緩存日記功能

  // 全部日記顯示onShow: function () {// 獲取當前全部日記內容// 必須要新定義一個再賦值才能正常顯示,原因未知var arryTemp = wx.getStorageSync('totalDiaryConcent');this.setData({totalDiaryConcent: arryTemp})},

8.3 刪除日記

長按日記,會彈出提示框,點擊確定后會刪除對應日記,這里有兩個重點問題,首先是如何知道用戶選擇的是哪一條日記,其次是如何刪除用戶選擇的日記。

首先說一下如何知道用戶選擇的哪一條日記,這里利用data-將用戶選中的日記ID傳給.ts文件。

其次說一下知道了用戶想要刪除哪一條日記之后如何將該條日記刪除掉,這里用的方法個人覺得比較巧妙。定義一個新的數組,獲取到傳遞過來的日記ID后利用for循環將除了想要刪除的日記外的之前的本地緩存日記全部重新緩存到新的數組,然后緩存到本地緩存中。

但是需要注意的是,這樣雖然在本地緩存中刪除了想要刪除的日記,但是會發現主頁面中它并沒有消失,此時需要我們在刪除完成后重新渲染一次頁面。

  // 刪除日記內容delet:function(e:any){// 進行作用域外部指向let that = this;wx.showModal({title: '溫馨提示',content: '是否要刪除這條日記?',// 點擊確定后刪除掉對應緩存success (res) {if (res.confirm) {// 獲取傳遞過來的索引var curId = e.currentTarget.dataset.saveid;// 獲取全部日記內容var arryTemp = wx.getStorageSync('totalDiaryConcent');// 設置一個新的數組var newDiaryContent = [];// 利用for循環將不需要刪除的存儲起來for (var i = 0;i < arryTemp.length;i ++) {if (i != curId) {newDiaryContent.push(arryTemp[i])}}// 重新更新全部日記內容,其中不包含要刪除的日記// 一定注意這里不要將新的日記內容用單引號引起來,否則會出現刪除一條日記后冒出來很多條空日記// 而且之后也不能再添加新日記wx.setStorageSync('totalDiaryConcent',newDiaryContent);}// 利用onShow中同樣的方法重新渲染頁面var arryTemp = wx.getStorageSync('totalDiaryConcent');that.setData({totalDiaryConcent: arryTemp})}})},

九、add頁面設計

下面我們來設計一下添加日記的頁面。

9.1 添加文本輸入框

.wxml程序如下

  <!-- 輸入長度默認限制為140,maxlength為-1時表示不限制最大長度 --><textarea class= "the-textarea"  bindinput="getInputText" style="  margin: 5%;width: 90%;height: 90%" maxlength="-1"></textarea>

文本輸入框的輸入時間由函數“getInputText”來處理,用來回去輸入的內容,函數實現在.ts文件。

  // 文字輸入框getInputText(e:any) {//記錄輸入的文字   this.setData({inputText: e.detail.value})},

9.2 添加保存按鈕

  <!-- 保存按鈕 --><button class="the-btn" bindtap="saveButton">保存心情</button>

保存按鈕的點擊事件由“saveButton”函數來處理,函數實現在.ts文件,注釋比較明確,這里就不再贅述了。

  // 保存按鈕saveButton() {// 如果輸入是空if (this.data.inputText.length == 0) {return;}// 輸入內容不為空else {// 獲取本地緩存的之前的所有日記內容var diaryContent = wx.getStorageSync('totalDiaryConcent');// 如果之前有日記內容if (diaryContent != null && diaryContent != '') {// 獲取當前日記總條數var curTotalNum = wx.getStorageSync('totalDiaryNum');// 日記總條數加1作為下一條日記idvar nextDiaryId = curTotalNum + 1;// 添加新日記,id為之前日記總條數加1diaryContent.push({ 'des': this.data.inputText, 'diaryid': nextDiaryId });// 存儲新日記總條數wx.setStorageSync('totalDiaryNum', 'nextDiaryId');}// 之前沒有日記內容,是第一條日記else {diaryContent = [{ 'des': this.data.inputText, 'diaryid': 0 }];// 保存第一條日記wx.setStorageSync('totalDiaryNum', '0');this.setData({id: '0'})}}// 將輸入內容存入緩存wx.setStorageSync('totalDiaryConcent', diaryContent);// 跳轉回上一頁面wx.navigateBack({})},

在.ts文件中,需要先定義好用到的數據

  data: {inputText: '',   // 存儲輸入內容diaryid: ''},

至此,我們來看一下目前實現的效果

實現效果

十、details頁面設計

最后我們來設計日記詳情頁面,也就是點擊日記,會跳轉到日記詳情。

10.1 跳轉實現

在日記列表也就是list頁面,點擊日記我們應該能夠跳轉到日記詳情頁面。所以我們給每一條日記都增加一個點擊函數“diary_detail”,函數實現是在list的.ts文件中。

  // 查看日記詳情diary_detail:function(e:any){// 獲取點擊的日記的內容var item = e.currentTarget.dataset.content// 將點擊到的日記的內容傳遞到下一個頁面var url = '/pages/details/details?des=' + item.deswx.navigateTo({url: url,})},

10.2 詳情頁面實現

日記詳情顯示較為簡單,需要解決的問題主要有兩個,一個是如何確定用戶想要查看的是哪條日記內容,這個在刪除日記中已經解決。第二個就是如何將用戶想要查看的日記詳情顯示出來,這里說白了就是如何實現頁面間的傳值,將獲取到的日記內容從主頁傳遞到詳情頁面,然后把它渲染到頁面就好啦。

.wxml文件程序如下

<view class="diary-detail"><text>{{showContent}}</text>
</view>

.wxss文件程序如下

.diary-detail{font-size: large;color: #8B4513;/* 多文本自動換行 */word-break:break-all;
}

.ts文件中加入獲取日記內容的函數

  /*** 生命周期函數--監聽頁面加載* 獲取點擊的日記內容*/onLoad(options) {this.setData({showContent: options.des})}

十一、注意事項

  • 本地圖片路徑中不要有中文!
  • 當前的一些樣式布局是根據IPhon5布局,對于其他機型某些地方可能會出現比例失調或者錯位的情況,可以自行根據需要修改。
  • 本程序中的日記全部存儲在本地緩存中,只能本機看到,其他用戶無法看到。

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

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

相關文章

用EasyAVFilter將網絡文件或者本地文件推送RTMP出去的時候發現CPU占用好高,用的也是vcodec copy呀,什么原因?

最近同事在用EasyAVFilter集成在EasyDarwin中做視頻拉流轉推RTMP流的功能的時候&#xff0c;發現怎么做CPU占用都會很高&#xff0c;但是視頻沒有調用轉碼&#xff0c;vcodec用的就是copy&#xff0c;這是什么原因呢&#xff1f; 我們用在線的RTSP流就不會出現這種情況&#x…

SSM個性化旅游管理系統開發mysql數據庫web結構java編程計算機網頁源碼eclipse項目

一、源碼特點 SSM 個性化旅游管理系統是一套完善的信息系統&#xff0c;結合springMVC框架完成本系統&#xff0c;對理解JSP java編程開發語言有幫助系統采用SSM框架&#xff08;MVC模式開發&#xff09;&#xff0c;系統具有完整的源代碼和數據庫 &#xff0c;系統主要采用B…

raid磁盤陣列

在單機時代&#xff0c;采用單塊磁盤進行數據存儲和讀寫的方式&#xff0c;由于尋址和讀寫的時間消耗&#xff0c;導致I/O性能非常低&#xff0c;且存儲容量還會受到限制。另外&#xff0c;單塊磁盤極其容易出現物理故障&#xff0c;經常導致數據的丟失。此時&#xff0c;RAID技…

Java設計模式

&#x1f648;作者簡介&#xff1a;練習時長兩年半的Java up主 &#x1f649;個人主頁&#xff1a;程序員老茶 &#x1f64a; ps:點贊&#x1f44d;是免費的&#xff0c;卻可以讓寫博客的作者開心好久好久&#x1f60e; &#x1f4da;系列專欄&#xff1a;Java全棧&#xff0c;…

新材料制造ERP用哪個好?企業應當如何挑選適用的

有些新材料存在特殊性&#xff0c;并且在制造過程中對車間、設備、工藝、人員等方面提出更高的要求。還有些新材料加工流程復雜&#xff0c;涉及多種材料的請購、出入庫、使用和管理等環節&#xff0c;解決各個業務環節無縫銜接問題是很多制造企業面臨的管理難題。 新材料制造…

牙科診所小程序開發案例

一、背景&#xff1a; 針對傳統口腔醫療領域中口腔診所推廣難,紙質信息保存難等問題&#xff0c;設計并開發了基于微信小程序實現口腔服務助手平臺。為了給人們提供便捷&#xff0c;快速的預約方式&#xff0c;提高社會人群對口腔健康的關注力度。通過微信小程序互聯網技術&…

文旅虛擬人IP:數字時代的傳統文化推薦官

近幾年&#xff0c;隨著文旅虛擬人頻“上崗”&#xff0c;虛擬人逐漸成為了文旅品牌的一種新穎的傳統文化傳播思路。 文旅品牌定制化推出虛擬人&#xff0c;本質原因是2023旅游業全面復蘇&#xff0c;各文旅玩法同質化現象嚴重&#xff0c;在這樣的境遇下&#xff0c;文旅品牌開…

OpenMLDB v0.8.4 診斷工具全面升級

新的v0.8.4版本中&#xff0c;我們對于診斷工具進行了全面系統化的升級&#xff0c;以提供更加完整和智能化的診斷報告&#xff0c;有助于高效排查 OpenMLDB 集群問題&#xff0c;大幅提升運維效率。 相比于之前的版本&#xff0c;新的診斷工具增添一鍵診斷功能&#xff0c;使…

首個央企量子云計算項目,中標!

6月29日&#xff0c;北京玻色量子科技有限公司&#xff08;簡稱“玻色量子”&#xff09;成功中標中國移動云能力中心“2023—2024年量子算法及光量子算力接入關鍵技術研究項目”&#xff0c;這是玻色量子繼與移動云簽訂“五岳量子云計算創新加速計劃”后&#x1f517;&#xf…

角色管理--體驗產品專家崗

研發組織管理--角色管理--體驗產品專家崗 定位 產品用戶代言人&#xff0c;產品體驗守門員&#xff0c;保證用戶體驗感知不低于行業水平并嘗試新體驗&#xff1b; 所需資質 對產品交互有自己的心得&#xff0c;可通過設計工具直觀表達觀點能站在用戶角度思考問題&#xff0c…

揭秘 systemd:釋放 Linux 服務管理的力量【systemd 一】

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交給時間 &#x1f3e0; &#xff1a;小破站 揭秘 systemd&#xff1a;釋放 Linux 服務管理的力量【systemd 一】 前言第一&#xff1a;systemd簡介第二&#xff1a;核心概念解析第三&#xff1a;服務管理與啟動過程第四…

bootstrap插件的基本使用

1.更新表格數據&#xff08;根據行索引&#xff1a;僅更新一個單元格&#xff09; var rows {index : index, //更新列所在行的索引field : "status", //要更新列的fieldvalue : "正常" //要更新列的數據 } $(#table_Id).bootstrapTable("updateCel…

DELPHI開發APP回憶錄二安卓與pc端路徑的選擇

路徑方法WinAndroidGetHomePathC:\Users\ggggcexx\AppData\Roaming/data/user/0/com.stella.scan/files/GetDocumentsPathC:\Users\ggggcexx\Documents/data/user/0/com.embarcadero.FirstAidExpert_FMX_D11/filesGetSharedDocumentsPathC:\Users\Public\Documents/storage/emu…

杰發科技AC7801——EEP內存分布情況

簡介 按照文檔進行配置 核心代碼如下 /*!* file sweeprom_demo.c** brief This file provides sweeprom demo test function.**//* Includes */ #include <stdlib.h> #include "ac780x_sweeprom.h" #include "ac780x_debugout.h"/* Define …

導出文件到指定路徑??

需求&#xff1a;點擊導出pdf按鈕&#xff0c;彈出系統文件夾彈框&#xff0c;可以選擇保存文件的位置。 經查詢window.showSaveFilePicker可實現&#xff0c;但這個api處于實驗階段&#xff0c;且用下來確實和瀏覽器類型、瀏覽器版本、以及本身api就不穩定有關系。 代碼見下…

Python,FastAPI,mLB網關,無法訪問/docs

根源就是js和ccs文件訪問路由的問題&#xff0c;首先你要有本地的文件&#xff0c;詳情看https://qq742971636.blog.csdn.net/article/details/134587010。 其次&#xff0c;你需要這么寫&#xff1a; /unicontorlblip就是我配置的mLB網關路由。 app FastAPI(titleoutpaint…

【力扣:421,2935】數組內最大異或對問題

思路&#xff1a;從最高位向低位構造&#xff0c;對每一位利用哈希表尋找是否存在可使此位為1的數 第一輪找1&#xff1a;清空哈希表&#xff0c;1&#xff0c;2存1&#xff0c;到3發現1^01&#xff0c;res|1<<3 第二輪找11&#xff1a;清空哈希表&#xff0c;1存10&…

如何開發洗鞋店用的小程序

隨著人們生活水平的提高&#xff0c;洗護行業是越來越細分化了&#xff0c;從最開始的干洗店包含洗護行業的所有服務到現在有專門為洗鞋開的店&#xff0c;如果開發一款洗鞋店用的小程序&#xff0c;可以實現用戶在家下單直接有人上門取鞋的話&#xff0c;應該如何去開發呢&…

將 Spring 微服務與 BI 工具集成:最佳實踐

軟件開發領域是一個不斷發展的領域&#xff0c;新的范式和技術不斷涌現。其中&#xff0c;微服務架構和商業智能&#xff08;BI&#xff09;工具的采用是兩項關鍵進步。隨著 Spring Boot 和 Spring Cloud 在構建強大的微服務方面的普及&#xff0c;了解這些微服務如何與 BI 工具…

11-@Transaction與AOP沖突解決

如題&#xff0c;最近碰到了一個問題&#xff0c;在public方法上添加Transaction沒有生效&#xff0c;事務沒有回滾。 我自己模擬了一個功能&#xff0c;向數據庫表User里面插入用戶數據。說一下代碼背景&#xff0c; 數據庫MySQL&#xff0c;持久化層Mybatis&#xff0c;項目使…