Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery滚动方法的推广_Javascript_Jquery - Fatal编程技术网

Javascript jQuery滚动方法的推广

Javascript jQuery滚动方法的推广,javascript,jquery,Javascript,Jquery,我试图概括一个滚动功能,我用它滚动到项目的不同部分。目前一切正常,但我使用了大量重复代码,我想看看是否有任何方法可以使jQuery方法更具动态性,这样我就可以只使用一个方法,而不是使用固定的方法 header.php: <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container-fluid"> <div class="navbar-header">

我试图概括一个滚动功能,我用它滚动到项目的不同部分。目前一切正常,但我使用了大量重复代码,我想看看是否有任何方法可以使jQuery方法更具动态性,这样我就可以只使用一个方法,而不是使用固定的方法

header.php:

<nav class="navbar navbar-inverse navbar-fixed-top">
  <div class="container-fluid">
    <div class="navbar-header">

    </div>
    <div>
      <ul class="nav navbar-nav navbar-right">
      <li id="about-scroll"><a href="#">Profile</a></li>  
      <li id="proj-scroll"><a href="#">Projects</a></li>  
      <li id="work-scroll"><a href="#">Work</a><li>
      <li id="abilities-scroll"><a href="#">Abilities</a><li>
      <li id="contact-scroll"><a href="#">Contact</a></li> 
      </ul>
    </div>
  </div>
</nav>
正如你所看到的,我使用了5次基本相同的代码,当我真的想优化它,只使用一个函数。这段代码和结构工作得很好,但我想优化一下,这样我就不会多次使用同一段代码了


是否有一种方法可以使我的类/ID结构化,从而使其更通用。我对设计/javascript比较陌生。目前,我的结构有点混乱,我想我可能必须更改我的类或id名称,以便将它们用作方法中的可通过变量?

我将使用两个步骤简化此过程

第一步。将公共代码移到函数中 第二步。不是将函数逐个分配给每个控件,而是基于某个属性进行分配 不要按名称引用控件,而是为每个控件指定一个伪样式,例如可滚动,并使用一条jquery语句指定:

HTML:

纯粹主义者可能更喜欢使用数据属性而不是样式类。

这应该行得通

根据你的代码,我瞄准了容器。然后,如果单击了任何列表项,我将获取元素id并将其分配给变量。然后,当该变量与某个区域匹配时,我通过switch语句运行该变量,然后分配一个类,并将该类传递给运行jQuery滚动动画的函数

   $('.container-fluid li').click( function(){
       var getClicked = $(this).attr(id);
       switch (getClicked){
           case 'about-scroll':
               var setlocal = 'about';
               scrollAni(setlocal);
               break;
           case 'proj-scroll':
               var setlocal = 'projects';
               scrollAni(setlocal);
               break;
           case 'work-scroll':
               var setlocal = 'work';
               scrollAni(setlocal);
               break;
           case 'abilities-scroll':
               var setlocal = 'skills';
               scrollAni(setlocal);
               break;
           case 'contact-scroll':
               var setlocal = 'contact';
               scrollAni(setlocal);
               break;
       }
   }
这是我设置用来执行jQuery滚动的函数。我们使用local作为函数占位符来传递类的名称

function scrollAni(local){
    $('html, body').animate({
        scrollTop: $('.'+local+'').offset().top;
    }, 2000);
}

为它们使用公共类…您可以通过在html中用一个空格分隔来使用多个类。使用公共类不会每次都让导航移动到同一个部分吗?如果不同的部分都有相同的类,它将如何区分它们@BhojendraNepalI的意思是在点击处理程序中使用公共类,而不是在它的…类功能滚动框中…应该用公共类替换…所以我尝试实现这个,但它不起作用。如何在这里检索节类?它似乎不知道应该去哪个节类,我还建议给UL一个id,这样您就可以更好地定义jQuery选择器的范围。如果在该分区中添加更多UL元素,请将重点更多地放在目标区域,这样事情就不会完全失控。
var scrollHandler = function() {
   $('html, body').animate({
        scrollTop: $(this).offset().top
    }, 2000);
}
$('#about-scroll').click(scrollHandler);
$('#proj-scroll').click(scrollHandler);
$('#contact-scroll').click(scrollHandler);
$('#work-scroll').click(scrollHandler);
$('#abilities-scroll').click(scrollHandler); 
<nav class="navbar navbar-inverse navbar-fixed-top">
  <div class="container-fluid">
    <div class="navbar-header">
    </div>
    <div>
      <ul class="nav navbar-nav navbar-right">
      <li id="about-scroll" class="scrollable"><a href="#">Profile</a></li>  
      <li id="proj-scroll" class="scrollable"><a href="#">Projects</a></li>  
      <li id="work-scroll" class="scrollable"><a href="#">Work</a><li>
      <li id="abilities-scroll" class="scrollable"><a href="#">Abilities</a><li>
      <li id="contact-scroll" class="scrollable"><a href="#">Contact</a></li> 
      </ul>
    </div>
  </div>
</nav>
$('.scrollable').click(scrollHandler); 
   $('.container-fluid li').click( function(){
       var getClicked = $(this).attr(id);
       switch (getClicked){
           case 'about-scroll':
               var setlocal = 'about';
               scrollAni(setlocal);
               break;
           case 'proj-scroll':
               var setlocal = 'projects';
               scrollAni(setlocal);
               break;
           case 'work-scroll':
               var setlocal = 'work';
               scrollAni(setlocal);
               break;
           case 'abilities-scroll':
               var setlocal = 'skills';
               scrollAni(setlocal);
               break;
           case 'contact-scroll':
               var setlocal = 'contact';
               scrollAni(setlocal);
               break;
       }
   }
function scrollAni(local){
    $('html, body').animate({
        scrollTop: $('.'+local+'').offset().top;
    }, 2000);
}