简化Jquery

时间:2012-09-11 23:55:01

标签: jquery

嗨我刚刚学习Jquery atm,我想知道简化以下内容的最佳方法是什么:

$(document).ready(function() {
$('.hover').hide();

$( '.state' ).hover(function() {
    $('.divtop .state').stop().animate({opacity:0}, 300),
    $('.divtop .hover').show(),
    $('.divtop .hover').stop().animate({opacity:1}, 1000);
    },

    function() {
    $('.divtop .hover').stop().animate({opacity:0}, 600,'',function(){$(this).hide()});
    $('.divtop .state').stop().animate({opacity:1}, 500);

    });

$( '.divmiddle .state' ).hover(function() {
    $('.divmiddle .state').stop().animate({opacity:0}, 300),
    $('.divmiddle .hover').show(),
    $('.divmiddle .hover').stop().animate({opacity:1}, 1000);
    }, function() {

    $('.divmiddle .hover').stop().animate({opacity:0}, 600,'',function(){$(this).hide()});
    $('.divmiddle .state').stop().animate({opacity:1}, 500);

    });

$( '.divbottom .state' ).hover(function() {
    $('.divbottom .state').stop().animate({opacity:0}, 300),
    $('.divbottom .hover').show(),
    $('.divbottom .hover').stop().animate({opacity:1}, 1000);
    }, function() {

    $('.divbottom .hover').stop().animate({opacity:0}, 600,'',function(){$(this).hide()});
    $('.divbottom .state').stop().animate({opacity:1}, 500);

    });
});

html看起来像这样:

<section class="left">
            <div class="divtop">
                <img src="img/layout/blue.png" class="state" alt="blue" />
                <img src="img/layout/bluehover.png" class="hover" alt="bluehover" />
            </div><!-- close class divtop -->
            <div class="divmiddle">
                <img src="img/layout/red.png" class="state" alt="red" />
                <img src="img/layout/redhover.png" class="hover" alt="redhover" />
            </div><!-- close class divmiddle -->
            <div class="divbottom">
                <img src="img/layout/pink.png" class="state" alt="pink" />
                <img src="img/layout/pinkhover.png" class="hover" alt="pinkhover" />
            </div><!-- close class divbottom -->

        </section><!-- close left section -->

css中的图像位于绝对位置,因此它们位于彼此之上。

4 个答案:

答案 0 :(得分:1)

代码重复不是JS或jQuery问题,只是一般编程的事情。因此,请尝试将重复的代码重构为可重用的函数或方法。我们如何为我们创建一个绑定悬停处理的函数,因为我们以相同的方式执行3次。

另外,不要在jQuery中过度使用$('#selector')。为什么你可以在结果中多次搜索相同的元素,并将元素更直接地用作变量。

所以我会这样做:http://jsfiddle.net/v8srd/

$(document).ready(function() {

  // Hide all the elements that should be shown on hover
  $('.hover').hide();

  // One function to setup all hovers
  var setupHover = function(position) {

    // Find the parent element that contains the state and the hover,
    // then find the state/hover elements within the parent
    var parent = $('.div' + position),
        state = parent.find('.state'),
        hover = parent.find('.hover');

    // Apply the hover to the above elements
    state.hover(function() {
      state.stop().animate({opacity:0}, 300),
      hover.show().stop().animate({opacity:1}, 1000);
    }, function() {
      hover.stop().animate({opacity:0}, 600,'',function(){$(this).hide()});
      state.stop().animate({opacity:1}, 500);
    });
  };

  // Bind the hover handling to each position
  setupHover('top');
  setupHover('middle');
  setupHover('bottom');
});​

答案 1 :(得分:0)

一种方法如下:

$(document).ready(function() {
   $('.hover').hide();

   $( 'section.left > div' ).hover(function() {
      $(this).children('.state').stop().animate({opacity:0}, 300),
      $(this).children('.hover').show(),
      $(this).children('.hover').stop().animate({opacity:1}, 1000);
   },
   function() {
      $(this).children('.hover').stop().animate({opacity:0}, 600,'',function(){$(this).hide()});
      $(this).children('.state').stop().animate({opacity:1}, 500);
   });
});

应简化您的代码。

答案 2 :(得分:0)

将代码的公共部分放在一个函数中,例如:

$(document).ready(function() {

  function hover(sel, sel2){
    $(sel).hover(function() {
      $(sel2 + ' .state').stop().animate({opacity:0}, 300),
      $(sel2 + ' .hover').show().stop().animate({opacity:1}, 1000);
    }, function() {
      $(sel2 + ' .hover').stop().animate({opacity:0}, 600,'',function(){$(this).hide()});
      $(sel2 + ' .state').stop().animate({opacity:1}, 500);
    });
  }

  $('.hover').hide();
  hover('.state', '.divtop');
  hover('.divmiddle .state', '.divmiddle');
  hover('.divbottom .state', '.divbottom');
});

答案 3 :(得分:0)

这就是我要做的......

$(function() {
  $('.hover').hide();
  $('.state' ).hover(function() {
    $(this).stop().animate({opacity:0}, 300);
    $(this).siblings('.hover').stop().animate({opacity:1}, 1000);
  }, function() {
    $(this).siblings('.hover').stop().animate({opacity:0}, 600, function() { $(this).hide(); });
    $(this).stop().animate({opacity:1}, 500);
  });
});