2013-02-18 82 views
-1

此代码在我的页面中没有错误,所以我没有在那里寻找任何帮助。我只是好奇如果有一个更短的方法来做到这一点,有很多代码重复只是每次更改一些类名称。我可以在某种功能或循环中缩短它吗?由于长代码功能?

//menu 
      $('.aboutOne').click(function(){ 
       $.scrollTo('.basicsRow', 1000, {axis:'yx'}); 
       $.scrollTo('.basicsRow', 1000, {axis:'xy'}); 
      }) 
      $('.aboutTwo').click(function(){ 
       $.scrollTo('.storyRow', 1000, {axis:'yx'}); 
       $.scrollTo('.storyRow', 1000, {axis:'xy'}); 
      }) 
      $('.aboutThree').click(function(){ 
       $.scrollTo('.teamRow', 1000, {axis:'yx'}); 
       $.scrollTo('.teamRow', 1000, {axis:'xy'}); 
      }) 

      $('.aboutOne').click(function(){ 
       $.scrollTo('.basicsRow', 1000, {axis:'yx'}); 
       $.scrollTo('.basicsRow', 1000, {axis:'xy'}); 
      }) 
      $('.aboutTwo').click(function(){ 
       $.scrollTo('.storyRow', 1000, {axis:'yx'}); 
       $.scrollTo('.storyRow', 1000, {axis:'xy'}); 
      }) 
      $('.aboutThree').click(function(){ 
       $.scrollTo('.teamRow', 1000, {axis:'yx'}); 
       $.scrollTo('.teamRow', 1000, {axis:'xy'}); 
      }) 
      $('.titleOne').click(function(){ 
       $.scrollTo('.homeRow', 1000, {axis:'yx'}); 
       $.scrollTo('.homeRow', 1000, {axis:'xy'}); 
      }) 
      $('.docsOne').click(function(){ 
       $.scrollTo('.startRow', 1000, {axis:'yx'}); 
       $.scrollTo('.startRow', 1000, {axis:'xy'}); 
      }) 
      $('.docsTwo').click(function(){ 
       $.scrollTo('.pinpointRow', 1000, {axis:'yx'}); 
       $.scrollTo('.pinpointRow', 1000, {axis:'xy'}); 
      }) 
      $('.docsThree').click(function(){ 
       $.scrollTo('.swipeRow', 1000, {axis:'yx'}); 
       $.scrollTo('.swipeRow', 1000, {axis:'xy'}); 
      }) 
      $('.docsFour').click(function(){ 
       $.scrollTo('.restRow', 1000, {axis:'yx'}); 
       $.scrollTo('.restRow', 1000, {axis:'xy'}); 
      }) 
      $('.docsFive').click(function(){ 
       $.scrollTo('.actionRow', 1000, {axis:'yx'}); 
       $.scrollTo('.actionRow', 1000, {axis:'xy'}); 
      }) 
      $('.contactOne').click(function(){ 
       $.scrollTo('.contactRow', 1000, {axis:'yx'}); 
       $.scrollTo('.contactRow', 1000, {axis:'xy'}); 
      }) 
      $('.downloadOne').click(function(){ 
       $.scrollTo('.downloadRow', 1000, {axis:'yx'}); 
       $.scrollTo('.downloadRow', 1000, {axis:'xy'}); 
      }) 
+5

http://codereview.stackexchange.com/ – Alexander 2013-02-18 19:08:41

+0

的HTML将是有益的了。 – insertusernamehere 2013-02-18 19:09:58

+1

我相信,如果它是一个错字,但你有元素'.aboutX'重复两次 – Alexander 2013-02-18 19:10:55

回答

3

也许把一切都成一个对象,然后传递给一个函数:

var els = { 
    '.aboutTwo':'.teamRow', 
    '.aboutThree':'.homeRow', 
    ... 
}; 

function menu(els){ 
    $.each(els, function(a,b){ 
     $(a).click(function(){ 
      $.scrollTo(b, 1000, {axis: "yx"}); 
      $.scrollTo(b, 1000, {axis: "yx"}); 
     }); 
    }); 
} 

// Call it 
menu(els); 

应该给你最可管理性 - 如果有什么变化,你只需要修改els对象。

注意:想借此机会指出它建议您使用jQuery的.on()Docs)进行绑定事件。

+0

这不起作用的原因。 – AlexTheGoodman 2013-02-18 19:35:20

+0

@AlexTheGoodman,好吧,你可以试试[我的回答](http://stackoverflow.com/a/14943705/417685)或[Blazemonger的回答](http://stackoverflow.com/a/14943692/417685)提供一些有趣的可能性 – Alexander 2013-02-18 19:39:24

+0

@Fluidbyte,'.on()'由内部使用'.click()' – Alexander 2013-02-18 19:41:38

1

我想补充data-属性,每一个可点击的元素来指定你想让它滚动到什么:

<a class="clicktoscroll aboutOne" data-row="basicsRow">...</a> 

现在你只需要一个事件处理程序:

 $('.clicktoscroll').click(function(){ 
      var $row = $(this).data('row'); 
      $.scrollTo('.' + $row, 1000, {axis:'yx'}); 
      $.scrollTo('.' + $row, 1000, {axis:'xy'}); 
     }) 
1

可以使用data-*属性,让我们说,让你的元素控制你想要滚动到的地方。

<button class="about" data-scroll-to=".basicsRow">Button</button> 

例如,

$("[data-scroll-to]").each(function() { 
    var $this = $(this), target = $this.data("scroll-to"); 
    $this.click(function() { 
     $.scrollTo(target, 1000, { axis: 'yx' }); 
     $.scrollTo(target, 1000, { axis: 'xy' }); 
    }); 
}); 
+0

如果你在'data'属性中加了一个连字符,jQuery参数应该是camelCased(从jQuery 1.6开始):'$(this).data(“scrollTo”);'' – Blazemonger 2013-02-18 19:17:54

+0

@Blazemonger,我们的答案完全一样。猜猜谁最后发布:| – Alexander 2013-02-18 19:19:03

+0

@Blazemonger,顺便说一下,jQuery自己完成转换 – Alexander 2013-02-18 19:20:14