theme: channing-cyan 前言 长列表渲染一直以来都是前端比较头疼的一个问题,如果想要在网页中放大量的列表项,纯渲染的话,对于浏览器性能将会是个极大的挑战,会造成滚动卡顿,整体体验非常不好...虚拟列表原理 虚拟列表的核心步骤可以总结成五步: 不把长列表数据一次性全部直接渲染在页面上 截取长列表一部分数据用来填充可视区域 长列表数据不可视部分使用空白占位填充(下图中的startOffset和endOffset...区域) 监听滚动事件根据滚动位置动态改变可视列表 监听滚动事件根据滚动位置动态改变空白填充 固定高度 列表项高度固定的话,就无需每次都计算当前应该渲染多少条数据,视口的数据量始终是固定的,只需要通过用户滚动的距离...,目前想到的办法有两个 是加一个过渡的loading, 隐藏滚动条,让用户只能滚轮滚动 不定高度 当列表项的高度不固定的时候,我们就需要一个策略来得到需要渲染的列表项,就是先给没有渲染出来的列表项设置一个预估高度...并且需要注意的是,不只是需要更新视图中的列表项,还需要更新之后的所有列表项 // 每次滚动,都去更新缓存数组中dom的高度和位置 useEffect( function () {
相信大家或多或少都在各种网站上使用过新手引导,当网站提供的功能有点复杂时,这是一个对新手非常友好的功能,可以跟随新手引导一步一步了解网站的各种功能,我们要做的只是点击下一步或者上一步,网站就能滚动到指定位置...,距离的计算可以参考下图: 不过如果元素已经在可视窗口内,其实不需要将它居中,否则如果多个步骤都在一个窗口内,那么切换步骤会频繁的滚动页面,体验反而不好,所以先判断一下元素是否在视口内: class...canvas,然后全部填充成半透明,最后再清除掉目标元素所在位置的绘制,就达到了高亮的效果: 不过这种方式想要效果更好一点比较麻烦,后来在其他库中看到一个很简单的实现,使用一个box-shadow属性即可...当上下左右四个方向都无法满足条件时,我们还可以再检查一种情况,也就是高亮框和信息框的总高度是否比浏览器窗口高度小,是的话我们可以通过滚动页面位置来达到完整显示的目的: class NoviceGuide...,而我们的实现逻辑是通过滚动body来使元素可见的,那么我们就做不到让这个元素出现在视口。
通过设置高度,我的意思是项目应该有内容(不是空的),也不是添加一个显式的高度。...在上图中,无论内容是否长,滚动条总是可见的。注意,这取决于操作系统。 Auto auto这是一个聪明的关键字,仅当内容比其容器长时才显示滚动条。 ?...Overflow-Y 该家伙负责y轴或元素的垂直边。 用例和事例 简单滑块 我们可以通过水平裁剪内容并使其滚动来创建快速简单的滑块。 ?...(准确地说,应用此特性的元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素的属性) 当一个inline-block元素的overflow值不是visible的时,这将导致该元素的底边根据其同级元素的文本基线对齐...一个简单的解决方法是将grid-template-columns重置为1fr,并在视口较大时对其进行更改。
,包括由于溢出导致的视图中不可见内容。...scrollHeight 的值等于该元素在不使用滚动条的情况下为了适应视口中所用内容所需的最小高度。...Element.scrollWidth 这也是一个元素内容宽度的只读属性,包含由于溢出导致视图中不可以见的内容。 原理上和scrollHeight是同理的,只不过这里是宽度而非高度。...本质上就是当元素出现滚动条时,判断当前元素出现的高度 + 滚动条高度 = 元素本身的高度(包含隐藏部分)。...其实MouseEvent.clientX/Y也就是相对于当前视口(浏览器可视区)进行位置计算。
然而,对于可被截断到下一行的行内元素(如 span),offsetTop 和 offsetLeft 描述的是第一个边界框的位置(使用 Element.getClientRects() 来获取其宽度和高度...innerWidth window.innerWidth 是一个只读属性,表示浏览器视口(viewport)宽度(单位:像素),如果存在垂直滚动条则包括它。...var innerWidth = window.innerWidth; innerHeight window.innerHeight 是一个只读属性,表示浏览器窗口的视口(viewport)高度(以像素为单位...var scrollWidth = element.scrollWidth; scrollHeight Element.scrollHeight 是一个只读属性,它是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容...没有垂直滚动条的情况下,scrollHeight值与元素视图填充所有内容所需要的最小值clientHeight相同。包括元素的padding,但不包括元素的border和margin。
主要是将现有的原生事件集合封装合成一个兼容性较强的事件集合。 fastclick源码 核心代码不长, 1000 行不到。有兴趣可以了解一下!...原理与解决方案 软键盘将页面顶起来的解决方案,主要是通过监听页面高度变化,强制恢复成弹出前的高度。...// 记录原有的视口高度 const originalHeight = document.body.clientHeight || document.documentElement.clientHeight...safe-area-inset-top, safe-area-inset-right, safe-area-inset-bottom, safe- area-inset-left safe-area-inset-*由四个定义了视口边缘内矩形的...对于矩形视口,例如普通的笔记本电脑显示器,其值等于零。对于非矩形显示器(如圆形表盘,iPhoneX 屏幕),在用户代理设置的四个值形成的矩形内,所有内容均可见。
一般来说,在处理这样的问题时,我们需要开发和提供不同的布局,通过检测视口的分辨率,判断当前访问设备的种类,请求不同的页面布局从而提供尺寸较为合适的展示场景。...等比拉伸(填满宽度):页面将填满浏览器的宽度,再等比对高度进行拉伸 页面拉伸的特性优点在于设置简单,易用;同时也会有些弊端,由于页面拉伸是页面整体元素进行拉伸,那么如果想要实现部分固定部分拉伸的效果就很困难...活字格的设计器是类excel风格,所以天生就是一个适应Grid布局的高手。...固定模式 固定模式下,行高、列宽为固定的大小,单位为像素,不会随着展示屏幕的变化而变化,如果页面所有被设定了固定模式的行列总像素已经大于了浏览器的宽度/高度,那浏览器中就会出现横向/纵向滚动条。...在活字格中,范围模式提供了按照像素与占比两种方式来设定范围 活字格的范围模式设置界面 上图中的最大值占比,代表的是当且设置的列,在整个页面占据的比例为1份,也就是说,如果整个页面,只有当前列被设置了占比为
在移动设备上,浏览器会显示一个水平滚动条。 ? 解决方法就是使用 flex-wrap: wrap,这样当水平空间不够时,浏览器会帮我们自动换行。...我们的示例有8个卡片项,它们看起来不错。如果,由于某种原因,项目的数量是7呢?第二行元素看起来与第一行不同。 ? ? 在这种情况下,使用CSS网格会更合适。...site-header { position: sticky; top: 0; /*other styles*/ } } 在上面的代码段中,我们告诉浏览器仅在视口的高度等于或大于...否则,浏览器将显示一个水平滚动条。 img { max-width: 100%; } 10....为 input 添加正确的 type 为 input 添加正确的 type,会增强移动浏览器中的用户体验,并使其更易于用户访问。
视口单位 在新的视口变体之前,web提供了物理单位来帮助适应视口。有高度、宽度、最小尺寸 (vmin) 和最大边 (vmax)。这些对很多事情都有效,但移动浏览器带来了复杂性。...但是当该条滑出时,视口高度发生了变化,任何 vh 单位都会随着目标大小的变化而移动和调整大小。...以下是新视口变体提供的所有新视口单位选项的完整列表: /* 高度视口单位 */ .new-height-viewport-units { height: 100vh; height: 100dvh...这是一个示例,其中 元素是主体,但选择器仅在其中一个子元素具有 :focus-visible 时才匹配: section:has(*:focus-visible) {...}...对于我的测试,在一个中等大小的视口上,最初加载了 40 个请求和 700kb 的资源。当用户滚动媒体选择时,会加载更多请求和资源。
返回到上一折点并使其在地图中闪烁。 Shift + 单击 选择包含行。 选择您单击的第一行与最后一行之间的所有行。 Ctrl + 单击 选择多个行。 选择多个行。 Shift+下箭头 添加下一折点。...将下一折点添加到选择中并使其在地图中闪烁。在按住 Shift 键的同时切换方向键将取消选择行。 Shift+上箭头 添加上一折点。 将上一折点添加到选择中并使其在地图中闪烁。...在 2D 中,视图将沿所指示的方向平移。指针距离视图中心越远,平移的速度越快。在 3D 中,当视图沿指针所指示的远离视图中心的方向平移时,将保留照相机的方位角和高度角。...Ctrl+8 在视图中闪烁活动要素。 Ctrl+N 将视图平移至活动要素,并使其闪烁。 Ctrl+等号 (=) 将视图缩放至活动要素并使其闪烁。 双击记录左侧的灰色单元格。 缩放至要素并将其选中。...Ctrl + 下箭头 转至同一列的最后一行。 Ctrl+滚动鼠标滚轮 放大或缩小表的比例。 Ctrl+0 将表的比例重置回 100%。 Shift+滚动鼠标滚轮 水平滚动表窗口。
子元素 word 随着页面滚动显示, 对子元素 bg 设置 background-attachment: fixed, 使其在当前视口固定。...vh 是 css 中的一个相对长度单位, 是相对于视窗的高度, 100vh 就是指 元素的高度等于当前浏览器的视窗高度, 即浏览器内部的可视区域的高度大小。...核心问题是移动浏览器(Chrome和Safari)有一个“帮助”功能,地址栏有时可见,有时隐藏,改变了视口的可见大小。...这些浏览器没有将 100vh 的高度调整为视口高度变化时屏幕的可见部分,而是将 100vh 设置为隐藏地址栏的浏览器高度。...遗憾的是,仍然没有一种简单的方法可以让一个元素在不依赖javascript的情况下占据整个视口高度。 height: 100vh 是如此接近伟大,但考虑到它在移动设备上的局限性,最好避免它。
bottom,center 背景图片重复background-repeat no-repeat数组图像不重复,常用 round自动缩放直到适应并填充整个容器 space以相同的间距平铺且填充整个容器 背景图片定位...background-attachment background-attachment:fixed 背景图像是否固定或者随着页面的其余部分滚动 background-attachment的值可以是scroll...设置当对象的内容超过其指定高度及宽度时如何显示内容 visible默认值,内容不会被修剪,会呈现在元素框之外 hidden内容会被修剪,并且其余内容是不可见的 scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容...auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。...,需要设置position:absolute绝对定位,这条语句的作用加你个元素 从文档流中拖出来,然后使用left,right,top,bottom属性相对于其最接近的一个 具有定位属性的父包含块进行绝对定位
滚动妥协填充空白,装饰成其他功能 在很多时候,我们可以不去解决这个问题,换一直思路。根据场景,我们可以将下拉作为一个功能性的操作。 比如:下拉后刷新页面 ?...主要是将现有的原生事件集合封装合成一个兼容性较强的事件集合。 fastclick源码 核心代码不长, 1000 行不到。有兴趣可以了解一下!...原理与解决方案 软键盘将页面顶起来的解决方案,主要是通过监听页面高度变化,强制恢复成弹出前的高度。...// 记录原有的视口高度 const originalHeight = document.body.clientHeight || document.documentElement.clientHeight...对于矩形视口,例如普通的笔记本电脑显示器,其值等于零。对于非矩形显示器(如圆形表盘,iPhoneX 屏幕),在用户代理设置的四个值形成的矩形内,所有内容均可见。
滚动妥协填充空白,装饰成其他功能 在很多时候,我们可以不去解决这个问题,换一直思路。根据场景,我们可以将下拉作为一个功能性的操作。...主要是将现有的原生事件集合封装合成一个兼容性较强的事件集合。 fastclick源码 核心代码不长, 1000 行不到。有兴趣可以了解一下!...原理与解决方案 软键盘将页面顶起来的解决方案,主要是通过监听页面高度变化,强制恢复成弹出前的高度。...// 记录原有的视口高度 const originalHeight = document.body.clientHeight || document.documentElement.clientHeight...对于矩形视口,例如普通的笔记本电脑显示器,其值等于零。对于非矩形显示器(如圆形表盘,iPhoneX 屏幕),在用户代理设置的四个值形成的矩形内,所有内容均可见。
减少服务器负载:通过按需获取资源,它有助于更高效地分配服务器负载。它减轻了服务器压力,使其能够处理更多的用户请求。...,我们将创建一个Intersection Observer的实例,并指定一个回调函数,每当观察的元素进入或离开视口时,该函数将被触发。...滚动事件上的懒加载内容: 基于滚动事件的方法可以实现高度定制的懒加载实现。您可以完全控制内容何时以及如何加载,使其适用于需要在元素可见时执行特定任务或转换的场景。...滚动事件是JavaScript的一个特性,被所有现代浏览器支持。这意味着您不必担心兼容性问题。 对于单页应用程序,其中内容随着用户浏览网站而加载,使用滚动事件可能更直观。...与Intersection Observer API最适合图像和特定元素不同,基于滚动事件的懒加载提供了更多的灵活性。您可以将其应用于任何内容或复杂组件,这些内容可能不适合“在视图中”的概念。
clientHeight = Math.min(document.body.clientHeight, document.documentElement.clientHeight); } else { // 如果其中一个不存在...如果其中一个不存在,则将另一个值作为可视高度。 可以在浏览器 F12 打开的控制台里进行测试,我这显示的 368 ,用微信截图移动到可视区域可以看到高度正好是 368 。...如果测试时,发现页面有滚动条,但是获取的滚动高度和可视高度一样,要注意看滚动条是不是 iframe 内嵌框架里的,上面可以进行切换,默认的 top 是默认最外层的框架。...下面的表格展示了文档中用到的几种属性含义和用法: 属性 含义 示例 document.documentElement.clientHeight 文档根元素的视口高度,不包括滚动条、边框和外边距。...var clientHeight = document.body.clientHeight; window.innerHeight 浏览器窗口的视口高度,不包括浏览器的工具栏、菜单栏等。
文章首先解释了背景渐变效果的实现原理,然后详细阐述了平滑滚动背景渐变效果的实现步骤,包括创建滚动容器、添加背景渐变效果以及添加滚动事件监听器等。...该函数接受一个起始颜色和一个结束颜色,并根据选择的方向和位置进行渐变填充。 平滑滚动背景渐变效果实现步骤 创建一个具有滚动效果的容器。 .container { height: 100vh; overflow-y: scroll; } 该容器使用vh单位设置高度为视口高度,并设置 overflow-y...添加滚动事件监听器。 通过JavaScript给容器添加滚动事件监听器,以便在滚动过程中更新背景渐变的位置。...,我们获取容器的滚动位置scrollTop、容器的总高度scrollHeight、视口高度windowHeight,并根据滚动进度更新背景渐变的位置。
返回窗口内部的高度/宽度(不包含工具栏和滚动条) window.pageXOffset/window.pageYOffset 文档在窗口左上角水平和垂直方向滚动的像素 window.pageYOffset...-浏览器窗口的可见区域 页面高度 document.documentElement.scrollHeight-浏览器窗口的整个页面高度 滚动高度 document.documentElement.scrollTop...浏览器滚动掉的Y距离 鼠标event事件 属性 说明 offsetX 以当前的元素的左上角为原点, 距离元素顶部的距离 offsetY 以当前的元素的左上角为原点, 距离元素左侧的距离 clientX...以浏览器窗口(视口)的左上角为原点, 距离视口顶部距离, 不随页面滚动而改变 clientY 以浏览器窗口(视口)的左上角为原点, 距离视口左侧距离, 不随页面滚动而改变 pageX 以整个页面的左上角为原点.../scrollWidth 这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。
getBoundingClientRect() 它返回一个对象,其中包含了left、right、top、bottom四个属性,分别对应了该元素的左上角和右下角相对于浏览器窗口(viewport)左上角的距离...注意:当元素溢出浏览器的视口,值会变成负数。...; var Y = node.getBoundingClientRect().top+node.scrollTop; 一个demo加深印象 有一个列表,当我们输入文段编号,列表会将选中文段滚动到视图中...大概是这样 实现思路就是,去拿到选中元素的clientHeight和offsetTop,并和列表的高度区间做比较,计算出元素是在列表视口的内部,还是溢出的视口,如果溢出了视口,那么就回滚。...text-align: center; font-size:22px; color:#9ef64d; } 核心方法 const { value } = this.state; // 滚动视口的高度
领取专属 10元无门槛券
手把手带您无忧上云