【问题标题】:JQuery addClass on scroll doesn't work滚动上的 JQuery addClass 不起作用
【发布时间】:2015-03-07 18:21:18
【问题描述】:

我有 4 个彼此相邻的按钮。我想要的是当我滚动到某个点时,4 个按钮的高度和宽度会发生变化。该按钮由 2 个彼此组成的 div 组成,因此您只能看到一个 div。当鼠标进入 div 时,底部的 div 会上升,因此您可以看到它们。我的问题是,如果我滚动到某个点,只有底部 div 的属性会发生变化,但顶部 div 保持不变。

HTML

        <div class="buttons" class="container">
            <div class="button">
                <div class="topdiv">Something</div>
                <div class="bottomdiv"><p>S.</p></div>
            </div>

            <div class="button" >
                <div class="topdiv">Something</div>
                <div class="bottomdiv"><p>S.</p></div>
            </div>

            <div class="button" >
                <div class="topdiv">Something</div>
                <div class="bottomdiv"><p>S.</p></div>
            </div>

            <div class="button" >
                <div class="topdiv">Something</div>
                <div class="bottomdiv"><p>S.</p></div>
            </div>
        </div>

jQuery

        if (scrollPos < somepoint){
            $(".buttons").removeClass("fixedtop");
            $(".button").removeClass("shrink");
            $(".button div").removeClass("shrink");
            }

        if (scrollPos >= somepoint){
            $(".buttons").addClass("fixedtop");
            $(".button").addClass("shrink");
            $(".button div").addClass("shrink");
            }

CSS

.button .shrink{
transition: 0.5s;
width: 100px;
height: 100px;
}  

.button div .shrink{
transition:0.5s;
width: 100px;
height: 100px;
}

“.button div”工作正常,但“.button”不行。我用 CSS :hover transition 试过了,它在那里工作,但是当我在 CSS 中滚动到那个点时,我不能让它缩小。

【问题讨论】:

标签: jquery css addclass


【解决方案1】:

您似乎不太了解如何应用样式。例如,.button .shrink 不会应用于 &lt;div class='button shrink'&gt;,而是应用于以下对中的第二个 div &lt;div class='button'&gt;&lt;div class='shrink'&gt;

以同样的方式.button div .shrink 将在 div 中查找类为 shrink 的元素,并且该 div 应该是类“按钮”元素的子元素。您没有满足这些条件的元素,因此您的样式不会应用于任何内容。尝试使用.button_shrink 代替.button .shrink.button div.shrink 代替.button div .shrink(您需要将$(".button").addClass("shrink"); 更改为$(".button").addClass("button_shrink");)。

我想说的说明:

   
.button .shrink{
color:red;
}  

.button div .shrink{
color:blue;
}
<div class='button shrink'>
  No styles will be applied to this div
  <div class='shrink'>
    This one is red, because it's 'shrink' inside 'button'
    <div class='shrink'>
      This is blue because it's 'shrink' inside a div which is inside 'button'
      </div>
    </div>
  </div>
     

我认为您正在尝试做的事情:

.button_shrink{
    color:red;
    } 

.button div.shrink{
    color:blue;
    }
 <div class='button button_shrink'>
      Red
      <div class='shrink'>
        Blue
      </div>
</div>

【讨论】:

  • “.button div .shrink”确实有效,“.button .shrink”没有。也许我真的不明白样式是如何应用的,我刚开始学习它。顺便说一句,我尝试了您推荐的方法,但它们现在都不起作用。如前所述,我在这样的 CSS 文件中尝试过它并且它有效,所以我认为 CSS 没有任何问题: .button:hover{ transition: 0.5s;宽度:100px;高度:100px; } .button:hover .bottomdiv { 过渡:0.5s;宽度:100px;高度:100px; }
  • @hashtagslam 尝试在 jsfiddle 中创建一个代表问题的小示例。你也可以在那里玩风格,看看它们是如何工作的。您的“.button div .shrink”和“.button .shrink”是相同的,它是您看到应用的“.button .shrink”,但不是您期望的那样。给它们添加不同的背景,你会发现不同。
  • 谢谢 Nadia,我开始明白了。你的插图帮助了我。
  • 很高兴为您提供帮助!当您开始使用选择器时,您会感到有些困惑。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多