解决页面中的搜索框频繁输入导致频繁发送请求损耗性能的问题;可以设置一个定时器,用下一次的执行来清除上一次的预执行。
clearTimeout(this.TimeId); this.TimeId = setTimeout(() => { // 4 拼接接口路径 this.getGoodsBySearch(value); }, 1000);
解决页面在触底后频繁发送请求导致损耗性能的问题。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } body{ height: 100vh; overflow: auto; } div{ height: 50px; font-size: 20px; padding: 5px; /* border-bottom: 1px solid #000; */ box-shadow: 0 1px 1px 1px red; } </style> </head> <body> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> <div>7</div> <div>8</div> <div>9</div> <div>10</div> <div>11</div> <div>12</div> <div>13</div> <div>14</div> <div>15</div> <div>16</div> <div>17</div> <div>18</div> <div>19</div> <div>20</div> <div>21</div> <div>22</div> <div>23</div> <div>24</div> <div>25</div> <div>26</div> <div>27</div> <div>28</div> <div>29</div> <div>30</div> <div>31</div> <div>32</div> <div>33</div> <div>34</div> <div>35</div> <div>36</div> <div>37</div> <div>38</div> <div>39</div> <div>40</div> </body> <script> // 是否在加载中 let isLoadding=false; // 1 滚动条事件 document.body.onscroll=function(){ // 1 获取滚动条距离顶部的距离 let scrollTop=document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; // 2 如何判断 滚动条到了底部了 滚动条距离底部 50px 就触发行为 // 2.1 先算出来 整个div列表 高度 let totalDivHeight=document.querySelector("div").clientHeight*document.querySelectorAll("div").length; // 2.2 先算出来 整个div列表比 body标签高多少 let dis=totalDivHeight-document.body.clientHeight; // 2.3 当 滚动条距离底部 50px的时候就触发 if(dis-scrollTop<=50){ // console.log("触底啦!!!"); // 发送异步请求的代码 // 判断请求是否在加载中 if(isLoadding){ // 什么都不做了。。 }else{ // 告诉别人 我们正在请求数据 isLoadding=true; console.log("发送异步请求"); // 异步请求成功了 再打开开关 setTimeout(() => { console.log("数据请求成功"); isLoadding=false; }, 3000); } } } </script> </html>
原文:https://www.cnblogs.com/sauronblog/p/11440882.html