微信小程序研發問題梳理:翻頁:下拉:緩存:canvas:富文本:分享

微信小程序研發問題梳理

最近鼓搗小程序的時候,著實遇到了一些問題,盡管有些再翻看文檔幾遍,就能找到答案,但還是要發揮下爛筆頭的功效,順便梳理下。

問題列表

  1. 登錄流程
  2. 小程序標簽頁地址無法跳轉問題
  3. 頁面翻頁內容加載問題
  4. 頁面下拉無法觸發的問題
  5. 小程序本地緩存的使用
  6. Canvas制圖橫向滾動
  7. 富文本內容無法解析
  8. 小程序分享功能

1.登錄流程

通過小程序登錄時獲取的 code 和 appid 及 secret 請求微信開放接口 sns/jscode2session 獲取登錄校驗信息(session-key|unionid)

<只簡單舉例,微信小程序開發文檔上有具體說明>

    wx.login({success: res => {// 發送 res.code 到后臺換取 openId, sessionKey, unionIdthis.getLoginInfoByCode(res.code);}})
//用code獲取登錄session-key
getLoginInfoByCode: function (code){var that = this;wx.request({url: 'https://wx.xxx.com/api/wx/user/getLoginCode',method: 'POST',data:{code: code},success: function(dta){if (dta.data) {var dt = dta.data;// console.log(dt);// console.log('openid:' + dt.data.openid);// console.log('session_key:' + dt.data.session_key);}}})},
//通過session-key和小程序附加信息獲取用戶信息
getUserInfoBySessKey: function (param) {wx.getUserInfo({success: res => {// 可以將 res 發送給后臺解碼出 unionIdwx.request({url: 'https://wx.xxx.com/api/wx/user/saveUserData',method: 'POST',data: {encryptedData: res.encryptedData,sessionKey: param.session_key,iv: res.iv,openid: param.openid},success: function (dt) {// console.log('detail:');// console.log(dt.data);}})// 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回// 所以此處加入 callback 以防止這種情況if (this.userInfoReadyCallback) {this.userInfoReadyCallback(res)}}})}

注1:此處的參數在后臺獲取時,過濾參數驗證需要謹慎,最好先實驗通過后,再過濾。(比如:配置后臺驗證服務器環境時)

注2:所有api.weixin.com的接口請求,都要打緩存。

注3:確保小程序的js沒有報錯,不然會有接口請求不到數據的情況!


2.小程序標簽頁地址無法跳轉問題

也是從網上前輩們處得知:頁面內的跳轉地址,如果和標簽欄里的地址一樣,那么是不生效的,需要更換地址。

//app.json
{"pages": ["pages/index",],"tabBar": {"list" : [{"pagePath" : "pages/index","text" : "首頁",}]},"debug": true
}
<!-- pages: index -->
<navigator url='/pages/index' hover-class='navigator-hover'></navigator>

我的處理方式是本辦法,將目標頁面copy到一個新目錄,換個地址路徑

<!-- pages:detail -->
<navigator url='/pages/detail' hover-class='navigator-hover'></navigator>

3.頁面翻頁內容加載問題

后加載到頁面的內容需要堆積到之前的變量里。

getList: function () {var that = this;if (bPageSum < curPage && curPage != 1) {return false;}wx.request({url: 'https://wx.xxx.com/api/wx/area',data: {startDate: that.data.startDate,endDate: that.data.endDate,page: curPage,pageSize: pageSize,},header: {'content-type': 'application/json'},success: function (dt) {curPage = curPage + 1;bTotal = dt.data.total;bPageSum = dt.data.pageSum;//堆積var len = dt.data.list.length;for (var i = 0; i < len; i++) {bAllList.push(dt.data.list[i]);}//頁面初始化時的變量that.setData({list: bAllList});}})},

<這里如果有好的方法,歡迎留言>


4.頁面下拉無法觸發的問題

要在應用頁面( pages/index.json) 里開啟配置;

//pages: index.json{"navigationBarTitleText": "首頁","enablePullDownRefresh": true
}
//pages: index.js/*** 頁面相關事件處理函數--監聽用戶下拉動作*/onPullDownRefresh: function() {...wx.stopPullDownRefresh();},

5.小程序本地緩存的使用

在用戶駐留時間較長的時候會對接口請求后的數據加本地緩存,減少請求。

//pages: index.jsgetInfo: function () {var that = this;wx.request({url: 'https://wx.xxx.com/api/wx/info',method: 'POST',dataType: 'json',data: {date: that.data.curDate},header: {'content-type': 'application/json'},success: function (dt) {//將結果打入本地緩存wx.setStorage({'key': 'wx_' + that.data.curDate,'data': dt.data});that.logic(dt);}})},//.../** * 清除本地緩存*/clearCache: function (){wx.removeStorage({key:  'wx_'+this.data.curDate,success: function (res) {return true;}})  },//.../*** 生命周期函數--監聽頁面顯示*/onShow: function() {//同步本地緩存var dt = wx.getStorageSync(k);that.logic(dt);},

6.Canvas制圖橫向滾動

參考資料 > 微信小程序canvas超出屏幕實現左右滑動的方法

方案一

將繪制出的canvas 保存為本地路徑的一個img 路徑.然后將圖片放到 scroll-view 里面,進行滑動.

<!-- wxml -->
<scroll-view class="temp_day_box" scroll-x><view class="canvas_height"><image class="canvas_img" src='{{canvasSaveimg}}'></image></view>
</scroll-view>
<canvas canvas-id="canvasWeather" class="canvasHigh"></canvas>
/* wxss */
.canvasHigh {width: 2250rpx;height: 270rpx;transform: translateX(-200%);
}
.canvas_img{width: 2250rpx;height: 270rpx;
}

[注] 這里的canvasHigh的css屬性可以用很多其他的方式隱藏,但是這里注意的是一定不能用display:none;或者 標簽里面加hidden,wx:if屬性,這樣保存下來的圖片路徑是不會顯示出來的.

/* js */
//前面的寫法這里就不再編寫,可以查看相關文檔和官方api
ctx.draw();
wx.canvasToTempFilePath({canvasId: 'canvasWeather',//canvasId和標簽里面的id對應success: (res) => {var shareTempFilePath = res.tempFilePath;_this.setData({//將獲取到的圖片臨時路徑set到canvasSaveimg中canvasSaveimg:shareTempFilePath})}
})

方案二

在scroll-view標簽中綁定一個滾動時觸發的事件,這里就不需要保存為圖片,但是動畫效果有點小小的僵硬.

<!-- wxml -->
<scroll-view class="temp_day_box" scroll-x bindscroll='scrollCanvas'> <view class="canvas_height" style='transform: translateX(-{{canvasLen}}px);'><canvas canvas-id="canvasWeather" class="canvasHigh"></canvas> </view>
</scroll-view>
/* js */
scrollCanvas: function(e) {console.log(e);var canvasLen = e.detail.scrollLeft;this.setData({canvasLen: canvasLen})
}

7. 富文本內容無法解析

在抓取數據展示或者后臺添加了富文本內容要通過變量展示到頁面時,會出現內容源碼出現在頁面,html標簽沒有被解析的情況,推薦使用WXParse插件

插件資源

github-wxParse

應用實例

下載資源,將wxParse目錄copy至pages同級;

① 引入插件js腳本

// js//引入插件JS腳本
var WxParse = require('../../wxParse/wxParse.js');Page({data: {aid : ''},/*** 根據文章ID獲取資訊**/getArticleInfo: function () {var that = this;wx.request({url: 'https://wx.xxx.com/api/wx/getInfo',data: {aid: that.data.aid},header: {'content-type': 'application/json'},success: function (dt) {//插件實例var article = dt.data.content;WxParse.wxParse('article', 'html', article, that, 5);}})}}

② 引入插件模板

<!-- wxml --><!-- 引入插件模板 -->
<import src="../../wxParse/wxParse.wxml"/><view class="block"><view class="content"><!-- 文章內容:START --><view class="content-text"><template is="wxParse" data="{{wxParseData:article.nodes}}"/></view><!-- 文章內容:END --></view></view>

③ 引入插件樣式;

/* wxss *//* 引入插件樣式 */
@import "../../wxParse/wxParse.wxss";

這樣就可以展示了。大概的原理:將富文本內容通過js解析節點內容,再加載到頁面。

可能會遇到的問題

Error: html.replace is no a funciton ...

i. 找到wxParse/html2json.js 文件,將其中的 console.dir()替換為 console.log();

ii. 在wxParse插件目錄中全局搜索console,將打印全部注釋掉;


?

8. 小程序分享功能

<!-- pages/index.wxml -->
<button open-type="share">分享給好友</button>
/* pages/js *//*** 用戶點擊右上角分享*/onShareAppMessage: function() {return {title: '彩票雙色球開獎結果查詢分析預測',path: '/pages/index/ball_index',imageUrl: '../../images/color_ball.png',success: function(e){//要求小程序返回分享目標信息wx.showShareMenu({withShareTicket: true});},fail(e){return false;}};}

?


?

歡迎訪問小程序:DoubleColorBall


?

成長的路上有你有我

<歡迎關注留言討論?!>

?

?

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

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

相關文章

Nginx重啟方式

2019獨角獸企業重金招聘Python工程師標準>>> 重啟方式有三種&#xff1a; 1.簡單型&#xff0c;先關閉進程&#xff0c;修改你的配置后&#xff0c;重啟進程。 2.重新加載配置文件&#xff0c;不重啟進程&#xff0c;不會停止處理請求 3.平滑更新nginx二進制&#x…

axure如何頁面滑動時廣告位上移_新手APP運營如何做廣告位投放

運營是什么&#xff1f;這種問題在各種論壇、貼吧、百度知道、問答百科類中都會出現。上面也有各種大神各式各樣的回答&#xff0c;從不同角度向我們闡述了什么是運營。用 戶運營、內容運營、社區運營、活動運營、市場運營、等等&#xff0c;各種各樣的文章對它們有非常多的分類…

常見的8個前端防御性編程方案

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享幾個常見的前端防御性編程方案。點擊下方卡片關注我&#xff0c;或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列關于前端防御性編程我們大多數情況可能遇到過&am…

比特平面分層_平面設計中的分層

比特平面分層One of the first windows to pop up automatically, when I first started using Adobe Photoshop back in 2013, was the Layers one. Albeit I was dabbling around with it for making memes, it was one of the first things I played around with.2013年&…

微軟中國推校園先鋒計劃,保障學生低價獲取正版軟件

2010年7月13日&#xff0c;人人網 Lucky 7 率先向同學們宣布了"微軟校園先鋒計劃"上線的消息&#xff0c;該計劃現在接受學生預購正版 Windows 7 專業版和 Office 2010 專業版&#xff0c;正式銷售的日期為7月19日。該計劃的官網是&#xff1a;http://ms.shop.edu.cn…

Nginx laraval-admin 頁面小圖標不顯示 問題處理

laraval-admin 頁面小圖標不顯示 類似問題 nginx下加載eot|otf|ttf|woff|svg等404 錯誤問題 瀏覽器console控制臺報錯 GET http://admin.xxx.com/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.woff2 net::ERR_ABORTED 404 (Not Found)CSS 樣式引用字體 font-face …

Ajax完整資料加代碼

什么是Ajax&#xff1f;答&#xff1a;Ajax是一種無需加載整個網頁&#xff0c;就能夠更新部分網頁&#xff0c;與后臺交互的技術。Ajax的優點&#xff1f;答&#xff1a;能夠在不更新整個頁面的前提下&#xff0c;維護數據。這使得Web程序可以更快速的回應用戶的動作&#xff…

did雙重差分法_Stata中雙重差分操流程及代碼

01簡介現代計量經濟學和統計學的發展為我們的研究提供了可行的工具。倍差法來源于計量經濟學的綜列數據模型&#xff0c;是政策分析和工程評估中廣為使用的一種計量經濟方法。主要是應用于在混合截面數據集中&#xff0c;評價某一事件或政策的影響程度。該方法的基本思路是將調…

Axios 如何緩存請求數據?

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天推薦這篇Axios緩存請求數據的文章&#xff0c;相信是常見的業務場景&#xff0c;感興趣的讀者可以看看 umi-request&#xff0c;支持緩存功能。另外我之前也寫過 axios源碼文章&#xff0c;…

Reflection in .net

最近在看設計模式的一些東西&#xff0c;在講到builder模式中使用到了c#的反射機制&#xff0c;從網上找了寫資料&#xff0c;整理如下&#xff1a; 在C#中&#xff0c;我們要使用反射&#xff0c;首先要搞清楚以下命名空間中幾個類的關系: System.Reflection命名空間(1) App…

山西萬榮盛裝迎新春 首屆群眾文化藝術節啟幕

山西萬榮盛裝迎新春&#xff0c;首屆群眾文化藝術節啟幕。 李繼旺 攝 山西萬榮盛裝迎新春&#xff0c;首屆群眾文化藝術節啟幕。 李繼旺 攝 中新網太原1月29日電 (任麗娜)璀璨閃耀的寶鼎廣場花燈展、激情活力的群眾文體賽事、精彩紛呈的紅火熱鬧、精品年貨展銷、李家大院游園會…

MySQL 隱式轉換 字符串和整型說明

MySQL 隱式轉換 字段類型定義 CREATE TABLE user (id int(10) NOT NULL AUTO_INCREMENT COMMENT 編號,/* ...... */name varchar(10) NOT NULL DEFAULT COMMENT 姓名,/* ...... */PRIMARY KEY (id),KEY idx_name (name,nickname),/* ...... */ ) ENGINEInnoDB DEFAULT CHARSE…

安裝vs2017出現閃退現象_Adobe Reader 閃退

在我們的日常辦公、學習中經常會涉及到 PDF 文件&#xff0c;免不了需要處理 PDF 文件如&#xff1a;PDF轉Word、PDF合并、導出成圖片、PDF解密、PDF轉PPT、PDF加水印、PDF簽名等等。PDF是與平臺無關的文件格式&#xff0c;無論在哪種打印機上都可保證精確的顏色和準確的打印效…

從Vue.js源碼中我學到的幾個實用函數

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天推薦Vuejs源碼中幾個實用的方法。如果想看Vuejs源碼&#xff0c;不知道如何下手&#xff0c;一般推薦配置Sourcemap&#xff0c;針對單個問題調試來看&#xff0c;如何調試Vuejs源碼&#x…

real類型_如何使用REAL方法對您的Web內容進行現實檢查

real類型Web內容審核模板 (Web content audit template) I recently completed a website audit project for a nonprofit organization through CatchAFire.org. As part of the website audit, I audited every key page’s content, looking for areas of opportunity.我最近…

青海行--(7月26日)翻越祁連山

嘉峪關是最值得一寫的&#xff0c;雖然也是著名的旅游城嘉峪關景點是國家&#xff21;&#xff21;&#xff21;&#xff21;&#xff21;級景區&#xff0c;但與敦煌完全不一樣&#xff0c;沒有人山人海的游客&#xff0c;門票也不貴&#xff0c;才&#xff11;&#xff10;&a…

TikTok真題第1天 | 666.路徑和IV、 207.課程表、210.課程表||

666.路徑和IV 題目鏈接&#xff1a;666.路徑和IV 解法&#xff1a; 參考這篇題解&#xff1a;【LeetCode - 666】路徑和 IV_力扣666路徑總和4-CSDN博客 關鍵點在于&#xff1a; &#xff08;1&#xff09;使用map來存node&#xff1a;key 為整數的前兩位&#xff0c;value…

導出Excel

2019獨角獸企業重金招聘Python工程師標準>>> 思路: 1, 引入Excel類庫; 2, 創建一個模板; 3, 將數據填充進去; 4, 生成文件; 下面是一個簡單的示例 $phpExcelObj new PHPExcel(); $titleMap self::TITLE_MAP; //設置表頭 $i 0; foreach ($titleMap as $key > $…

CentOS系統更換yum源(repomd.xml not found解決方案)

CentOS系統更換yum源 問題 當初瞎鼓搗服務器&#xff0c;更換yum源為aliyun的&#xff0c;奈何阿里的源最近全部打不開&#xff0c;導致yum安裝不了&#xff0c;一直報錯&#xff1a; http://mirrors.aliyun.com/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL E…

在類中用class時數據是共有還是私有_jvm學習筆記之class文件的加載、初始化

編寫的java文件在要真正運行時&#xff0c;會首先被編譯成 “.class"結尾的二進制文件&#xff0c;然后被虛擬機加載。那么在虛擬機中一個class文件要成為java實例&#xff0c;需要經歷好幾個步驟&#xff1a;1、裝載&#xff1a;裝載階段由三個基本動作完成&#xff0c;要…