网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

【每日出擊運簽】小程序“踩坑”總結

發布時間:2018-05-05 15:01 所屬欄目:小程序開發教程

最近剛好接手支持了每日出擊運簽的小程序,在小程序完成以后,整理了一下初次接手小程序的一些體驗,所以有了現在這篇小總結。在小程序需求的進行期間,十分感謝澤賢,小蘇,俞煥,花花的指導~

 

話不多說,立馬送上小程序碼,大家可以掃碼體驗一下

 

 

每日出擊運簽小程序主要劃分為幾個功能模塊:

  • 搖一搖
  • 抽簽并顯示運簽結果
  • 保存圖片
  • 預約功能
  • 簽到功能
  • 積分功能
  • 評論功能

下面重點介紹一下搖一搖、抽簽并顯示運簽結果、保存圖片三個功能。

關于搖一搖功能

花叔早前已經寫過文章(鏈接如下:http://www.ifanr.com/minapp/880378)介紹過搖一搖的實現思路了,這里簡單歸納一下搖一搖功能的幾個主要的思路。

準備:

需要設置一組變量,保存搖一搖x,y,z三軸的數值,需要設置一個變量來記錄搖一搖的時間。

實現注意事項:

  1. 我們需要定一個閾值,作為搖一搖的判斷基準。
  2. 需要通過公式來計算單位時間內運動的路程,也就是我們想要的速度。如果這個速度超過了我們定下來的閾值,那么就算作用戶已經搖一搖

//計算 公式的意思是 單位時間內運動的路程,即為我們想要的速度
var speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 10000;
  1. 另外我們需要注意兩個小程序提供的API:

wx.onAccelerometerChange(CALLBACK):用于監聽加速度數據,在發生有加速度的動作的時候,執行搖一搖的判斷邏輯

wx.stopAccelerometer:在搖一搖的邏輯執行期間,需要停止監聽加速度數據,避免多次觸發搖一搖

  1. 為了給予用戶更好的搖一搖反饋,建議在執行搖一搖以后設置振動反饋,這個小程序API里面也帶有相關的接口:wx.vibrateShort(OBJECT)

關于抽簽并顯示運簽結果的功能

每日出擊運簽的小程序其中有一個需求是抽簽并顯示運簽結果。在用戶每天進入小程序的時候,通過搖一搖,得到一個抽簽結果,如圖所示:

 

 

關于這塊功能,這里需要著重介紹vine在實現小程序的過程中比較關注的兩個點,一個是隨機顯示抽簽結果,一個是用于顯示簽紙的動畫效果。

  1. 隨機顯示抽簽結果
    這個小程序中,隨機顯示抽簽結果的需求具體如下:

隨機出現五個運簽結果,大吉、吉、平、兇、大兇;不同結果對應下面不同文案;每個用戶每天只能獲取同一個結果。隨機文案,每個用戶在用完庫存前不重復
這里我們可以提煉出兩個關鍵點:一個是每個用戶每天獲取的結果不變,一個是,在庫存用完前不重復出現文案
也就是說,我們需要把用戶的抽簽結果和用戶id關聯起來。另外我們需要準備儲存抽簽結果的數組,每天從數組里面取出一個值作為抽簽結果,從而保證在庫存用完前不重復出現文案。貼代碼:


// 打亂數組順序 
function shuffle(a) {
var j, x, i;
for (i = a.length - 1; i > 0; i--) {
j = Math.floor(random() * (i + 1));
x = a[i];
a[i] = a[j];
a[j] = x;
}
}

var m_w = 123456789;
var m_z = 987654321;
var mask = 0xffffffff;

function seed(i) {
m_w = i;
m_z = 987654321;
}


function random() {
m_z = (36969 * (m_z & 65535) + (m_z >> 16)) & mask;
m_w = (18000 * (m_w & 65535) + (m_w >> 16)) & mask;
var result = ((m_z << 16) + m_w) & mask;
result /= 4294967296;
return result + 0.5;
}

//獲取用戶id     
var userid = parseInt(gbConfig.user_id, 16);
seed(userid);
// 隨機生成抽簽描述
var qian = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30];
var result = [];
for (var i = 0; i < 10; i++) {
shuffle(qian);
result = result.concat(qian);
}

// 隨機生成抽簽結果
var luck = [1, 2, 3, 4, 5];
var luckarr = [];
for (var i = 0; i < 60; i++) {
shuffle(luck);
luckarr = luckarr.concat(luck);
}

2.簽紙顯示的動畫效果
這次小程序,在上線前添加了簽紙顯示的動畫效果,以加強“抽簽”的用戶感受。簽紙以滾軸的形式向下展開,慢慢呈現出簽紙的結果。 關于動畫效果,最容易被使用的實現方式應該就是css3動畫以及序列幀。這里嘗試了三套方案,最終選擇了最后一套。下面分別來介紹一下這三套方案。 第一:使用傳統的序列幀方式。嘗試使用傳統的序列幀,通過逐幀動畫,慢慢鋪開簽紙,逐幀動畫如下:

 

