星级评分系统 - 悬停+点击问题

时间:2013-06-06 12:14:56

标签: jquery wordpress plugins

我基本上已经为评级系统星级评分系统编写了一个代码,它一切正常,代码很好

<script type="text/javascript">
(function($){

   $(document).ready(function() {
    var $option = $('.option');
    var $fruit = $('.fruit-name');
    var $last;
    var parent
    $option.click(function() {
        parent=$(this).parents('.comment-form-rating');
        $('.fruit-name',parent).val(this.innerHTML)
    })


$(".starr1").hover(function(){
    parent=$(this).parents('.comment-form-rating');
    $('.starr1',parent).css('color','gold')
    },function(){
    $(".starr1").css("color","#ddd");
  });


$(".starr2").hover(function(){
    parent=$(this).parents('.comment-form-rating');
    $('.starr1',parent).css('color','gold')
    $('.starr2',parent).css('color','gold')
    },function(){
    $(".starr1").css("color","#ddd");
    $(".starr2").css("color","#ddd");
  });

$(".starr3").hover(function(){
    parent=$(this).parents('.comment-form-rating');
    $('.starr1',parent).css('color','gold')
    $('.starr2',parent).css('color','gold')
    $('.starr3',parent).css('color','gold')
    },function(){
    $(".starr1").css("color","#ddd");
    $(".starr2").css("color","#ddd");
    $(".starr3").css("color","#ddd");
  });

$(".starr4").hover(function(){
    parent=$(this).parents('.comment-form-rating');
    $('.starr1',parent).css('color','gold')
    $('.starr2',parent).css('color','gold')
    $('.starr3',parent).css('color','gold')
    $('.starr4',parent).css('color','gold')
    },function(){
    $(".starr1").css("color","#ddd");
    $(".starr2").css("color","#ddd");
    $(".starr3").css("color","#ddd");
    $(".starr4").css("color","#ddd");
  });

$(".starr5").hover(function(){
    parent=$(this).parents('.comment-form-rating');
    $('.starr1',parent).css('color','gold')
    $('.starr2',parent).css('color','gold')
    $('.starr3',parent).css('color','gold')
    $('.starr4',parent).css('color','gold')
    $('.starr5',parent).css('color','gold')
    },function(){
    $(".starr1").css("color","#ddd");
    $(".starr2").css("color","#ddd");
    $(".starr3").css("color","#ddd");
    $(".starr4").css("color","#ddd");
    $(".starr5").css("color","#ddd");
  });

});

})(jQuery);
</script>

但是我必须为我的星星定义一个点击功能,当用户点击星星5时会产生全明星红色 -

我这样定义了

$(".starr5").click(function () {
    parent = $(this).parents('.comment-form-rating');
    $('.starr1', parent).css('color', '#FF7777')
    $('.starr2', parent).css('color', '#FF7777')
    $('.starr3', parent).css('color', '#FF7777')
    $('.starr4', parent).css('color', '#FF7777')
    $('.starr5', parent).css('color', '#FF7777')
}); 

这就是问题发生的地方 - 现在星星变成了红色,但是在鼠标左侧它们再次变成灰色,鼠标悬停在黄色悬停的功能上开始工作 - 总是混乱如何编写更多代码使它工作。

2 个答案:

答案 0 :(得分:1)

你应该在进入和离开时添加和删除类,所以当

on mouseenter

.addClass('gold') 

on click

.removeClass('gold').addClass('red');

on mouseleave

.removeClass('gold');

你做得很好;快乐的编码。

Star1示例请求:

   <style type="text/css">
        .gold{color: gold;}
        .red{color: #FF7777;}
        .yourDefaultStarClass{color: #ddd;}
    </style>

    <script type="text/javascript">
    (function($){
        $(".starr1").hover(function(){
        parent=$(this).parents('.comment-form-rating');
        $('.starr1',parent).addClass('gold');
        },function(){
        $(".starr1").removeClass('gold');

        });

        $(".starr5").click(function () {
        parent = $(this).parents('.comment-form-rating');
        $('.starr1', parent).removeClass('gold').addClass('red');
        }); 

    });          
    </script>

答案 1 :(得分:1)

我可以用你的所有元素和类来清除HTML中的混乱......
为了简化你的生活,我写了一个非常简单的代码:

STARS RATING DEMO

这就是你所需要的:

<强> HTML:

<img class="stars" data-rated="4" src="whiteImgWithStarsHoles.png" />

其中数据评级是您的服务器返回的值(1-5) 创建一个与背景颜色相匹配的图像,创建5个星形孔并保存为 .png

<强> CSS:

.stars{
  cursor:pointer;
  max-width:200px; /* respective to the gray image width */
  background: gold url(grayimage200x100.jpg) no-repeat 0 bottom;
  /* transition: 1s;*/
}
.stars.red{
  background-color: red;
}

<强> jQuery的:

$('.stars').each(function(){

  var $this = $(this),
      starW = $this.width() / 5,
      rated = 0;

  function setRates(){
    rated = $this.data('rated') * starW;
    $this.css({backgroundPosition: rated+'px top'});
  }
  setRates();

  $this.on('mousemove', function( e ){
    rated = Math.ceil( (e.clientX-$this.offset().left) / starW );   
    $this.not('.red').css({backgroundPosition: rated*starW +'px top'});
  }).on('mouseleave', setRates).on('click', function(){
    $this.not('.red').data('rated', rated).addClass('red');
    // alert("Send to server: "+   rated   );
  }); 

});