【问题标题】:JQuery show drop-down menu based on current section IDJQuery 根据当前部分 ID 显示下拉菜单
【发布时间】:2023-04-08 21:32:01
【问题描述】:

我在一页结构中有不同的部分,导航栏按每个类别的下拉列表进行分类。 我想显示当前部分所属类别的下拉菜单。

if($("#About").hasClass('active')){
    $(".tab-menu-content").css("display","block");
}

我尝试以这种方式实现它,但它不起作用,有什么想法吗? 谢谢

编辑: 真的很抱歉,这里不能贴代码,我会尽量详细解释。 As you can see I has a nav menu with drop-down menus on hover.

I want to show the drop menu contents automatically when I reach it's sections without hovering. Can this be done?

【问题讨论】:

  • 请显示您的 html
  • 通过提供更多信息来澄清问题

标签: jquery css drop-down-menu navbar


【解决方案1】:

Here 是他对您所问内容的现场演示。我试图让 JS 尽可能简单。通过仅在我检测到子类别是否未激活然后激活它的功能时使用,也可以通过单击自身或其他类别将它们向上滑动。

编辑:我更新了代码,因为您希望在滚动时显示部分子类别,但它可能看起来有点混乱。检查并询问您是否遇到代码问题。

HTML

 <nav>
  <ul>
    <li class="category">Category 1
      <div class="subcategory">
        <ul>
          <li class="width-li">Sub 1</li>
          <li>Sub 2</li>
          <li>Sub 3</li>
          <li>Sub 4</li>
          <li>Sub 5</li>
        </ul>
      </div>
    </li>
    <li class="category">Category 2
      <div class="subcategory">
        <ul>
          <li>Sub 1</li>
          <li>Sub 2</li>
          <li>Sub 3</li>
          <li>Sub 4</li>

        </ul>
    </li>
    <li class="category">Category 3
      <div class="subcategory">
        <ul>
          <li>Sub 1</li>
          <li>Sub 2</li>
        </ul>
    </li>
    <li class="category">Category 4
      <div class="subcategory">
        <ul>
          <li>Sub 1</li>
          <li>Sub 2</li>
          <li>Sub 3</li>
        </ul>
    </li>
  </ul>
</nav>
<div class="containers" id="red"></div>
<div class="containers" id="blue"></div>
<div class="containers" id="green"></div>
<div class="containers" id="yellow"></div>

CSS

body{
  background:white;
  margin:0;
}
nav{
  width:100%;
  height:40px;
  background:#E67B73;
  position:fixed;
  top:0;
  left:0;
}
ul{
  margin:0;
  padding:0;
  list-style:none;
}
.category{
  display:block;
  width:25%;
  height:100%;
  float:left;
  line-height:40px;
  text-align:center;
  color:white;
  font-weight:bolder;
  transition:background 0.5s;
  cursor:pointer;
  position:relative;
}
.category:hover{
  background:#E65273;
}
.active-category{
  background:#E65273;
}
.subcategory{
  position:fixed;
  width:100%;
  height:40px;
  background:#EEAAA3;
  display:none;
  top:40px;
  left:0;
}
.subcategory li{
  width:20%;
  display:inline-block;
  float:left;
}
.subcategory li:hover{
  background:#FFAAA3;
}
.containers{
  width:100%;
  height:calc(100vh - 40px);
}
#red{
  background:red;
  margin-top:40px;
}
#blue{
  background:blue;
}
#green{
  background:green;
}
#yellow{
  background:yellow;
}

JS

$('.category').click(function(){
  $('.active').slideToggle(50);
  $('.active').removeClass('active');
  $('.active-category').removeClass('active-category');
  if($(this).children('.subcategory').hasClass('self') == false){
    $('.self').removeClass('self');
    $(this).children('.subcategory').slideToggle(500).addClass('active self');
    $(this).addClass('active-category');
  } else {
    $('.self').removeClass('self');
  }
});
$(document).scroll(function(){
  var scrolled = $(document).scrollTop();
  var contheight = $('.containers').height();
  switch(true){
    case (scrolled<contheight):
      selection(0);
      break;
    case (scrolled<contheight*2):
      selection(1);
      break;
    case (scrolled<contheight*3):
      selection(2);
      break;
    case (scrolled<contheight*4):
      selection(3);
      break;
             }
});
function selection(e){
  if($('.category').eq(e).hasClass('active-category') == false){
    $('.active').slideToggle(50);
    $('.active').removeClass('active');
    $('.active-category').removeClass('active-category');
    $('.category').eq(e).addClass('active-category');
    if($('.category').eq(e).children('.subcategory').hasClass('self') == false){
      $('.self').removeClass('self');
      $('.category').eq(e).children('.subcategory').slideToggle().addClass('active self');
    } else {
      $('.self').removeClass('self');
    }
    console.log(e);
  }
}

【讨论】:

  • 感谢您的回复,想象一下类别一列表下的链接,它是网站中某个部分的 ID 链接。当我到达该部分 ID 时,我想列出以显示自己,而无需单击菜单。这意味着当我滚动到任何部分时,其相应的下拉菜单应该会出现,而无需悬停或单击。
  • @RaghadBogery 已更新。
  • 非常感谢,正是我所需要的。请问“.self”类是什么?
  • 当您单击并打开 1 个类别并再次单击它以关闭它时,它没有自我类,它会向上滑动并再次向下滑动,因为没有它我们不知道我们是否再次单击自身以关闭它。自类是控制参数。你可以把它去掉,试试看效果。
猜你喜欢
  • 2012-08-06
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2012-05-27
  • 1970-01-01
  • 2018-10-10
  • 2013-08-12
相关资源
最近更新 更多