在通過減幀以后,得到了8張序列幀圖,vine發現,8張序列幀圖通過拼接得到的雪碧圖會非常大(達到了1M左右的大?。?,所以再次進行減幀得到由4張序列幀圖拼接而成的雪碧圖(也有500+kb左右)。但是在實際放到頁面上面的時候發現,4張序列幀圖幀數太少,造成了動畫卡頓不流暢的情況,而且在低端安卓機上面,這組序列幀動畫完全無法流暢進行。所以第一套方案放棄。 第二:把8張序列幀圖分開加載,4張為一組,拼接成一張雪碧圖,一共兩張雪碧圖,如下:

vine的處理方式是:先加載第一張雪碧圖,在第一張雪碧圖逐幀動畫結束后,切換到第二張雪碧圖,無縫連接播放第二組逐幀動畫。結果在低端安卓機上面出現了同樣的情況,動畫播放非??D,而且在圖片切換的過程中出現了空白。于是第二套方案失敗。 第三:在vine百思不得其解的時候,突然發現,這套序列幀有一個特點:它的簽紙和卷軸并不是立體的!也就是說,這里其實可以不需要序列幀來實現簽紙打開的效果,只需要最后一張圖就可以了:

 

關于保存圖片的功能
保存圖片的功能是這次小程序中的一個大難點,這里非常感謝澤賢和小蘇提供的建議。下面來介紹一下保存圖片的功能到底是什么:

 

 

通過點擊分享按鈕,可以生成一張和簽紙類似的圖片,用戶可以長按保存這張圖片到手機本地。從而達到轉發分享的目的。

而這個保存,所需要的就是canvas。小程序API提供了canvas的接口:

通過這個接口,我們可以把當前畫布指定區域的內容導出成指定大小的圖片,然后再調用小程序的預覽接口進行圖片預覽以及保存:

但是在這里,vine遇到了幾個問題:

  1. 多次點擊保存按鈕觸發canvas,導致手機滑動的時候非常卡頓
  2. 生成預覽圖片時間非常慢
  3. 三星note5保存圖片尺寸的問題

下面來介紹一下這兩個問題相應的解決措施:

多次點擊保存按鈕觸發canvas,導致手機滑動的時候非常卡頓

canvas只在需要觸發的時候渲染,在用戶沒有點擊保存按鈕的時候,默認不渲染canvas。代碼如下:由于小程序和MVVM框架類似,無法直接操作dom,所以vine采取了在樣式上面添加狀態,通過修改showcanvas變量的值,來控制canvas的顯示和隱藏。在執行畫圖操作的時候使變量值為false,顯示canvas,在繪制完成的時候更改變量值,隱藏canvas


<canvas class='{{showcanvas ? "hidcanvas" : "showcanvas"}}' style="width: 750px; height: 1334px;position:fixed;left:100000rpx;top:-100000rpx;" canvas-id="shareQRcode"></canvas>

 

生成預覽圖片時間非常慢

生成預覽圖片時間非常慢,目前判斷的原因是,直接預覽canvas臨時路徑的圖片耗時比較久。那么應該如何優化這個過程呢?

小程序的API提供了幾個關于文件的接口:

我們可以通過這幾個接口優化目前的預覽方式。在這其中vine做了兩種不同的嘗試。

第一,在執行wx.previewImage的success的回調的時候,把previewImage生成的臨時路徑保存下來,下次再點擊預覽的時候,直接獲取本地已保存的文件列表wx.getSavedFileList,取得最近保存下來的文件的本地路徑,進行預覽。這么做的想法主要是為了解決canvas渲染的問題,每天只渲染一次,后續都是通過預覽本地圖片鏈接達到生成圖片的目的。梳理一下流程:

初次渲染:canvasToTempFilePath -> previewImage -> saveFile

二次渲染:getSavedFileList -> previewImage

可惜理想始終是豐滿的,在實際操作的過程中vine發現,通過這樣的方式預覽圖片的時候,一直處于loading的狀態,無法生成初次渲染的圖片。vine非??鄲?,至今沒能找到原因。

于是vine想了另一種辦法,調整了預覽的順序如下:

初次渲染:canvasToTempFilePath -> saveFile -> previewImage

二次渲染:getSavedFileList -> previewImage

這時候vine發現,先把canvas生成的臨時路徑保存到本地,再預覽,這種方法是可行的!而且在二次渲染的過程中,由于只是讀取小程序本地的圖片路徑,無需再次調用canvas繪圖,二次預覽的時間大大減少。

在這里我們需要注意官方文檔中提到的一點:小程序本地文件存儲的大小限制為10M。所以我們需要調用wx.removeSavedFiled的方法刪除我們不需要的圖片(當天之前存下來的圖片都是我們無需保存到本地的圖片,可以刪除)

三星note5保存圖片尺寸的問題

在數量龐大版本不一的安卓手機上,vine收到反饋,三星note5在保存圖片的時候會遇到圖片底部被裁減的情況。在通過多次修改以及對比類似的小程序以后發現,note5用canvas繪制的圖片有一個最大的范圍是750*1150,超出這個范圍的圖片,底部就會被裁減。為什么會有這個最大范圍vine目前還沒探索出結論,希望遇到過這個問題的大神可以和vine交流一下心得,手動比心!~

最后梳理一下小程序項目的一些注意點:

  • 小程序需要申請小程序公司主體的賬號,拿到appid,給到后臺同學配置接口
  • 小程序的體驗需要上傳體驗版本,獲取體驗者的微信號,到小程序管理后臺開通體驗者權限
  • 小程序開發過程中需要的單位為rpx,兼容問題較少
  • 在小程序的需求中,需要仔細查看文檔中提到的版本以及兼容問題,做好降級處理:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/compatibility.html


易優小程序(企業版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/24264.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×