码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 你把 浏览器滚动事件 玩明白


    目录

    第一 :设置浏览器滚动条滚动高度

    一: 相对于页面顶部的距离 

     二:相对于滚动条的位置开始

    三:利用scrollTop设置

    第二: 设置元素在页面什么位置,滚动条就跑到哪里

      一:使用offsetTop (先获取在设置) 

    ​

               二:使用a标签 锚点

      三:利用scrollIntoView进行展示

     第三:判断是否到屏幕底部(scrollingElement)兼容移动端 pc端

     第四:函数节流绑定滚动事件

     第五:.函数防抖 

     第六:解决IOS设备局部滚动不顺畅

     第七:利用滚动写轮播

    第八:浏览器滚动条样式修改 第四条 


    ​前期回顾    ​       

    vite + vue3 + 封装axios + 封装loading + 封装返回顶部_0.活在风浪里的博客-CSDN博客目前为止我们实现了 axios封装 loading 封装 返回顶部封装!本人亲测保证能用,最后祝大家2022越来越强https://blog.csdn.net/m0_57904695/article/details/125891081?spm=1001.2014.3001.5501

    奇怪的知识又增加了 


     念及此,安排一下

    第一 :设置浏览器滚动条滚动高度

    一: 相对于页面顶部的距离 

    1. // 简写
    2. window.scrollTo(0, 0);
    3. // 完整写法
    4. window.scrollTo({
    5. left: 0,
    6. top: 100,
    7. behavior: "smooth",
    8. });
    9. // 滚动到底部
    10. window.scrollTo({
    11. left: 0,
    12. top: document.scrollingElement.scrollHeight
    13. });
    14. // 如果你实在是懒的话...
    15. window.scrollTo(0, 999999);

     二:相对于滚动条的位置开始

    1. window.scrollBy(0, 0);
    2. ||
    3. window.scrollBy({
    4. left: 0,
    5. top: 100,
    6. behavior: "smooth",
    7. });

    三:利用scrollTop设置

    document.scrollingElement.scrollTop = 100;
    

    效果

    绝对  window.scrollTo(0, 100);


    相对  window.scrollBy(0, 100);


    第二: 设置元素在页面什么位置,滚动条就跑到哪里

    一:使用offsetTop (先获取在设置) 

    1. // 获取元素的offsetTop(元素距离文档顶部的距离)
    2. let offsetTop = document.querySelector(".box").offsetTop;
    3. // 设置滚动条的高度
    4. window.scrollTo(0, offsetTop);

    二:使用a标签 锚点

    1. "#box">我是a标签
    2. <div id="box" class="box">我是box盒子div>

    点击a链接 box盒子会跑到页面顶部

    1. html,
    2. body,
    3. #app {
    4. width: 100%;
    5. height: 100%;
    6. /* 全局平滑滚动 */
    7. scroll-behavior: smooth;
    8. }
    9. /* 这里是全局css,也可以单页面加*/

     三:利用scrollIntoView进行展示

    1. // start出现在视口顶部、center出现在视口中央、end出现在视口底部
    2. document.querySelector(".box").scrollIntoView({
    3. block: "start" || "center" || "end"
    4. });
    5. // 因为设置了全局平滑滚动,所以这里直接简写,也有滚动动画

     第三:判断是否到屏幕底部(scrollingElement)兼容移动端 pc端

    该对象可以非常兼容地获取scrollTop + clientHeight + scrollHeight等属性,在移动端和PC端屡试不爽,还记得当初写这个兼容方法:

    let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
    

     现在你只需要:

    let scrollHeight = document.scrollingElement.scrollHeight;
    

    因为在MDN中是这样介绍它的:
    标准模式返回documentElement,怪异模式返回body;

    滚动到底部

    1. window.scrollTo({
    2. left: 0,
    3. top: document.scrollingElement.scrollHeight
    4. });
    5. // 如果你实在是懒的话...
    6. window.scrollTo(0, 999999);

    判断浏览器已滚动到底部

    •  思路:给window绑定scroll事件,获取滚动高度和视口高度和文档总高度,判断 当前滚动高度 + 视口高度 >= 文档总高度书写逻辑
    1. window.addEventListener("scroll", () => {
    2. let { scrollTop, scrollHeight, clientHeight } = document.scrollingElement;
    3. // 当前滚动高度 + 视口高度 >= 文档总高度
    4. if (scrollTop + clientHeight >= scrollHeight) {
    5. console.log("已到达底部");
    6. }
    7. });

    第四:函数节流绑定滚动事件

    • 节流会稀释执行频率,在规定的时间里只会执行一次,若在 规定时间内重复触发,只有一次生效,简单来说节流重复触发只会执行一次
    window.addEventListener("scroll", throttle());
    
    1. function throttle(fn, interval = 500) {
    2. let run = true;
    3. return function () {
    4. if (!run) return;// 如果正在执行则终止
    5. run = false;
    6. setTimeout(() => {
    7. fn.apply(this, arguments);
    8. run = true; //执行完打开节流阀
    9. }, interval);
    10. };
    11. }

    第五:.函数防抖 

    •  n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时,简单来说防抖若重复触发会从头开始
    window.addEventListener("scroll", debounce());
    

    如果你在监听滚动事件,假设两秒以内用户在不断的频繁的触发onScroll事件,只有用户暂停滚动后,才会去执行响应的操作,代码如下 

    1. function debounce(fn, interval = 500) {
    2. let timer = null;
    3. return function () {
    4. clearTimeout(timer ); // 清除未执行的代码,重置回初始化状态
    5. timer = setTimeout(() => {
    6. console.log("函数防抖");
    7. }, interval);
    8. };
    9. }

    第六:解决IOS设备局部滚动不顺畅

    •  除了浏览器原生滚动,自定义滚动条都会出现这个情况,比如overflow: auto || scroll; 后的滚动行为加以下属性就可以解决:
    1. .box {
    2. -webkit-overflow-scrolling: touch;
    3. }

     第七:利用滚动写轮播

      • <li>
      • <img src="">
      • li>
      • ul>
      1. ul {
      2. white-space: nowrap; // 超出不换行
      3. overflow-x: auto;
      4. width:500px;
      5. li {
      6. //默认松手最近一张图片会滚动到最右边(初始位置,对于Y轴来讲就是顶部,X轴则是右边)
      7. //也可以设置出现在中间:
      8. scroll-snap-align: center;
      9. img {
      10. display: block;
      11. width: 200px;
      12. }
      13. }
      14. }

      第八:浏览器滚动条样式修改 第四条 

      JavaScript 法术合集_0.活在风浪里的博客-CSDN博客​前期回顾 ​Vue项目实战 —— 后台管理系统( pc端 ) 第三篇_0.活在风浪里的博客-CSDN博客mock模拟数据、折线图、柱状图、饼图,一遍就懂!!~https://blog.csdn.net/m0_57904695/article/details/124861409?spm=1001.2014.3001.5501目录JavaScript 语法之创建对象的三种方法1、通过内置的构造函数创建对象2、通过字面量创建对象3、通过构造函数​编辑获取后台接口的前五........https://blog.csdn.net/m0_57904695/article/details/124885964?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165940908716780357214701%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165940908716780357214701&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-7-124885964-null-null.nonecase&utm_term=%E6%89%93%E5%8C%85&spm=1018.2226.3001.4450

    1. 相关阅读:
      热门免费api接口:含物流api,短信api,天气api等
      SQL 练习
      OOTD | 美式复古穿搭耳机,复古轻便的头戴式耳机推荐
      外汇天眼:外汇走势图怎么看涨跌,怎么看外汇盘面走势图?
      【网络教程】Iptables官方教程-学习笔记6-IPTABLES TARGETS
      【Linux网络】1分钟使用shell脚本完成DNS主从解析服务器部署(适用于centos主机)
      干货丨浅谈足式机器人控制总线
      工作薄代码之将活动工作表复制到新工作簿等
      K8S入门前奏之VMware虚拟机网络配置
      安卓 实现60s倒计时的CountDownTimer(小坑)
    2. 原文地址:https://blog.csdn.net/m0_57904695/article/details/125926551
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号