微信小程序圖片點擊切換和收藏功能是非常常用的!有更好寫法的請留言,喜歡小程序和web前端開發的請加我微信Angelo_Sifan
效果圖如下

1 <image catchtap='onCollectionTap' wx:if="{{collected}}" src="/images/icon/collect1.png"></image> 2 <image wx:else catchtap='onCollectionTap' src="/images/icon/collect.png"></image>
首先對Image綁定相應變量,選用catchxxx而不選用bindxxx進行綁定是因為,catch不會出發冒泡事件就不會向父節點傳遞,寫的過程中一定要用wx:if和wx:else來進行判斷。然后我們還需要在JS中對onCollectionTap變量進行定義,最后當組件觸發事件時,邏輯層綁定該事件的處理函數會收到一個事件對象。
/*這是對應的JS文件*/
2 Page({
3 data: {
4
5 },
6 onLoad: function (option) {
7 var postId = option.id;//要先在對應的數據文本中對每個欄目定義postId、比如postId: 0 postId:1
8 this.data.currentPostId = postId; //借助頂部data作為中轉,拿到上面這行postid后,將它放到下面var postCollected = postsCollected[]中
9 //將這個postId從onLoad中傳遞到下面的onCollectionTap中
10 var postData = postsData.postList[postId];//定義每個新聞列表對應順序是哪個新聞內容
11
12 //用戶收藏功能
14 var postsCollected = wx.getStorageSync('posts_collected') //從緩存中讀取所有的緩存狀態
15 if (postsCollected) { //postsCollected為真的情況,在緩存中存在
16 var postCollected = postsCollected[postId]//讀取其中一個緩存狀態
17 this.setData({
18 collected: postCollected //將是否被收藏的狀態上綁定到collected這個變量上
19 })
20 }
21 else { //為假的情況,緩存中為空的情況
22 var postsCollected = { }; //對postsCollected進行一個賦值操作,從而防止為空,從而省掉后面對它是否為空進行測試的步驟
23 postsCollected[postId] = false; // 讓當前的這篇文章狀態為false,從而收藏星星不點亮
24 wx.setStorageSync('posts_collected', postsCollected);//將postsCollected對象放到緩存中
25 }
26 },
27 onCollectionTap: function (event) { // 定義onCollectionTap事件用來確定文章是否收藏,如果沒收藏就能點亮星星進行收藏
28 var postsCollected = wx.getStorageSync('posts_collected'); //獲取緩存的方法
29 var postCollected = postsCollected[this.data.currentPostId]; //確定當前文章是否有緩存的狀態,傳遞參數方法、借助其他參數來傳遞變量,如上的data
30 postCollected = !postCollected;// 取反操作,收藏變成未收藏、未收藏變為收藏
31 postsCollected[this.data.currentPostId] = postCollected;//整體緩存的某一篇文章的緩存值等於postCollected從而更新一個變量
32 wx.setStorageSync('posts_collected', postsCollected);//更新文章是否收藏的緩存值,相當於在數據庫中做了一次更新。
33 //更新Data的數據綁定變量,從而實現圖片切換
34 this.setData({
35 collected: postCollected //當前的collected為postCollected
36 })
37 }
38 )}
