C语言防抖函数 封装防抖函数

手写防抖和节流函数实现

防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流动中

站在用户的角度思考问题,与客户深入沟通,找到久治网站设计与久治网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖久治地区。

但是很多前端开发者面对这两个功能,有点摸不着头脑:

a. 某些开发者根本无法区分防抖和节流有什么区别(面试经常会被问到);

b. 某些开发者可以区分,但是不知道如何应用;

c. 某些开发者会通过一些第三方库来使用,但是不知道内部原理,更不会编写;

「在事件被触发n秒后再执行回调,如果再这n秒内又被触发,则重新计算」

Ø 输入框中频繁的输入内容,搜索或者提交信息;

Ø 频繁的点击按钮,触发某个事件;

Ø 监听浏览器滚动事件,完成某些特定操作;

Ø 用户缩放浏览器的resize事件;

我们都遇到过这样的场景,在某个搜索框中输入自己想要搜索的内容

比如想要搜索一个MacBook:

但是我们需要这么多次的网络请求吗?

这就是防抖的操作:只有在某个时间内,没有再次触发某个函数时,才真正的调用这个函数;

我们通过一个搜索框来延迟防抖函数的实现过程:

p 监听input的输入,通过打印模拟网络请求

n 测试发现快速输入一个macbook共发送了7次请求,显示我们需要对它进行防抖操作:

基本实现

立即执行函数

增加取消功能

效果

规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效

节流的实现过程

完善节流

C语言的按键开关防抖程序~

key为按键,规定按下为低电平

if(key==0)

{

delay(50); //延时50ms,消抖

if(key==0) //再判断是否按下

{

while(!key); 松手检测

··················································

该按键按下要实现的功能程序

··················································

}

}

我的习惯是这样写

单片机键盘去抖动c语言程序!!!

使用这个到板子里面:

#include reg52.h

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

sbit KEY1 = P2^4;

sbit KEY2 = P2^5;

sbit KEY3 = P2^6;

sbit KEY4 = P2^7;

unsigned char code LedChar[] = { //数码管显示字符转换表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};

void delay();

void main(){

bit keybuf = 1; //按键值暂存,临时保存按键的扫描值

bit backup = 1; //按键值备份,保存前一次的扫描值

unsigned char cnt = 0; //按键计数,记录按键按下的次数

ENLED = 0;  //选择数码管 DS1 进行显示

ADDR3 = 1;

ADDR2 = 0;

ADDR1 = 0;

ADDR0 = 0;

P2 = 0xF7;  //P2.3 置 0,即 KeyOut1 输出低电平

P0 = LedChar[cnt];  //显示按键次数初值

while (1){

keybuf = KEY4;  //把当前扫描值暂存

if (keybuf != backup){  //当前值与前次值不相等说明此时按键有动作

delay();  //延时大约 10ms

if (keybuf == KEY4){  //判断扫描值有没有发生改变,即按键抖动

if (backup == 0){  //如果前次值为 0,则说明当前是弹起动作

cnt++;  //按键次数+1

//只用 1 个数码管显示,所以加到 10 就清零重新开始

if (cnt = 10){

cnt = 0;

}

P0 = LedChar[cnt]; //计数值显示到数码管上

}

backup = keybuf; //更新备份为当前值,以备进行下次比较

}

}

}

}

/* 软件延时函数,延时约 10ms */

void delay(){

unsigned int i = 1000;

while (i--);

}


新闻标题:C语言防抖函数 封装防抖函数
分享网址:http://myzitong.com/article/dooehgj.html