大ga吼! 很久没写博客咯,今天学到了一点新知识, 记录分享一下~

摘要: 小程序中的函数节流

场景: 从商城列表进入商品详情中时,或者生成,提交订单, 付款的时候, 若用户快速点击(一秒8键,母胎solo20年),则容易造成重复进入页面/生成多余订单/重复付款等等不符合实际需求的麻烦,所以作为一个优秀的web前端开发工程师(主要是产品经理比比了),需要避免这种情况!(谁tm没事一秒8键啊????????????)

/****具体场景自己脑补****/

干货:

这里提出两种解决办法:

  Fn1: 在data中设置一个变量flag,默认值为true, 点击时先取出 flag, let _flag = this.data.flag,然后将flag 取false,this.setData({ flag: false}) 再根据 _flag 的值,决定是否执行业务逻辑。对了, 最后千万别忘了在 onload 或者 onshow 或者 onunload 的时候,将 flag 取 true, 这样才能保证在业务逻辑的正常执行, 要不然的话, 代码将成为一次性代码,点一次之后后面就不再执行咯。

此种方法可满足大部分场景, 但是不够优雅, 而且缺点也很明显, 就是必须退出或卸载此页面时, 才能执行第二次业务逻辑, 所以有些场景可能不适应, 再来看第二种解决办法。

  Fn2: 第二种方法就是使用函数节流,什么叫节流自己百度下,不费多少电。

  直接贴代码:

    data: {
pre: 0,
},
    throttle (fn, delay = 2000) {
let pre = this.data.pre // 初始值是 0
let that = this
return function () {
let now = + new Date();
if(now - pre >= delay) {
fn.apply(this, arguments)
that.setData({
pre: now
})
}
}
},
toDetail () {
this.throttle(function(){
wx.navigateTo({
url: '../carDetail/carDetail?id=' + 100040
})
}, 2000)()
},

代码就是这么回事, 照抄准没错, 我快下班了, 下次有时间了再写点注释。。。。。

-------------------------------------------20191017的一点补充-----------------------------------------------------

因为许多地方都需要用到节流, 所以封装成一个方法, 用来全局调用

封装之后的效果:

这里  throttle  函数接收4个变量, me 是传入的this, 否则我们在调用的时候, throttle内部会找不到this, 从而setData失败, key 是我们设置在data中的时间初始值, 这样做有什么好处呢? 就是我们在同一个页面需要多次节流的时候, 通过传入不同的key, 就可以单独管理每个节流点了, fn 就是我们本来要执行的函数, delay 就是点击的频率, 默认1000, 即每1秒内本事件只能执行一次, 想要再执行要等下一秒, 当然,这个你可以根据自己的需要自由设置;

function throttle (me, key, fn, delay = ) {
let pre = me.data[key]
return function () {
let now = + new Date();
if(now - pre >= delay) {
fn.apply(me, arguments)
pre = now
me.setData({
[key]: now
})
}
}
}
module.exports = {
throttle
}

调用也很简单

    data: {
pre:,
},
    myclick: function (e) {
let that = this
throttle(that, 'pre', function(){
        console.log(111111111111)
}, )()
},

好的, 就到这里了

最近联盟出手游了, 看到一句话贼搞笑

【微信小程序】小程序中的函数节流的更多相关文章

  1. JS中的函数节流throttle详解和优化

    JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...

  2. javascript中的函数节流和函数去抖

    带着问题去尝试 首先我们要知道为什么要用到函数节流和函数去抖?我们带着以下的疑问来进行分析! 1.比如搜索框,你会用到什么事件(change.blur.keyup等)?去做什么效果?2.再比如scro ...

  3. 谈谈JS中的函数节流

    好吧,一直在秋招中,都没怎么写博客了...今天赶紧来补一补才行...我发现,在面试中,讲到函数节流好像可以加分,尽管这并不是特别高深的技术,下面就聊聊吧! ^_^ 备注:以下内容部分来自<Jav ...

  4. JS中的函数节流

    函数节流的目的 从字面上就可以理解,函数节流就是用来节流函数从而一定程度上优化性能的.例如,DOM 操作比起非DOM 交互需要更多的内存和CPU时间.连续尝试进行过多的DOM 相关操作可能会导致浏览器 ...

  5. [转] 谈谈JS中的函数节流

    函数节流的目的 从字面上就可以理解,函数节流就是用来节流函数从而一定程度上优化性能的.例如,DOM 操作比起非DOM 交互需要更多的内存和CPU 时间.连续尝试进行过多的DOM 相关操作可能会导致浏览 ...

  6. 【javascript】js中的函数节流和函数防抖

    一.概念解释  函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段.  大家大概都知道旧款电视机的工作原理,就是一行行得扫描出色彩到屏幕上,然后组成一张张图片.由于肉眼只能分辨出一定频率的变 ...

  7. 浅谈javascript的函数节流

    什么是函数节流? 介绍前,先说下背景.在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(其核心就是绑定mousemove),这种事件有一个特点,就是用户不必特地捣乱,他在 ...

  8. JS的函数节流(throttle)

    什么是函数节流? 介绍前,先说下背景.在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(其核心就是绑定mousemove),这种事件有一个特点,就是用户不必特地捣乱,他在 ...

  9. JS函数节流

    背景:在前端开发中,有时会为页面绑定resize事件,或为一个页面元素拖拽事件(其核心就是绑定mousemove)在一个正常操作中也有可能在一个短时间内触发非常多次事件绑定程序,而DOM操作是很消耗性 ...

随机推荐

  1. 云原生生态周报 Vol. 12 | K8s 1.16 API 重大变更

    本文作者:源三.临石.张磊.莫源 业界要闻 1. K8s 1.16 将废弃一系列旧的 API 版本 影响面涉及 NetworkPolicy.PodSecurityPolicy.DaemonSet, D ...

  2. java架构之路-(tomcat网络模型)简单聊聊tomcat(二)

    上节课我们说到的Tomcat,并且给予了一般的tomcat配置,和配置的作用,提到了HTTP/1.1 也就是我们的网络通讯模型,那么HTTP/1.1又代表什么呢.我们来简答看一下. tomcat有四种 ...

  3. 服务器部署Laravel

    安装lnmp环境 参考:简书 - Centos 7 下安装LNMP官方最新版 安装redis 参考:简书 - Centos 7下使用yum安装redis 安装nodejs npm nodejs分8.x ...

  4. Anchor 和 Dock 属性的使用

    Anchor 是一个常用属性,用来控制当窗体大小变化,控件如何自动调整自身大小和位置 一 仅设置一个值 如果此时将窗体放大,将会变成这样: 由于固定了top, 所以top不变,那么bottom自然会因 ...

  5. JPA笔记4 ManyToMany

    package many_to_many; import java.util.HashSet; import java.util.Set; import javax.persistence.Entit ...

  6. Excel解析工具easyexcel全面探索

    1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...

  7. IOS疯狂基础之观察者模式

    转自:http://blog.csdn.net/wudizhukk/article/details/8981535 一.KVO Key-Value Observing,它提供一种机制,当指定的对象的属 ...

  8. 还学不会webpack?看这篇!

    摘要: webpack入门教程. 原文:还学不会webpack?看这篇! 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. Webpack已经流行好久了,但很多同学使用webp ...

  9. 起步:SpringBoot

    pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  10. Grafana数据迁移

    各系统和docker安装官方文档 https://grafana.com/grafana/download?platform=linux ubuntu安装相应版本的Grafana wget https ...