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

vue自定义指令监听元素是否进入父元素视窗

需求背景一个每行3列的列表布局,列表中的每一项有一个已读/未读状态,只要展现在了用户的视窗就算已读状态了。...想到的方案:直接监听滚动高度,根据滚动距离来计算是否展现在页面借助第三方插件,找到一个 vue-check-view,不过只能监听整个 window 视窗的页面滚动,如果想监听某个元素的内部滚动是否可见没法实现刚开始直接用的...然后想到h5里新出的监听元素是否进入的 IntersectionObserver,一看好像可以满足,在借助 vue 的自定义指令来封装成一个自定义指令使用。...或者一些额外的参数需要传到指令里来进行判断的...这时我们就可以借助第二个参数 binding 来实现,binding.value 就是我们写在指令 = 后面的东西,可以传递函数、对象、数值、字符串、布尔任意类型...监听元素是否进入某个自定义指令监听元素是否进入某个自定义指令,可以通过 root 参数传入父的选择器,不传就默认是相对于浏览器window窗口。适用于元素懒加载、埋点上报、查看了修改状态。

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

    vue自定义指令和IntersectionObserver接口,监听元素进入父元素视窗的实际应用

    需求背景:一个每行3列的列表布局,列表中的每一项有一个已读/未读状态,只要展现在了用户的视窗就算已读状态了。...想到的方案: 直接监听滚动高度,根据滚动距离来计算是否展现在页面 借助第三方插件,找到一个 vue-check-view,不过只能监听整个 window 视窗的页面滚动,如果想监听某个元素的内部滚动是否可见没法实现...然后想到h5里新出的监听元素是否进入的 IntersectionObserver,一看好像可以满足,在借助 vue 的自定义指令来封装成一个自定义指令使用。...或者一些额外的参数需要传到指令里来进行判断的...这时我们就可以借助第二个参数 binding 来实现,binding.value 就是我们写在指令 = 后面的东西,可以传递函数、对象、数值、字符串、布尔任意类型...监听元素是否进入某个自定义指令 监听元素是否进入某个自定义指令,可以通过 root 参数传入父的选择器,不传就默认是相对于浏览器window窗口。

    50540

    CSS | 视差滚动 | 笔记

    background-attachment: 决定 背景图像的位置 是在 口内固定 ,或者 随着包含它的区块滚动 。 它的属性值的含义如下: 属性值 含义 fixed 背景相对于固定。...子元素 word 随着页面滚动显示, 对子元素 bg 设置 background-attachment: fixed, 使其在当前固定。...perspective属性用在容器上,容器每个元素的表现形式会不一样。 当perspective属性用在容器每个元素身上,会根据各自的设置值进行表现。...,但只有当其对应容器抵达才能显示对应可视区域的背景图。...这些浏览器没有 100vh 的高度调整为高度变化时屏幕的可见部分,而是 100vh 设置为隐藏地址栏的浏览器高度。

    73021

    Vue项目中的虚拟滚动:提升页面渲染性能的最佳实践

    什么是虚拟滚动虚拟滚动(Virtual Scrolling)是一种高效的渲染技术,主要用于处理大量数据的长列表表格。其基本原理是只渲染当前口内可见的元素,而对不可见的部分仅保留占位符。...这种方法大幅减少了DOM节点的数量,从而提升了渲染性能和滚动流畅度。虚拟滚动的核心有以下 4 点:渲染可见元素:虚拟滚动只会渲染当前口内的元素,而不是整个列表表格。...比方说,假设口中只能显示10个元素,那么虚拟滚动技术只会渲染这10个元素,即使总数据量有上万个。动态更新口内容:当用户进行滚动操作 ,使用虚拟滚动技术可以动态更新可视区域的内容。...新进入的元素会被渲染,而离开的元素会被销毁,从而保持口内元素的数量相对稳定。减少DOM操作:由于只渲染了可视区域的元素,虚拟滚动大幅减少了DOM操作的频率。...占位元素:为了确保滚动条的正确性,虚拟滚动技术通常会使用一个高度为所有元素总高度的占位元素。这种占位元素会占据整个列表的高度,从而使滚动条的行为与渲染所有元素相同。

    1.5K10

    移动端与PC端页面布局区别、background-size 背景图片的缩放

    是移动设备上用来显示网页的区域,一般会比移动设备可视区域大,宽度可能是980px或者1024px,目的是为了显示下整个为PC端设计的网页,这样带来的后果是移动端会出现横向滚动条,为了避免这种情况...这样会让网页不容易观看,可以用 meta 标签,name=“viewport ” 来设置的大小,的大小设置为和移动设备可视区一样的大小。...使用解决上面的div显示太小的问题 ? ? 设置了之后,div显示比较正常了。...cover:背景图像等比缩放到完全覆盖容器,背景图像有可能超出容器。 contain:背景图像等比缩放到宽度高度与容器的宽度高度相等,背景图像始终被包含在容器。...contain:背景图像等比缩放到宽度高度与容器的宽度高度相等,背景图像始终被包含在容器。 ?

    3K20

    CSS 定位详解

    3.3 fixed 属性值 fixed表示,相对于(viewport,浏览器窗口)进行偏移,即定位基点是浏览器窗口。这会导致元素的位置不随页面滚动而变化,好像固定在网页上一样。 ?...div { position: fixed; top: 0; } 上面代码中,div元素始终在顶部,不随网页滚动而变化。...它的具体规则是,当页面滚动,父元素开始脱离(即部分不可见),只要与sticky元素的距离达到生效门槛,relative定位自动切换为fixed定位;等到父元素完全脱离(即完全不可见),fixed...,#toolbar的父元素开始脱离,一旦的顶部与#toolbar的距离小于20px(门槛值),#toolbar就自动变为fixed定位,保持与顶部20px的距离。...页面继续向下滚动,父元素彻底离开(即整个父元素完全不可见),#toolbar恢复成relative定位。 五、 sticky 的应用 sticky定位可以实现一些很有用的效果。

    1.8K40

    IntersectionObserver对象

    viewport交叉状态的方法,祖先元素与视窗viewport被称为根root,也就是说IntersectionObserver API,可以自动观察元素是否可见,由于可见visible的本质是,目标元素与产生一个交叉区...描述 IntersectionObserver解决了一个长期以来Web的问题,观察元素是否可见,这个可见visible的本质是,目标元素与产生一个交叉区,所以这个API叫做交叉观察器。...属性IntersectionObserver.rootMargin只读,计算交叉添加到根root边界盒bounding box的矩形偏移量,可以有效的缩小扩大根的判定范围从而满足计算需要,此属性返回的值可能与调用构造函数指定的值不同...rootBounds:根元素的矩形区域的信息,是getBoundingClientRect方法的返回值,如果没有根元素即直接相对于滚动,则返回null。...intersectionRect:目标元素与根元素的交叉区域的信息。

    69420

    CSS 定位详解

    # 3.3 fixed 属性值 fixed表示,相对于(viewport,浏览器窗口)进行偏移,即定位基点是浏览器窗口。这会导致元素的位置不随页面滚动而变化,好像固定在网页上一样。...div { position: fixed; top: 0; } 1 2 3 4 复制 上面代码中,div元素始终在顶部,不随网页滚动而变化。...它的具体规则是,当页面滚动,父元素开始脱离(即部分不可见),只要与sticky元素的距离达到生效门槛,relative定位自动切换为fixed定位; 等到父元素完全脱离(即完全不可见),fixed...,#toolbar的父元素开始脱离,一旦的顶部与#toolbar的距离小于20px(门槛值),#toolbar就自动变为fixed定位, 保持与顶部20px的距离。...页面继续向下滚动,父元素彻底离开(即整个父元素完全不可见),#toolbar恢复成relative定位。 # 五、 sticky 的应用 sticky定位可以实现一些很有用的效果。

    1.7K10

    大白话详解Intersection Observer API

    1.Intersection Observer API 的基本介绍 Intersection Observer API提供了一种异步检测目标元素与祖先元素(可统称为根元素)相交情况变化的方法。...——当用户滚动到接近底部直接加载更多,而无需翻页,给用户一种网页可以无限滚动的错觉 两个元素是否相交,如: 检测广告的曝光情况——为了计算广告收益,需要知道广告元素的曝光情况 在用户看见某个区域执行任务播放动画...默认为浏览器。 如果指定为 null,也为浏览器。 必须是目标元素的父级元素。 rootMargin --- 根元素的扩缩边距。...顶级文档的(一般为 html) rootMargin 根元素的扩缩边距。...element.getBoundingClientRect()相同 rootBounds 返回根元素的矩形区域的信息,getBoundingClientRect()方法的返回值,如果没有根元素(即直接相对于滚动

    27210

    建议收藏!总结了42种前端常用布局方案

    使用calc函数实现 使用 calc 函数实现的方式会比较简单,中间的容器最少高度为宽度的100% - 头部和底部两部分的高度即可完成该功能。...Flex方案 实现步骤如下 开启 flex 布局 子元素布局方向修改为垂直排列 设置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 设置中间部分容器高度为自适应 实现CSS代码如下:...设置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 */ min-height: 100vh; } .container { /* 设置 中间 部分自适应 */...Grid方案 实现步骤如下 开启 grid 布局 置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 实现CSS代码如下: .main { /* 开启grid布局 */ display...: grid; grid-template-rows: auto 1fr auto; /* 设置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 */ min-height

    4.2K30

    建议收藏!总结了 42 种前端常用布局方案

    使用calc函数实现 使用 calc 函数实现的方式会比较简单,中间的容器最少高度为宽度的100% - 头部和底部两部分的高度即可完成该功能。...Flex方案 实现步骤如下 开启 flex 布局 子元素布局方向修改为垂直排列 设置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 设置中间部分容器高度为自适应 实现CSS代码如下:...设置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 */ min-height: 100vh; } .container { /* 设置 中间 部分自适应 */...Grid方案 实现步骤如下 开启 grid 布局 置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 实现CSS代码如下: .main { /* 开启grid布局 */ display...: grid; grid-template-rows: auto 1fr auto; /* 设置最小高度为当前,使不管中间部分有多高,始终都可以保持在底部 */ min-height

    4.2K30

    何为 content-visibility?

    因此,如果我们这个属性应用在一些一开始需要被隐藏,但是其后在页面的某一刻需要被渲染,或者是一些需要被频繁切换显示、隐藏状态的元素上,其渲染效率将会有一个非常大的提升。...当然,现代浏览器愈加趋于智能,基于这种场景,其实我们非常希望对于仍未看到,仍旧未滚动到的区域,可以延迟加载,只有到我们需要展示、滚动到该处,页面内容才进行渲染。...好,我们实际开始进行滚动,看看会发生什么: 由于下方的元素在滚动的过程中,出现在范围才被渲染,因此,滚动条出现了明显的飘忽不定的抖动现象。...当然,在向下滚动的过程中,上方消失的已经被渲染过且消失在的元素,也会因为消失在口中,重新被隐藏。因此,即便页面滚动到最下方,整体的滚动条高度还是没有什么变化的。... 如果我们不使用 contain-intrinsic-size,只对视之外的元素使用 content-visibility: auto,那么口外的元素高度通常就为 0。

    1.6K10

    动手练一练,手写一个价格对比、固定表头滚动的表格

    在有滚动讨论scrollHeight才有意义,在没有滚动scrollHeight==clientHeight恒成立。单位px,只读元素。...scrollTop: 代表在有滚动滚动条向下滚动的距离也就是元素顶部被遮住部分的高度。在没有滚动scrollTop==0恒成立。单位px,可读可设置。...2、表格内容结构 我们第二部分的表格放置在 container 的容器,方便我们做响应式相关的设置,表格基础结构的内容如下: <div class...获取用户从顶部滚动的距离(pageYOffset) 获取最后一部分内容区域距离窗口顶部的高度(getBoundingClientRect().top) 检测滚动条是否滚动到表格区域。...如果滚动到表格区域,获取重置后的表头宽度。 接下来我们来判断第三部分内容区域距离顶部的高度是否大于表头的高度。

    3.2K31

    waypoint_使用jQuery Waypoint创建粘性导航标题

    最重要的是,您将熟悉jQuery Waypoints插件的基础知识,该插件提供高级功能:当用户向下滚动,导航栏停留在的顶部,并进行更改以指示当前部分。...当用户向下滚动,表达式direction==='down'计算结果为true ,因此我们的导航栏接收到sticky类,并停留在的顶部。...当元素的顶部在顶部下方的指定距离处,正值触发路点;当元素的位置在顶部上方远处,负值触发路径。 )。...offset的值可以是数字(代表固定数量的像素),包含百分比的字符串(解释为高度的百分比)返回多个像素的函数。 最后一个可以提供一些严重的灵活性,稍后我们将使用它。...实际上,这意味着告诉脚本当前正在查看哪个部分的假想线放置在顶部的三分之一左右,即观看者在阅读长文本所处的位置。 一个更强大的解决方案可以使用功能来适应导航栏高度的变化。

    3.3K30

    JQ事件和事件对象

    ,但keypress()事件只在按下键盘中任意字符键(A-Z)触发,功能键不会触发(如shift ctrl 等)     4 event.which 指示按下的哪个键 1 ...focusin可以在父元素上检测子元素获得焦点的情况 而focusout可以在父元素上检测子元素失去焦点情况  四 其他事件   1 scroll()滚动滚动触发的事件      2  resize...          //screenX/screenY  获取显示器屏幕位置的坐标 //整个屏幕的高度    不会随着滚动条变化而变化          //clientX/clientY  获取相当于页面的坐标...})         5  event.which 针对键盘和鼠标事件,这个属性能确定你到底按的是哪个键按钮...event.whichevent.keyCode 和 event.charCode标准化了。推荐用event.which来监视键盘输入。

    4.1K20

    详细设计一个文章页目录插件

    首先我打算文章的目录放置在文章内容的右侧,且是悬浮固定在那里不随浏览器的滚动滚动。...n = (高度 - (顶部菜单高度 + 留白高度))/ 子项行高 所以,最终我们可以计算出滚动高度: let DEFAULT = { lineHeight: 28, // 每个菜单的行高是...这部分内容开始前,我们先来复习一个 API,该方法会返回元素的大小及其相对于的位置: Element.getBoundingClientRect() 需求分析的时候有提到,高亮的原则是当前标题所在的位置到浏览器可视区域顶部的距离需要小于等于一个固定值...浏览器高度变了怎么办 因为我们的滚动高度是根据浏览器高度计算出来的,如果浏览器高度变化了,那这个时候再去滚动页面,那肯定会出问题的。...所以需要做的就是把和高度有关的逻辑抽离出来,统一放到一个函数里,当监听到高度变化的时候,再去执行这个函数。

    2.4K20

    从box-sizing:border-box属性入手,来了解盒模型

    使用border-box,来框模型更改成这个新的模型。...; 那么最终呈现的效果是:当父容器在最小和最大宽度限制,它将填满整个宽度;当父容器超过1280px宽度,布局保持在1280px宽,并开始在可用空间内居中。...当宽度低于480px小于容器,您必须滚动才能看到完全的内容。...②max-width属性的另一个好处是可以容器的媒体(如图像和视频)控制在容器(响应式图片): 在上述例子中,图像会引起一个问题–起初它的显示正常,但当容器变得比图像更窄...成为响应式的图片) 而这类运用最好的实例就是bootstrap框架中,图像的img-responsive类名的属性,在框架下,图像添加了img-responsive类名,就能达到在宽度不断变化的情况下

    2K10
    领券