在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近挺忙的,这次抽空写写文 分类 按照我的个人理解,滚动分 如何设置全局滚动条高度 最常用的方法: window.scrollTo(0, 0); // or window.scrollTo({ left: 0, top: 100 }); 也可以利用 window.scrollBy(0, 0); // or window.scrollBy({ left: 0, top: 100 }); 或者利用 document.scrollingElement.scrollTop = 100; 注意: 效果对比如下:
很明显, 如何指定一个元素显示在视窗 最常用的方法: // 获取元素的offsetTop(元素距离文档顶部的距离) let offsetTop = document.querySelector(".box").offsetTop; // 设置滚动条的高度 window.scrollTo(0, offsetTop); 效果如下: 或者用锚点: <a href="#box">盒子出现在顶部</a> <div id="box"></div> 效果如下: 或者利用 document.querySelector(".box").scrollIntoView(); 效果如下: 还可以指定元素的出现位置: // start出现在视口顶部、center出现在视口中央、end出现在视口底部 document.querySelector(".box").scrollIntoView({ block: "start" || "center" || "end" }); 效果如下: 如何设置滚动具有平滑的过渡效果利用每个方法的 window.scrollTo({ behavior: "smooth" }); window.scrollBy({ behavior: "smooth" }); document.querySelector(".box").scrollIntoView({ behavior: "smooth" }); 效果如下: 或者用 html { scroll-behavior: smooth; // 全局滚动具有平滑效果 } // 或者所有 * { scroll-behavior: smooth; } 效果如下: 注意:设置了该属性之后,所有方法都可以不用设置 一些有趣的东西 1. scrollingElement 该对象可以非常 还记得当初写这个兼容性方法: let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; 现在你只需要: let scrollHeight = document.scrollingElement.scrollHeight; 因为在 标准模式返回 2. 滚动到底部 window.scrollTo({ left: 0, top: document.scrollingElement.scrollHeight }); // 如果你实在是懒的话... window.scrollTo(0, 999999); 注意:平滑滚动到 3. 判断浏览器已滚动到底部 window.addEventListener("scroll", () => { let { scrollTop, scrollHeight, clientHeight } = document.scrollingElement; // 当前滚动高度 + 视口高度 >= 文档总高度 if (scrollTop + clientHeight >= scrollHeight) { console.log("已到达底部"); } }); 效果如下: 函数节流 当你没加函数节流: window.addEventListener("scroll", () => console.log("我在滚我在滚!")); 效果如下: 当你加了函数节流之后: window.addEventListener("scroll", throttle(() => console.log("我在滚我在滚!"))); 效果如下:
function throttle(fn, interval = 500) { let run = true; return function () { if (!run) return; run = false; setTimeout(() => { fn.apply(this, arguments); run = true; }, interval); }; } 用处:减少代码执行频率✅ 函数防抖 当你加了函数防抖之后: window.addEventListener("scroll", debounce(() => console.log("滚动结束!"))); 效果如下:
function debounce(fn, interval = 500) { let timeout = null; return function () { clearTimeout(timeout); timeout = setTimeout(() => { fn.apply(this, arguments); }, interval); }; } 用处:判断某个 解决IOS设备局部滚动不顺畅(粘手) 除了浏览器原生滚动, .box { -webkit-overflow-scrolling: touch; } 对比如下:
注意:要真机才能看到效果,这里指的 滚动传播 指有多个 .box { overscroll-behavior: contain; // 阻止滚动传播 } 对比效果图如下: 横向滚动
<ul> <li> <img src=""> </li> // ... </ul> ul { white-space: nowrap; // 超出不换行 overflow-x: auto; li { display: inline-block; img { display: block; width: 200px; } } } 效果如下: 滚动结束后,强制滚动到指定元素 基于上面的例子,我们设置如下属性: ul { scroll-snap-type: x mandatory; li { scroll-snap-align: start; } } 效果如下: 仔细看会发现,我们松手的时候,会将 也可以设置出现在中间: li { scroll-snap-align: center; } 效果如下: 这样,一个简易的 还可以实现全屏滚动: 注意:该属性会在你 最后 以上涉及到的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论