2017-02-24 21 views
3

現在、私はwebshopの評価システムを作っています。基本的に私はそれが動作する方法:訪問者が評価したことがない場合は前星評価システムのホバー

:ビジターが

  • 以前と現在の星が黄色になります星の上に置いた

    • 、灰色の次の星(クラスで行います)
    • 訪問者がホバーを離れる場合、すべての星を元の状態にリセットしてください。
    • 訪問者が星をクリックした場合は、保存して次のスター値を計算し、配列を更新してください。

    私はフォントを使用していますので、画像は使用していません。問題は今、私が星の上にマウスを置くと動作しますが、私は星から星に移動したい場合、それは不具合です(星の間に少しの隙間があり、最初に星をリセットすることを意味する)。

    jsfiddle:https://jsfiddle.net/uappvz3y/

    JS:

    var current_star_statusses = []; 
    
    star_elements = $('.fa-star'); 
    
    star_elements.each(function(i, elem) 
    { 
        current_star_statusses.push($(elem).hasClass('yellow')); 
    }); 
    
    star_elements.mouseenter(changeRatingStars); 
    star_elements.mouseleave(resetRatingStars); 
    
    /** 
    * Changes the rating star colors when hovering over it. 
    */ 
    function changeRatingStars() 
    { 
        // Current star hovered 
        var star = $(this); 
    
        // Removes all colors first from all stars 
        $('.fa-star').removeClass('gray').removeClass('yellow'); 
    
        // Makes the current hovered star yellow 
        star.addClass('yellow'); 
    
        // Makes the previous stars yellow and the next stars gray 
        star.parent().prevAll().children('.fa-star').addClass('yellow'); 
        star.parent().nextAll().children('.fa-star').addClass('gray'); 
    } 
    
    /** 
    * Resets the rating star colors when not hovered anymore. 
    */ 
    function resetRatingStars() 
    { 
        star_elements.each(function(i, elem) 
        { 
         $(elem).removeClass('yellow').removeClass('gray').addClass(current_star_statusses[i] ? 'yellow' : 'gray'); 
        }); 
    } 
    

    HTML:

    <ul class="list-inline rating-list"> 
        <li><i class="fa fa-star yellow"></i></li> 
        <li><i class="fa fa-star yellow"></i></li> 
        <li><i class="fa fa-star yellow"></i></li> 
        <li><i class="fa fa-star yellow"></i></li> 
        <li><i class="fa fa-star gray"></i></li> 
    </ul> 
    

    CSS:私が作るのライブラリがたくさんいることを知っている

    .fa-star:before { 
        content: "\f005"; 
    } 
    
    .rating-list li i.yellow { 
        color: #FFD700; 
    } 
    
    .rating-list li i.gray { 
        color: #bbb; 
    } 
    
    .list-inline>li { 
        display: inline-block; 
        padding-right: 5px; 
        padding-left: 5px; 
    } 
    
    .rating-list li { 
        padding: 0px; 
    } 
    .fa { 
        display: inline-block; 
        font: normal normal normal 14px/1 FontAwesome; 
        font-size: inherit; 
        text-rendering: auto; 
        -webkit-font-smoothing: antialiased; 
        -moz-osx-font-smoothing: grayscale; 
        transform: translate(0, 0); 
    } 
    

    それは簡単ですが、私はそれを自分のコードにしておきたいと思います。

  • 答えて

    2

    これらの4行のコードを変更しました。

    star_elements = $('.fa-star').parent(); 
    
    star_elements.find(".fa-star").each(function(i, elem) { 
        current_star_statusses.push($(elem).hasClass('yellow')); 
    }); 
    
    star_elements.find(".fa-star").mouseenter(changeRatingStars); 
    star_elements.find(".fa-star").mouseleave(resetRatingStars); 
    

    だから今star_elementliです。あなた県jsfiddle場合

    はまた、ここでは、星が純粋なCSSを使用して格付けすることができますlink

    var current_star_statusses = []; 
     
    
     
    star_elements = $('.fa-star').parent(); 
     
    
     
    star_elements.find(".fa-star").each(function(i, elem) { 
     
        current_star_statusses.push($(elem).hasClass('yellow')); 
     
    }); 
     
    
     
    star_elements.find(".fa-star").mouseenter(changeRatingStars); 
     
    star_elements.find(".fa-star").mouseleave(resetRatingStars); 
     
    
     
    /** 
     
    * Changes the rating star colors when hovering over it. 
     
    */ 
     
    function changeRatingStars() { 
     
        // Current star hovered 
     
        var star = $(this); 
     
    
     
        // Removes all colors first from all stars 
     
        $('.fa-star').removeClass('gray').removeClass('yellow'); 
     
    
     
        // Makes the current hovered star yellow 
     
        star.addClass('yellow'); 
     
    
     
        // Makes the previous stars yellow and the next stars gray 
     
        star.parent().prevAll().children('.fa-star').addClass('yellow'); 
     
        star.parent().nextAll().children('.fa-star').addClass('gray'); 
     
    } 
     
    
     
    /** 
     
    * Resets the rating star colors when not hovered anymore. 
     
    */ 
     
    function resetRatingStars() { 
     
        star_elements.each(function(i, elem) { 
     
        $(elem).removeClass('yellow').removeClass('gray').addClass(current_star_statusses[i] ? 'yellow' : 'gray'); 
     
        }); 
     
    }
    .fa-star:before { 
     
        content: "\f005"; 
     
    } 
     
    
     
    .rating-list li i.yellow { 
     
        color: #FFD700; 
     
    } 
     
    
     
    .rating-list li i.gray { 
     
        color: #bbb; 
     
    } 
     
    
     
    .list-inline>li { 
     
        display: inline-block; 
     
        padding-right: 5px; 
     
        padding-left: 5px; 
     
    } 
     
    
     
    .rating-list li { 
     
        padding: 0px; 
     
    } 
     
    
     
    .fa { 
     
        display: inline-block; 
     
        font: normal normal normal 14px/1 FontAwesome; 
     
        font-size: inherit; 
     
        text-rendering: auto; 
     
        -webkit-font-smoothing: antialiased; 
     
        -moz-osx-font-smoothing: grayscale; 
     
        transform: translate(0, 0); 
     
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> 
     
    <ul class="list-inline rating-list"> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star gray"></i></li> 
     
    </ul>

    +0

    ありがとう、これは私が必要とするものです!できるだけ早く答えを受け入れます。乾杯! –

    +0

    私は助けてくれることを楽しみにしています。 –

    1

    です。右に浮動小数点を追加し、埋め込みを持つliにホバー効果を適用します。

    .rating-list li { 
     
        float: right; 
     
        color: #ddd; 
     
        padding: 10px 5px; 
     
    } 
     
    
     
    .rating-list li:hover, 
     
    .rating-list li:hover ~ li { 
     
        color: #ffd700; 
     
    } 
     
    
     
    .rating-list { 
     
        display: inline-block; 
     
        list-style: none; 
     
    }
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> 
     
    
     
    <ul class="list-inline rating-list"> 
     
        <li><i class="fa fa-star" title="Rate 5"></i></li> 
     
        <li><i class="fa fa-star" title="Rate 4"></i></li> 
     
        <li><i class="fa fa-star" title="Rate 3"></i></li> 
     
        <li><i class="fa fa-star" title="Rate 2"></i></li> 
     
        <li><i class="fa fa-star" title="Rate 1"></i></li> 
     
    </ul>

    +0

    CSS + radiobuttonsはJSもなくても機能します。http://jsfiddle.net/leaverou/CGP87/ –

    1

    はるかに簡単な解決策があります:代わりに.fa要素でパディングを使用し、各星の間には間隔がないことを意味し、リスト項目のfloat: leftを使用するには。

    これらのいくつかのルールは、あなたがするつもりな効果を達成するのに十分である:ここでは

    .list-inline { 
        list-style: none; 
        padding: 0; 
        margin: 0; 
        overflow: hidden; 
    } 
    .list-inline > li { 
        float: left; 
    } 
    .rating-list li { 
        padding: 0px; 
    } 
    .rating-list li .fa { 
        padding-right: 5px; 
    } 
    

    は変わらず、あなたのJSコードを残して、概念実証の例である:

    $(function() { 
     
    
     
        var current_star_statusses = []; 
     
    
     
        star_elements = $('.fa-star'); 
     
    
     
        star_elements.each(function(i, elem) { 
     
         current_star_statusses.push($(elem).hasClass('yellow')); 
     
        }); 
     
    
     
        star_elements.mouseenter(changeRatingStars); 
     
        star_elements.mouseleave(resetRatingStars); 
     
    
     
        /** 
     
        * Changes the rating star colors when hovering over it. 
     
        */ 
     
        function changeRatingStars() { 
     
         // Current star hovered 
     
         var star = $(this); 
     
    
     
         // Removes all colors first from all stars 
     
         $('.fa-star').removeClass('gray').removeClass('yellow'); 
     
    
     
         // Makes the current hovered star yellow 
     
         star.addClass('yellow'); 
     
    
     
         // Makes the previous stars yellow and the next stars gray 
     
         star.parent().prevAll().children('.fa-star').addClass('yellow'); 
     
         star.parent().nextAll().children('.fa-star').addClass('gray'); 
     
        } 
     
    
     
        /** 
     
        * Resets the rating star colors when not hovered anymore. 
     
        */ 
     
        function resetRatingStars() { 
     
         star_elements.each(function(i, elem) { 
     
         $(elem).removeClass('yellow').removeClass('gray').addClass(current_star_statusses[i] ? 'yellow' : 'gray'); 
     
         }); 
     
        } 
     
    });
    .fa-star:before { 
     
        content: "\f005"; 
     
    } 
     
    
     
    .rating-list li i.yellow { 
     
        color: #FFD700; 
     
    } 
     
    
     
    .rating-list li i.gray { 
     
        color: #bbb; 
     
    } 
     
    
     
    .list-inline { 
     
        list-style: none; 
     
        padding: 0; 
     
        margin: 0; 
     
        overflow: hidden; 
     
    } 
     
    .list-inline>li { 
     
        float: left; 
     
    } 
     
    
     
    .rating-list li { 
     
        padding: 0px; 
     
    } 
     
    .rating-list li .fa { 
     
        padding-right: 5px; 
     
    } 
     
    
     
    .fa { 
     
        display: inline-block; 
     
        font: normal normal normal 14px/1 FontAwesome; 
     
        font-size: inherit; 
     
        text-rendering: auto; 
     
        -webkit-font-smoothing: antialiased; 
     
        -moz-osx-font-smoothing: grayscale; 
     
        transform: translate(0, 0); 
     
    }
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> 
     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <ul class="list-inline rating-list"> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star yellow"></i></li> 
     
        <li><i class="fa fa-star gray"></i></li> 
     
    </ul>