商城系統(tǒng) 注冊

微信小程序多次跳轉(zhuǎn)的情況怎么避免

2018-02-09|HiShop
導(dǎo)讀:很多時候,大家會遇到出現(xiàn)網(wǎng)絡(luò)條件差貨卡頓時,小程序多次跳轉(zhuǎn)的情況,這種情況要怎么避免...
場景在使用小程序的時候會出現(xiàn)這樣一種情況:當(dāng)網(wǎng)絡(luò)條件差或卡頓的情況下,使用者會認為點擊無效而進行多次點擊,最后出現(xiàn)多次跳轉(zhuǎn)頁面的情況,這種情況要怎么避免。
解決辦法
 
然后從 輕松理解JS函數(shù)節(jié)流和函數(shù)防抖 中找到了解決辦法,就是函數(shù)節(jié)流(throttle):函數(shù)在一段時間內(nèi)多次觸發(fā)只會執(zhí)行第一次,在這段時間結(jié)束前,不管觸發(fā)多少次也不會執(zhí)行函數(shù)。
 
/utils/util.js:
 
function throttle(fn, gapTime) {
    if (gapTime == null || gapTime == undefined) {
        gapTime = 1500
    }
 
    let _lastTime = null
    return function () {
        let _nowTime = + new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn()
            _lastTime = _nowTime
        }
    }
}
 
module.exports = {
  throttle: throttle
}
/pages/throttle/throttle.wxml:
 
<button bindtap='tap' data-key='abc'>tap</button>
/pages/throttle/throttle.js
 
const util = require('../../utils/util.js')
 
Page({
    data: {
        text: 'tomfriwel'
    },
    onLoad: function (options) {
 
    },
    tap: util.throttle(function (e) {
        console.log(this)
        console.log(e)
        console.log((new Date()).getSeconds())
    }, 1000)
})
這樣,瘋狂點擊按鈕也只會1s觸發(fā)一次。
 
但是這樣的話出現(xiàn)一個問題,就是當(dāng)你想要獲取this.data得到的this是undefined, 或者想要獲取微信組件button傳遞給點擊函數(shù)的數(shù)據(jù)e也是undefined,所以throttle函數(shù)還需要做一點處理來使其能用在微信小程序的頁面js里。
微信小程序多次跳轉(zhuǎn)的情況怎么避免
出現(xiàn)這種情況的原因是throttle返回的是一個新函數(shù),已經(jīng)不是最初的函數(shù)了。新函數(shù)包裹著原函數(shù),所以組件button傳遞的參數(shù)是在新函數(shù)里。所以我們需要把這些參數(shù)傳遞給真正需要執(zhí)行的函數(shù)fn。
 
最后的throttle函數(shù)如下:
function throttle(fn, gapTime) {
    if (gapTime == null || gapTime == undefined) {
        gapTime = 1500
    }
 
    let _lastTime = null
 
    // 返回新的函數(shù)
    return function () {
        let _nowTime = + new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn.apply(this, arguments)   //將this和參數(shù)傳給原函數(shù)
            _lastTime = _nowTime
        }
    }
}
再次點擊按鈕this和e都有了:
微信小程序多次跳轉(zhuǎn)的情況怎么避免
 
參考
 
輕松理解JS函數(shù)節(jié)流和函數(shù)防抖
源代碼
 
tomfriwel/MyWechatAppDemo 的throttle頁面

HiShop小程序工具提供多類型商城/門店小程序制作,可視化編輯 1秒生成5步上線。通過拖拽、拼接模塊布局小程序商城頁面,所看即所得,只需要美工就能做出精美商城。

更多小程序資訊,盡在:m.descansotropical.com/xiaocx/


電話咨詢 預(yù)約演示 0元開店