首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个简洁、有趣的无限下拉方案

不知你是否从上面这张图中注意到了什么,比如只是渲染了可视区域的部分 DOM ,滚动过程中只是外层容器的 padding 在改变?...传统的各种方案不但复杂,而且性能成本很高,比如需要监听滚动事件,然后查询 DOM , 获取元素高度、位置,计算距离视窗高度等等。 这就是 Intersection Observer 要解决的问题。...监测用户的滚动行为是否到达了目标位置来实现一些交互逻辑(比如视频元素滚动到隐藏位置时暂停播放)。...,异步监听,尽可能得减少 DOM 操作,触发回调,然后去获取新的数据来更新页面元素,并且用调整容器 padding 来替代了本该越来越多的 DOM 元素,最终实现列表滚动、无限下拉。...获取滚动距离,然后: 设置父元素的 translate 来实现整体内容的上移(下移); 再基于这个滚动距离进行相应计算,得知相应子元素已经被滚动到视窗外,并且判断是否应该将这些离开视窗的子元素移动到末尾

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    VIM 常用快捷键

    n%: 到文件n%的位置。 zz: 将当前行移动到屏幕中央。 zt: 将当前行移动到屏幕顶端。 zb: 将当前行移动到屏幕底端。...I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o: 在下面新建一行插入; O: 在上面新建一行插入; :r filename在当前位置插入另一个文件的内容...:[n]r filename在第n行插入另一个文件的内容。 剪切和复制 [n]x: 剪切光标右边n个字符,相当于d[n]l。 [n]X: 剪切光标左边n个字符,相当于d[n]h。...y$: 从光标当前位置复制到行尾。 y0: 从光标当前位置复制到行首。 :m,ny 复制m行到n行的内容。 y1G或ygg: 复制光标以上的所有行。 yG: 复制光标以下的所有行。...d0: 删除(剪切)当前位置到行首的内容 p: 在光标之后粘贴。 P: 在光标之前粘贴。 查找和替换 /something: 在后面的文本中查找something。 ?

    27.3K23

    C盘爆满,如何移除软件~

    村里儿来的,没见过这么大的....自述文件 自由移动 自由移动目录,而不会破坏安装或快捷方式 您可以使用此工具将默认情况下安装在C:\上的程序移动到另一个驱动器上,以节省主驱动器上的空间。...这个怎么运作 文件被移动到新位置 一个符号链接从旧的位置重定向到新创建的。任何试图访问旧位置文件的程序都会自动重定向到新位置 下载 ?...要移回目录,请参阅自述文件的最后一部分。 也就是说,移动前面提到的目录中包含的目录应该不会引起任何问题。...卸载程序将正常运行,在您将程序移至的位置保留一个空目录,并在原始位置保留目录链接,然后可以手动删除这两个目录 移回程序 删除旧位置的联结(这不会删除内容),并将目录移回其原始位置 ?

    1.8K30

    Vim命令使用说明

    w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o: 在下面新建一行插入; O: 在上面新建一行插入; :r filename在当前位置插入另一个文件的内容...:[n]r filename在第n行插入另一个文件的内容。 :r !date 在光标处插入当前日期与时间。同理,:r !...d0: 删除(剪切)当前位置到行首的内容 [n] dd: 删除(剪切)1(n)行。 :m,nd 剪切m行到n行的内容。 d1G或dgg: 剪切光标以上的所有行。 dG: 剪切光标以下的所有行。...y$: 从光标当前位置复制到行尾。 y0: 从光标当前位置复制到行首。 :m,ny 复制m行到n行的内容。 y1G或ygg: 复制光标以上的所有行。 yG: 复制光标以下的所有行。

    2.6K11

    Chrome开发者工具的11个高级使用技巧

    截取网页上所有内容的屏幕快照,包括可视窗口中未显示的所有内容。 精确捕获 DOM 元素的内容。 这是两个很普通的要求,但是使用操作系统随附的屏幕截图工具不太容易解决。...所以在 Chrome 浏览器中,我们该如何将图像转换为 Data URL 呢?可以参考下面的 gif 图像: ? 7....在“元素”面板对 DOM 元素进行拖放 有时我们想调整页面上某些 DOM 元素的位置以测试 UI。在“元素”面板中,你可以拖放任何 HTML 元素来更改其在页面中的显示位置: ?...上面的展示中,在“元素”面板中将某个 div 的位置拖动到其他位置,它在网页上的展示位置就会同步更改。 9....在控制台中引用当前选定的 DOM 元素 $0是另一个魔术变量,它会引用“元素”面板中当前选定的 DOM 元素。 ? 10.

    2.2K60

    【汉诺塔】小游戏开发教程

    游戏简介 汉诺塔是源于印度一个古老传说的益智游戏,传说大梵天创造世界的时候顺便搞了三根柱子,一根柱子上摞着一堆从大到小的圆环,他命令婆罗门把圆环全部移动到另一个柱子上,依旧是从大到小,且移动规则如下:...因为涉及到位置计算,所以需要获取实际的DOM元素,先在模板里加上ref用于引用DOM: 的位置要回去的话直接把dragPos的值恢复要0即可,其他的相关变量也需要复位: { // 拖动完成后复位 reset() { this.dragProp = ''...圆环不符合落下条件时复位的过渡不需要修改,加上transition就有过渡能力了,主要是符合落下条件时从鼠标松开的位置过渡到目标位置需要计算一下,看图: 因为拖动中的圆环的transition的坐标也就是...this.transition = 'all 0.5s' if (canDraged) { // 核心函数,让圆环从松开的位置移动到目标位置

    1.9K10

    精读《DOM diff 原理详解》

    DOM diff 作为工程问题,需要具有一定算法思维,因此经常出现在面试场景中,毕竟这是难得出现在工程领域的算法问题。...由于左树中任意节点都可能出现在右树,所以必须在对左树深度遍历的同时,对右树进行深度遍历,找到每个节点的对应关系,这里的时间复杂度是 O(n²),之后需要对树的各节点进行增删移的操作,这个过程简单可以理解为加了一层遍历循环...a c e 这三个字母在 Old 原始顺序 a b c d e 中是相对有序的,我们只要把 b d 移走,这三个字母的位置自然就正确了。因此我们只需要找到 New 数组中的 最长连续子串。...React 采用了 仅右移策略,即对元素发生的位置变化,只会将其移动到右边,那么右边移完了,其他位置也就有序了。...我们看图说明: 遍历 Old 存储 Map 和 Vue 是一样的,然后就到了第二步遍历 New,b 下标从原来的 1 变成了 0,需要左移才行,但我们不左移,我们只右移,因为所有右移做完后,左移就等于自动做掉了

    43220

    请阐述vue的diff算法

    div,key值不仅仅在v-for遍历中,也可以用在任何标签中,上面两个div中没有key值,所以都为undefined,所以标签类型和key值都相同,不用看内容是否相同,它是另一个节点:文本节点 的真实dom赋值到新节点(真实dom连线到新子节点),然后循环对比新旧节点的属性,看看有没有不一样的地方,将有变化的更新到真实dom中,最后还要采用深度优先(一颗树的节点走到尽头,再走另一个节点...,循环旧虚拟子节点,看看新树圆3是否存在于旧虚拟子节点,存在的话在哪个位置,找到之后进行复用,连线,有变化的地方更新到真实dom,操作跟前面几步一样,真实dom也要进行位置移动,移动到旧树头指针之前。...随后新树头指针往后移动,与新树尾指针重合,旧树尾指针向前移动到圆1位置,如下图: 继续比对,新旧两树头指针不同,尾指针不同,两个头尾也不同,然后它以新树头指针为基准,循环旧虚拟子节点,找圆8在旧树中存不存在...随后新树头指针继续向后移动到圆2位置,如图: 当头指针移动到圆2位置时,头指针已经不再是有效的了,当头指针超过尾指针的时候,循环结束,从过程我们可以看到新树先循环完成,但是旧树还有剩余的节点,这说明旧树中剩余的节点都是应该被删除的节点

    80910

    【JS】310- 使用 focusout 事件,解决 iOS 键盘收起不归位问题

    此时,实际上页面顶部是离开了我们的视口一部分距离的(我们看到界面中消失了一行输入框)。 键盘收起时页面无法还原归位 然而当用户输入完成关闭键盘后,键盘虽然收起了,但页面位置却不会还原。...要解决这个问题,我们可以在用户光标离开输入框的时候,调用 window.scrollTo(0, 0) 来把页面滚动到跟视口顶部对齐,从而实现页面归位的效果。...那么现在问题就是要给表单中 4 个输入框全部加上 blur 事件,然后在 handler 中调用 window.scrollTo。...而实际上我们看 MDN 文档发现,这两个事件已经成为 DOM 3 规范的一个标准,而且可支持的浏览器数量并不少。...,然后点击键盘的完成收起键盘,效果符合我们的预期。

    3.4K10

    【移动端bug】iOS 下 Input 和 fixed 的问题

    DOM 错位 先来简单描述一下这两个问题 第一个问题 IOS11 下,当你激活定位元素中的输入框的时候,就会发生光标错位 第二个问题 IOS13 下,当你激活定位元素中的输入框时,然后输入框失焦,然后再激活的时候...然后我们还要知道另一个事情,就是 当页面没有滚到底部时,就激活定位元素中的输入框,那么显示就会是正常的 看下图,页面很长,出现弹窗时,没有滚到底部 ?...那么我们从上面两种现象,可以得出一个结论 1、页面已经滚动到底, 定位元素输入框,唤起键盘,再收起键盘,定位元素的 实际DOM 会停留在唤起键盘的位置 ,跟显示的元素错位了 2、页面没有滚动到底,定位元素输入框...发现,的确高度不一样,的确实际DOM 和 显示的元素 错位了 2 、证明没有滚动到底部时,实际DOM 的位置是正常的,和显示元素对应 ?...(0) 直接滚动到顶,从而复位但是这样带来的问题就是体验不好,用户丢失了浏览高度 所以打算是 1、在输入框激活时,保存页面浏览的高度 2、输入框失焦时,获取保存的浏览高度,然后滚动到相应的位置 3、输入框失焦聚焦时要进行防抖处理

    4.7K61

    Folder Tidy for mac(Mac桌面文件整理工具)v2.9免激活版

    软件默认设定了12种分类规则,你也可以自定义自己的规则,让软件分的更细、更符合你的使用习惯。...图片Folder Tidy for mac(Mac桌面文件整理工具)Folder Tidy mac版功能介绍1、通过将混乱的文件移动到有组织的子文件夹中来整理任何文件夹(包括桌面)。...2、使用简单但功能强大的内置规则,一键式整理。3、创建高级自定义规则以完全按照您的方式整理文件夹。4、如果你改变主意,在整洁结束时将所有东西都移回去。...Folder Tidy mac版软件特征根据文件类型和/或规则将文件组织到子文件夹中。使用众多内置规则之一,或者根据谓词创建强大的规则。选择清理什么类型的文件。在清理过程中选择要忽略的文件和文件夹。...选择清理文件和文件夹的位置。忽略别名,文件夹和任何带有标签的选项。撤消清理的能力。国际上超过600个五星评级。

    86330

    ReactPortals传送门

    React Portals可以翻译为传送门,从字面意思上就可以理解为我们可以通过这个方法将我们的React组件传送到任意指定的位置,可以将组件的输出渲染到DOM树中的任意位置,而不仅仅是组件所在的...DOM结构中,以确保组件在正确的位置和上下文中运行。...React树的祖先,事件冒泡将按预期工作,而与DOM中的Portal节点位置无关。...,可能会比较绕,可以认为实际上每个弹出层都分为了两块,一个是原本的child,另一个是弹出的portal,这两个结构是平行的放在React DOM树中的,那么在多级弹出层之后,实际上每个子trigger...,当然在实际的处理过程中还有相当多的细节需要处理,例如位置计算、动画、事件处理等等等等,而且实际上这个组件也有很多我们可以学习的地方,例如如何将外部传递的事件处理函数交予children、React.Children.map

    26750

    请阐述vue的diff算法

    其他代码 } diff就发生在_update函数的运行过程中 代码中先调用_render函数得到虚拟dom根节点,然后传入_update函数中,在将updateComponent传入Watcher中,watcher...所以都为undefined,所以标签类型和key值都相同,不用看内容是否相同,它是另一个节点:文本节点 法医 前端猎手的真实dom赋值到新节点(真实dom连线到新子节点),然后循环对比新旧节点的属性,看看有没有不一样的地方,将有变化的更新到真实dom中,最后还要采用深度优先(一颗树的节点走到尽头,再走另一个节点...,循环旧虚拟子节点,看看新树圆3是否存在于旧虚拟子节点,存在的话在哪个位置,找到之后进行复用,连线,有变化的地方更新到真实dom,操作跟前面几步一样,真实dom也要进行位置移动,移动到旧树头指针之前。...随后新树头指针继续向后移动到圆2位置,如图: [38ca38587d044d63bcdf9840bbd9c9e6~tplv-k3u1fbpfcp-watermark.image] 当头指针移动到圆2位置时

    54930

    深入 Vue2.x 的虚拟 DOM diff 原理

    和newVdom都要进行标记,如果节点只出现在其中某一个vdom中,则另一个vdom中不需要进行标记),标记的方法有2种,当节点正好在vdom的指针处,移动指针将它排除到未处理列表之外即可,否则就要采用其他方法...如果是oldVdom中有这类节点,则这些是需要删除的节点,相应在DOM树中删除之 整个过程是逐步找到更新前后vdom的差异,然后将差异反应到DOM树上(也就是patch),特别要提一下Vue的patch...和newStart后移1位即可,过程中不需要移动DOM(更新DOM或许是要的,比如属性变更了,文本内容变更了等等) [1506309881707_3978_1506309884388.png] (2...)、处理尾部的同类型节点,即oldEnd和newEnd指向同类节点的情况,如下图中的节点10 与情况(1)类似,这种情况下,将节点10的变更更新到DOM,然后oldEnd和newEnd前移1位进行标记...newStart来到了节点11的位置,在oldVdom中找不到节点11,说明它是新增的 那么就创建一个新的节点,插入DOM树,插到什么位置?

    7.9K112

    【Rust学习】04_所有权

    在本章中,我们将讨论所有权以及几个相关功能:借用、切片以及 Rust 如何在内存中布局数据。 内容 什么是所有权 所有权是一组规则,用于管理 Rust 程序如何管理内存。...现代处理器在内存中跳转越少就越快(缓存)。继续类比,假设有一个服务员在餐厅里处理多个桌子的点菜。在一个桌子报完所有菜后再移动到下一个桌子是最有效率的。...从桌子 A 听一个菜,接着桌子 B 听一个菜,然后再桌子 A,然后再桌子 B 这样的流程会更加缓慢。...中, // 它也将返回值移给 s3 } // 这里, s3 移出作用域并被丢弃。...当持有堆中数据值的变量离开作用域时,其值将通过 drop 被清理掉,除非数据被移动为另一个变量所有。 在每一个函数中都获取所有权并接着返回所有权有些啰嗦。

    6710

    前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实现小姐姐流畅移动。

    假设第一行第一个图片移动到了第二行第三列,是不是要计算出第一行的高度,再计算出第二行前两个元素的宽度,然后从初始的坐标点通过 CSS 或者一些动画 API 移动过去?...换种思路,能不能直接很自然的把 DOM 元素通过原生 API 添加到 DOM 树中,然后让浏览器帮我们好这个终点值,最后我们再动画位移过去?...但是,此时我们不按照常规思维去先计算它的最终位置,然后再命令元素从 0, 0 运动到 100, 100,而是先让元素自己移动过去(比如在 Vue 中用数据来驱动,在数组前面追加几个图片,之前的图片就自己移动到下面去了...然后定义一个计算一组 DOM 元素位置的函数 getRects,利用 getBoundingClientRect 可以获得最新的位置信息,这个方法在接下来获取图片元素旧位置和新位置时都要使用。...,虽然图片移动到最新位置了,但你先给我回去,等着我来让你做动画。

    1.5K50

    如何编写高效的jQuery代码(转载)

    许多jQuery方法都有两个版本,一个是供jQuery对象使用的版本,另一个是供jQuery函数使用的版本。由于后者不通过jQuery对象操作,所以相对开销较小,速度比较快。   ...结构   如果要多次改动DOM结构,就先把要改动的部分先取出来,改动完成后再放回去。...这里的基本思想是在内存中建立你确实想要的东西,最后做一次最有效的更新DOM操作。   ...  jQuery代码中不免夹杂有JS代码,如何让jQuery代码看起来严谨有序,规范自己的命名规则能更好的提高代码的阅读性。   ...五、页面加载   尽管 $(function(){});  确实很有用, 它是在所有DOM元素加载完成。如果你发现你的页面一直是载入中的状态,很有可能就是这个函数引起的。

    75520
    领券