一种前端模拟长按升级的实现方式

需求场景:

在用户长按升级按钮一段时间以后,提供快速的连续升级反馈。

需求分析:

最简单的实现方式是直接使用一个大循环持续调用升级接口。但如果升级反馈中包含了与后端的数据交互,或者其它比较大量的界面更新,又或者因为其它原因导致该方式不能满足连续快速反馈时,这里提供一种使用前端模拟的方式完成长按升级的思路;

思路概述:

首先设计的主要想法是尽量减少单次循环中需要处理的更新,设计一个MockLevelUpUpdate模拟实际更新,然后在MockLevelUpUpdate中去掉原本 RealLevelUpUpdate中消耗比较大的部分。另外如果每次刷新所需的数据的获取比较耗时的话(比如每次数据都需要后端返回时),则最好提前生成好本次长按升级所需的每一级的数据,然后在循环刷新时直接使用;

伪代码描述:

 RealLevelUpUpdate 原本存在的比较重的刷新代码,如无必要不需要修改:

-- 真实刷新 (原本存在的刷新代码,如无必要不需要修改)
function RealLevelUpUpdate()
    MassiveUpdate() -- 比较麻烦的刷新
    LightUpdate_1() -- 比较轻量的刷新
end

插入下列几个新函数

MockLevelUpUpdate 重写一个新的模拟刷新,去掉原本刷新中的比较重的部分:

-- 重写一个模拟刷新
function MockLevelUpUpdate()
    LightUpdate_2() -- 只进行轻量的刷新,或明确需要在长按中表现的刷新
end

GenerateData 数据准备,提前准备好刷新中可能会用到的数据,避免循环时临时处理导致的卡顿(或者如果升级后所需的数据来自于后端,则需要在这个阶段提前获取到or前端自己生成):

-- 提前准备一个数据表,记录每次升级后界面LightUpdate_2可能使用到的数据(避免长按循环过程中频繁访问数据导致的卡顿)
function GenerateData()
    levelData = {
        [1] = {...}, -- 升级到1级时需要的数据
        [2] = {...}, -- 升级到2级时需要的数据
        [3] = {...}
    }
    return levelData
end

OnDown 长按按下时触发函数

OnUp 长按抬起时触发函数

其中OnDown的循环中要借助levelData 对当前循环到的状态进行更新,触发抬起OnUp时中断循环,或者长按到无法升级时主动结束并触发OnUp; 

OnUp函数将会调用 RealLevelUpUpdate 调用真实的刷新将界面的实际状态同步。至此结束。

-- 按下时触发
function OnDown()
    levelData = GenerateData() -- 生成升级所需的数据表
    while ( 没有抬起时 ) 
    {
        if ( 当前已经无法继续升级 ) -- 使用 levelData 判断是否可以继续升级
        {
            OnUp() -- 调用OnUp
            break;
        }
        
        MockLevelUpUpdate() -- 使用LevelData 进行刷新
    }
end

-- 抬起时触发
function OnUp()
    RealLevelUpUpdate() -- 调用一次RealLevelUpdate将实际状态更新到最新
end

优点:这种实现方式对于原本存在的代码无需很大改动。直接插入上述代码即可。

缺点:每次都要单独重写MockLevelUpdate方法,同时生成LevelData也需要前端了解后端的算法实现,会增加不小的工作量;因此该方法仅适合普通的循环调用无法满足需求时使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值