1. 程式人生 > >微信小程式顯示載入彈窗(showLoading)的過程中攔截圖幕滑動事件

微信小程式顯示載入彈窗(showLoading)的過程中攔截圖幕滑動事件

        這篇文章對於熟悉小程式開發的人或者說熟悉開發文件的人來說簡直就是雞肋,因為沒有技術性可言。不過,對於像我這種入門者而且沒有多看文件的人來說,多少會有些用,思考再三還是寫篇文章記錄下好了,沒有惡意刷存在感[笑哭.gif]。        場景是這樣的:我的頁面中有多條資料需要分頁顯示,所以就在頁面回撥方法onReachBottom中處理"上拉載入更多"的邏輯,載入過程中使用wx.showLoading來給使用者提示,載入完成以後自動隱藏彈窗,也就是wx.hideLoading。測試中發現,在向伺服器請求新資料的過程中,載入彈窗(showLoading)還在顯示的時候,使用者可以任意的滑動頁面,導致在onReachBottom方法裡通過給表示頁碼的欄位page加1的方式來請求下一頁資料的邏輯混亂。舉個例子,當我第一次上拉頁面去載入第二頁資料時,由於網路請求會有些延遲,所以會在成功前一直顯示載入彈窗,如圖1.圖1.這個時候,我不斷來回上拉<-->下拉頁面,就會不斷的觸發onReachBottom方法,導致上述的page欄位不斷的加1,而此時第二頁還沒請求到呢,但page欄位的值可能就已經是3,4,5...了,所以,當第二頁資料請求到以後,再去上拉頁面打算載入第三頁的時候,其實是請求了第四,第五......頁的資料。這個問題發現以後我首先想的是像android觸控事件那樣在這個載入過程中攔截滑動事件造成阻塞,然後就在網上搜索攔截的方法,但找了半天沒找到,在.wxml中有一些攔截事件,但我這是在js檔案中的邏輯...然後嘗試新增flag的方式,也就是設定個變數flag,請求的過程中使flag=false,如果遇到false就不讓onReachBottom方法裡的邏輯觸發,請求成功以後修改flag的值為true。這種方式一定程度上可行,但還是有些同步的問題導致不嚴謹。後來請教了其他人,原來只需要一個簡單配置就搞定:在wx.showLoading()的物件中將欄位mask的值設為true就行了[捂臉.png],見圖2.圖2.
然後又去看了下官方文件,見到如下說法(圖3):圖3.

也就是說,如果要防止在彈出載入彈窗的時候背後的頁面響應觸控事件,那麼就把mask設定為true就行了,預設是false。注意:在開發工具的模擬器上測試是不行的,需要在真機上測試才能看到效果。

教訓就是,以後要多看看官方文件[笑哭.gif]。

相關推薦

程式顯示載入(showLoading)的過程攔截滑動事件

        這篇文章對於熟悉小程式開發的人或者說熟悉開發文件的人來說簡直就是雞肋,因為沒有技術性可言。不過,對於像我這種入門者而且沒有多看文件的人來說,多少會有些用,思考再三還是寫篇文章記錄下好了,沒有惡意刷存在感[笑哭.gif]。        場景是這樣的:我的頁面中

解決程式自定義滑動自定義底部的頁面也一起跟著滑動的問題

解決方案,我總結了以下幾種 1、控制底部根目錄scroll-view 的scroll-y屬性的true/false,控制底部滾動以及不滾動 2、在自定義彈框最外層元素加上catchtouchmove=’true’ ;或者catchtouchmove="preventTouchMove"

程式表單例項

開發中有時候會碰到需要一個表單彈窗來處理資料的提交處理,然後這次釋出的這套原始碼就是解決這個問題! <!--button--> <view class="btn" bindtap="powerDrawer" data-statu="open">button</view

程式-表單示例

開發中有時候會碰到需要一個表單彈窗來處理資料的提交處理,然後這次釋出的這套原始碼就是解決這個問題!WXML程式碼如何:<!--button--> <view class="btn" bindtap="powerDrawer" data-statu="op

程式自定義/出層功能,非官方api,自寫

index.wxml <!--index.wxml--> <!-- 遮罩層 --> <view class="mask" catchtouchmove="prev

程式顯示 html wepy + wxParse

本問出自: http://blog.csdn.net/wyk304443164 修改自: http://www.wxappclub.com/topic/961 本著不重複造輪子的基礎上我找到了上面這篇。發現它不能正常執行,也就是顯示的是空白的。

程式之----載入提示框loading

微信小程式之----載入中提示框loading wx.json Page({ /** * 頁面的初始資料 */ data: { }, onLoad: function (options) { // 欄目分類請求介面 var lanmu = this;

程式-自定義出層

效果圖 WXML <view class='popup' wx:if="{{popShow}}"> <view class='mask' catchtouchmove="preventTouchMove" catchtap='closePop'&g

程式顯示背景圖片

我們可能總遇到這種情況,當我們引入本地的圖片作為背景圖片時(background-image)圖片並未顯示,引入的相對路徑都是對的,導致這個現象的原因就是小程式的wxss中使用background-image時不支援顯示本地圖片,只支援顯示線上圖片和base64格式的圖片,我們要轉化為bas

(程式)onload()載入不到app.globalData全域性變數的值

onLoad()載入不到app.globalData全域性變數的值 app.js globalData: { statusResult:null, } index.js wx.request({ url: 'xxx

程式——分包載入

某些情況下,開發者需要將小程式劃分成不同的子包,在構建時打包成不同的分包,使用者在使用時按需進行載入。 分包載入很簡單,重要的是在app.json裡面分配好url 。 1、在目錄中新建檔案。 首先在“pages”:{ "pages/pagesA/onePage/o

程式-自定義出框

<---------------------------------定義組建-------------------------------------------------------------------------> // components/component-tag-name.j

程式 - 分包載入(分包使用)

使用分包 在app.json配置"subpackages"   在pages同級目錄新建資料夾以及檔案     打包原則 宣告 subpackages 後,將按 subpackages 配置路徑進行打包,subpackages 配置路徑外的目錄將被打包

程式載入狀態新增和隱藏

使用下面程式碼新增 wx.showToast({ title:'載入中', icon:'loading', mask:true }) 然後我們呼叫下面方法進行隱藏loading狀態 wx.hideToast(); 這

程式分包載入實戰

"離線包"機制微信小程式採用的是類似離線包載入方案,以 轉轉 小程式為例,當用戶第一次開啟時會先下載好所有程式碼,然後再載入頁面;當用戶再次進入轉轉小程式時,會直接使用已下載的程式碼,省去了程式碼下載的過程,開啟速度更快。看似很美好的設計,但有兩個問題:第一次開啟轉轉小程式時

程式 詳解框wx.showToast、wx.showModal、wx.showActionSheet,modal控制元件解釋及input輸入框值的獲取

一、wx.showToast wx.showToast({ title: '失敗',//提示文字 duration:2000,//顯示時長 mask:true,//是否顯示透明蒙層,防止觸控穿透,預設:

程式顯示操作選單wx.showActionSheet

wx.showActionSheet({ itemList: ['A', 'B', 'C'], success: function (res) { console.lo

程式之modal出框遮罩層元件——可帶文字框

modal彈出框遮罩層可實現提示資訊、驗證碼等功能 然而在官方文件已經刪除了modal的頁面,說要廢棄modal 就個人而言modal元件無法被wx.showModal完全替代。大家都知道小程式的wxml的元件可以通過改變js的值實現重新渲染,而介面是無

程式 模擬載入請求資料(六)

alt+shift+f:格式化快捷方式 新建一個data檔案,posts-data.js,給指令碼檔案定義出口module.exports = {postList:local_database//陣列名} 在posts.js裡引用:var postData = requi

程式:globalData和Storage資料儲存的坑

前言 在小程式登入是,將返回的使用者資料,儲存在globalData中和storage中。 // 儲存的資料是一個物件 wx.setStorageSync('userAuthData', user.data.data); this.globalData.userAuthData = user