【问题标题】:Change menu ul style while arriving to a div到达 div 时更改菜单 ul 样式
【发布时间】:2013-05-05 09:12:23
【问题描述】:

我正在搜索的代码非常简单,只是我有 div 和菜单,我希望当我通过滚动到达第一个 div 时,菜单中的第一个 ul 会自动更改其样式,然后当我滚动到第二个 div 第二个 url 样式更改为另一种样式,就像那样...我得到了问题的答案,我有代码,但我不喜欢它,因为它非常高,并且它包含我得到的每个 div 的代码。 据我所知,我可以找到一个在 jQuery 中为整个 div 完成工作的短代码。 我想要的和这段代码完全一样(我无法让它通过http://jsfiddle.net/ 工作,如果有人知道如何在那里加载jquery,请加载它并给我url)

<html>
<style>
#menu {
    background-color:#ccc;
    position:fixed;
    width:100%;
}

.menutext {
    padding:25 40 30 !important;
    display:inline-block;
}

.menutext2 {
    padding:25 40 0 !important;
    display:inline-block;
    color:red;
}

.alldivs {
    width:300px;
    height:200px;
    background-color:a9a9a9;
}
</style>
<div id="menu">
    <div class="menutext" linkId="DIV1">Change the style of me to .mebutext2 on arriving to DIV1</div>
    <div class="menutext"  linkId="DIV2">Change the style of me to .mebutext2 on arriving to DIV2</div>
    <div class="menutext"  linkId="DIV3">Change the style of me to .mebutext2 on arriving to DIV3</div>
</div>

<br><br><br><br><br><br><br>

<div class="alldivs"><div class="contentDiv" id="DIV1">DIV1</div></div>
<br><br><br><br><br><br><br><br>
<div class="alldivs"><div class="contentDiv" id="DIV2">DIV2</div></div>
<br><br><br><br><br><br><br><br>
<div class="alldivs"><div class="contentDiv" id="DIV3">DIV3</div></div><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$(function(){

    var menu=$('#menu'),
        menuText=menu.find('.menuText'),
        DIV1=$('#DIV1'),
        DIV2=$('#DIV2'),
        DIV3=$('#DIV3'),
        DIV1Top=DIV1.offset().top,
        DIV2Top=DIV2.offset().top,
        DIV3Top=DIV3.offset().top;

$(window).scroll(function(e) {
    var win=$(this),
        scrollTop=$(this).scrollTop();


    //to make nav menu selected according to scroll
    var start=scrollTop;
    menuText.filter('.menutext2').removeClass('menutext2').addClass('menutext');
    if(start>DIV3Top){
        menuText.filter('[linkId="DIV3"]').removeClass('menutext').addClass('menutext2');
        }
    else if (start>DIV2Top){
        menuText.filter('[linkId="DIV2"]').removeClass('menutext').addClass('menutext2');
        }
    else if(start>DIV1Top){
        menuText.filter('[linkId="DIV1"]').removeClass('menutext').addClass('menutext2');
        }   
});
});
</script>

【问题讨论】:

  • "如果有人知道如何加载 jquery [in jsfiddle] 请加载它并给我 url" - 只需查看左侧的“Frameworks & Extensions”面板jsfiddle 页面的...
  • 我尝试在那里更改设置(到 jQuery 阅读器)但它不起作用:(
  • 再看一遍 - 这是 first 下拉列表...除了小提琴问题,我不明白你的问题是什么。您似乎在说您想将一些 JavaScript 转换为 jQuery,但是 (a) jQuery JavaScript,而不是一种单独的语言,并且 (b) 您展示的代码已经使用了大量的 jQuery。请更清楚地解释您要达到的目标。
  • @AhmadTantori 您错过了将代码放在测试环境中以使人们更容易帮助您的全部意义......现在您正在侮辱那些试图提供帮助的人。不要无知!

标签: javascript jquery html styles


【解决方案1】:

类似这样的:

$(function(){

  var offsets = [],
      menuText = $('#menu .menuText');

  $("div.contentDiv").each( function(i, div) {
      offsets.push({ id: div.id, offset: $(div).offset().top });
  });

  $(window).scroll(function(e) {
    var start = $(this).scrollTop();
    for ( var div = 0; div < offsets.length; div++ ) {
      if ( start > offsets[div].offset ) { 
        menuText.removeClass('menutext2').addClass('menutext');  
        menuText.filter('[linkId="'+offsets[div].id+'"]').addClass('menutext2').removeClass('menutext');
      }
    }
    if ( start === 0 ) { menuText.removeClass('menutext2').addClass('menutext'); }
  });
});

http://jsbin.com/ijiwom/2/edit

编辑:

http://jsbin.com/ijiwom/3/edit

编辑 2:

http://jsbin.com/ijiwom/4/edit

编辑 3:

http://jsbin.com/ijiwom/5/edit

【讨论】:

  • 我只有另一个问题,当我回到顶部时,样式必须回到第一个样式,为什么?我该如何解决?
  • 我还有一个问题,只要解决它,一切就完美了。当我滚动到第二个 div 时,我当然会通过第一个 div,您的代码会更改第一个菜单 ul 样式和第二个 ul 样式(因为我滚动到两个 div)但它应该只更改一个菜单 ul 样式取决于我的位置,例如,如果我在第一个 div 上,第一个 ul 样式从 menutext 更改为 menutext2,当我滚动到第二个 div 时,第二个 ul 样式应该从 menutext 更改为 menutext2 但第一个 ul 样式应该从 menutext2 更改到 menutext(原样)你能做到吗?
  • 你能在最后的评论中回答我的问题吗?
  • 你是天才的代码真是太棒了,现在你解决了我遇到的两个问题,但如果你解决了最后一个问题,我会感谢你的。例如,当我滚动到第一个 div 时,第一个 ul 样式发生了变化,但是当我返回顶部(到没有任何 div 的空间)时,第一个 ul 样式仍然相同,但它必须更改为第一个样式,因为我是不在第一个 div 上,如果我滚动到一个没有 div 的地方也是一样的(例如在页面末尾没有 div 所以所有 uls 都必须保持原样)
  • 你能回答我的问题吗?保证它是最后一个,如果它是固定的 PLeaseee 我真的需要它://
【解决方案2】:

dringchev 给了你一个可行的例子。

您所描述的有时被称为“滚动间谍”,例如在引导程序中:

http://twitter.github.io/bootstrap/javascript.html#scrollspy

你也可以使用 jquery waypoints 来实现它

http://imakewebthings.com/jquery-waypoints/

有关此 UX 模式的讨论,请参阅 https://ux.stackexchange.com/questions/17375/what-is-the-navigation-concept-bootstrap-uses-called

【讨论】:

  • 是的,他应该使用这样的东西,因为为此使用一些库可以减少代码的错误和跨浏览器。
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多