溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2022-03-10 10:59:01 來源:億速云 閱讀:647 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“微信小程序多次跳轉(zhuǎn)的情況如何避免”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“微信小程序多次跳轉(zhuǎn)的情況如何避免”吧!

場景在使用小程序的時(shí)候會(huì)出現(xiàn)這樣一種情況:當(dāng)網(wǎng)絡(luò)條件差或卡頓的情況下,使用者會(huì)認(rèn)為點(diǎn)擊無效而進(jìn)行多次點(diǎn)擊,最后出現(xiàn)多次跳轉(zhuǎn)頁面的情況,這種情況要怎么避免。

解決辦法

然后從 輕松理解JS函數(shù)節(jié)流和函數(shù)防抖 中找到了解決辦法,就是函數(shù)節(jié)流(throttle):函數(shù)在一段時(shí)間內(nèi)多次觸發(fā)只會(huì)執(zhí)行第一次,在這段時(shí)間結(jié)束前,不管觸發(fā)多少次也不會(huì)執(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)

})

這樣,瘋狂點(diǎn)擊按鈕也只會(huì)1s觸發(fā)一次。

但是這樣的話出現(xiàn)一個(gè)問題,就是當(dāng)你想要獲取this.data得到的this是undefined, 或者想要獲取微信組件button傳遞給點(diǎn)擊函數(shù)的數(shù)據(jù)e也是undefined,所以throttle函數(shù)還需要做一點(diǎn)處理來使其能用在微信小程序的頁面js里。

出現(xiàn)這種情況的原因是throttle返回的是一個(gè)新函數(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

        }

    }

}

再次點(diǎn)擊按鈕this和e都有了

到此,相信大家對(duì)“微信小程序多次跳轉(zhuǎn)的情況如何避免”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI