2012-02-28 2 views
0

ну, я все еще новичок в js/programming. может в любом случае объяснить мне, как я могу оптимизировать свой код? Я уверен, что есть несколько способов написать небольшой и быстрый код, который делает то же самое.jquery shortcut для нескольких кликов

$('.ourservices-content .left ul li:nth-child(1)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '0px' 
     },800) 
    }) 

    $('.ourservices-content .left ul li:nth-child(2)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-600px' 
     },800) 
    }) 

    $('.ourservices-content .left ul li:nth-child(3)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-1200px' 
     },800) 
    }) 

    $('.ourservices-content .left ul li:nth-child(4)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-1800px' 
     },800) 
    }) 

    $('.ourservices-content .left ul li:nth-child(5)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-2400px' 
     },800) 
    }) 

    $('.ourservices-content .left ul li:nth-child(6)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-3000px' 
     },800) 
    }) 

    $('.ourservices-content .left ul li:nth-child(7)').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-3600px' 
     },800) 
    }) 

ответ

2

Это следует сделать это:

$('.ourservices-content .left ul li').each(function (index) { 
    $(this).click(function() { 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: '-' + (600 * index) + 'px'; 
     }, 800); 
    }); 
}); 

Что мы делаем цикл по каждому элементу, совпавшего с селектором в оригинальном $() вызова. Затем для каждого сопоставленного элемента мы корректируем параметр анимации marginLeft, по которому мы указываем индекс элемента, начиная с нулевого элемента.

+0

Кроме того, если вы можете, добавив идентификатор в первый селектор, так что это просто '«#ulId ли» 'или даже' '#ulId> li" 'будет более эффективным селектором. –

+0

хорошо работает, удаляя ';' после "animation ... + 'px'" – max

+0

Вы можете ... но некоторые говорят, что лучше не полагаться на вставку с запятой Javascript. Дуглас Крокфорд, который очень упрямый, от души рекомендует. Это может быть причиной для этого ... или нет. Вам решать. –

0

Есть несколько способов, которыми я могу думать, но проще было бы обернуть его в function, выравнивают ваши данные в качестве array, а затем вызвать function в for цикла:

function animate_box(count,margin) { 
    $('.ourservices-content .left ul li:nth-child('+count+')').click(function(){ 
     $('.our-services-content-box > ul.box').stop().animate({ 
      marginLeft: margin+'px' 
     },800) 
    }) 
} 
var left_margin=0; 
var indexes=[1,2,3,4,2,2]; 
for(var i=0;i<indexes.length;i++) { 
    animate_box(indexes[i],left_margin); 
    left_margin-=600; 
} 
0

У меня нет никакого способа, чтобы попробовать это, но что-то вроде этого является идея ...

var $items = $('.ourservices-content .left li'); 
for (var i = 0, len = $items.length; i < len; i++) { 
    $items.eq(i).click(function() { 
     $('.box').stop().animate({ 
      marginLeft : '-=600'; 
     }, 800) 
    }) 
} 
Смежные вопросы