当元素/div在屏幕上不可见时更改css
Posted
技术标签:
【中文标题】当元素/div在屏幕上不可见时更改css【英文标题】:Change css when element/div not visible on screen 【发布时间】:2017-05-05 09:09:58 【问题描述】:在我的 vue web 应用程序中,当元素之一通过滚动离开屏幕时,我试图更改标题的 CSS 类。
我正在使用jquery-visible 来查找元素是否可见,因为我找不到任何 vue 方法。
现在我在 html 中有以下代码来动态更改 CSS 类:
<div class="aClass" :class="'bClass': isElemVisible()">
....
....
</div>
在我的 Vue 代码中,我添加了如下方法:
export default
name: 'myElem',
methods:
isElemVisible ()
console.log($('#myDiv').visible(true))
return $('#myDiv').visible(true)
这样做的问题是它不会动态更改isElemVisible
返回的值,它只是在加载时采用第一个值,即使在滚动和#myDiv
离开屏幕后也不会更改,如何做到这一点或如果有更好的/vue 方式来做到这一点。
【问题讨论】:
【参考方案1】:我建议你听一下滚动事件,像这样:https://github.com/vuejs/Discussion/issues/324
【讨论】:
是的,函数通过这个滚动调用,但这并没有动态添加类。【参考方案2】:问题是isElemVisible()
没有被执行。该方法已被定义,它在 Vue 第一次确定是否应启用 bClass
时执行,但随后,特别是在滚动时,它永远不会再次执行。
我建议使用布尔型 data
属性,而不是只执行一次的简单方法,您可以在滚动时使用 jquery-visible 返回的值更新该属性。
我整理了this CodePen 来说明我的意思,但简而言之:
<div id="myDiv" class="aClass" :class="'bClass': isElemVisible">
</div>
使用data
属性和滚动事件监听器代替方法:
data()
return
isElemVisible: true
,
created()
window.addEventListener('scroll', event =>
this.isElemVisible = $('#myDiv').visible(true)
)
【讨论】:
以上是关于当元素/div在屏幕上不可见时更改css的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:检测任何在屏幕上不可见但在小部件树中的小部件的重建