当元素/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:检测任何在屏幕上不可见但在小部件树中的小部件的重建

带有CSS内容的div,伪元素后不可见

UITableView 要求一个在屏幕上不可见的单元格

在 iOS 中,当用户滚动浏览 WKWebView 时,如何检测屏幕上可见的 html 元素?

当我缩小屏幕时,某些列文本在 Td 元素内不可见

我正在扩展页眉和页脚,但是当我在页脚中传递数据时,它仅在主页上可见,在其他页面上不可见