博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scroll优化之防抖与节流
阅读量:6491 次
发布时间:2019-06-24

本文共 1877 字,大约阅读时间需要 6 分钟。

这个优化方案是参照

在这里简单的把两个方式写出来,以便快速了解。。

第一种:防抖(也就是滚动结束才执行)

演示:

图片描述

闭包:

/*    延时执行    @param fn function    @param wait number    @return function*/function debounce(fn, wait) {    var timeout = null;    return function() {        if(timeout !== null) clearTimeout(timeout);        timeout = setTimeout(fn, wait);    }}// 处理函数function handle() {    console.log(Math.random()); }// 滚动事件window.addEventListener('scroll', debounce(handle, 500));

直接写:

var timeout = null;window.addEventListener('scroll', function() {    if(timeout !== null) clearTimeout(timeout);    timeout = setTimeout(function() {        var scrollTop = this.scrollY;        console.log(scrollTop);    }.bind(this), 500);});

第二个是节流(Throttling)滚动的过程中间隔执行,例如滚动加载图片效果,不可能等到滚动结束才执行加载函数数吧,所以这里可以做一个间隔执行。。

演示:

图片描述

闭包:

/*    节流函数    @param fn function    @param wait number    @param maxTimeLong number    @return function*/function throttling(fn, wait, maxTimelong) {    var timeout = null,        startTime = Date.parse(new Date);    return function() {        if(timeout !== null) clearTimeout(timeout);        var curTime = Date.parse(new Date);        if(curTime-startTime>=maxTimelong) {            fn();            startTime = curTime;        } else {            timeout = setTimeout(fn, wait);        }    }}function handle() {    console.log(Math.random()); }window.addEventListener('scroll', throttling(handle, 300, 1000));

直接写:

var timeout = null,    startTime = Date.parse(new Date); // 开始时间function handle() {    console.log(Math.random()); }window.addEventListener('scroll', function() {    if(timeout !== null) clearTimeout(timeout);    var curTime = Date.parse(new Date); // 当前时间    if(curTime-startTime>=1000) { // 时间差>=1秒直接执行        handle();        startTime = curTime;    } else { // 否则延时执行,像滚动了一下,差值<1秒的那种也要执行        timeout = setTimeout(handle, 300);    }});

诸如此类事件的还有resize事件都可以使用这两种方式,当然使用哪一种,还要看项目需求了。。谢谢关注~

转载地址:http://oeeuo.baihongyu.com/

你可能感兴趣的文章
Gradle之旅-can not find tools.jar问题解决
查看>>
JavaScript_navigator
查看>>
apache配置文件详解
查看>>
linux下echo的使用总结
查看>>
我的友情链接
查看>>
薪酬福利结构图
查看>>
EDM营销学堂:高效提升营销邮件点击率的技巧
查看>>
hive2solr multivalue功能实现
查看>>
ORACLE 11G静默安装配置分解
查看>>
为什么大家不相信国产虚拟化技术?
查看>>
华为首提“业务驱动基础架构”(SDI)
查看>>
O(1)空间复杂度实现n*n矩阵旋转90度
查看>>
Word2010使用技巧之一:熟悉功能区
查看>>
Citrix XenDektop 7 实施十 创建License Server
查看>>
RookeyFrame 通用页面 加载数据 原理
查看>>
hbuilder APP服务器端(C#)推送
查看>>
统计c盘的PE文件的个数 (遍历所有文件)
查看>>
大白话Vue源码系列目录
查看>>
EffectKeyMap系列1(Ubuntu)
查看>>
iOS手势
查看>>