【问题标题】:Creating a star rating from an image based on a float number?根据浮点数从图像创建星级?
【发布时间】:2016-11-29 03:18:15
【问题描述】:

最近我想把一个数字变成星级,我在这里偶然发现了这篇文章:https://stackoverflow.com/a/1987545/1871869 这正是我想做的。我遵循了这个解释,但我似乎无法让它在我的本地环境中工作,我想知道是否有人可以帮助我。这是我的尝试:

$.fn.stars = function() {
    return $(this).each(function() {
        // Get the value
        var val = parseFloat($(this).html());
        // Make sure that the value is in 0 - 5 range, multiply to get width
        var size = Math.max(0, (Math.min(5, val))) * 16;
        // Create stars holder
        var $span = $('<span />').width(size);
        // Replace the numerical value with stars
        $(this).html($span);
    });
}

$(function() {
    console.log("Calling stars()");
    $('.results-contents span.stars').stars();
});
.results {
    font-size: 0;
    padding-bottom: 16px;
}

.results-content {
    font-size: 13px;
    display: inline-block;
    margin-left: 20px;
    vertical-align: top;
}

.results .results-content span.stars span.stars span {
    background: url('/resources/graphics/stars-icons.png') 0 -36px repeat-x;
    width: 175px;
    height: 80px;
}

.results .results-content span.stars {
    max-width: 80px;
    background-position: 0 0;
}
<script type="text/template" id="results-template">
  <div class="results">
    <div class="results-content">
      <span class="stars">4.0</span> 
    </div>
  </div>
</script>

星星图片:

我想做的是简单地显示空星,然后根据评级,在空星之上显示橙色星,这样我就可以显示全星和半星评级。但是,我得到的只是一个要显示的数字。我上面的console.log 似乎被调用了,但似乎图像的实际渲染和星级的计算不起作用。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 好吧,span 没有宽度,因为它是一个内联元素。
  • @epascarello 但我没有在这个 CSS 类中声明一个:.results .results-content span.stars span.stars span
  • 跨度必须是内联块才能有宽度
  • 结果内容 !== 结果内容

标签: javascript jquery html css


【解决方案1】:

您遇到了多个问题,从 CSS 样式错误到选择器错误。下面并不完美,但它正在渲染。

$.fn.stars = function() { 
  return this.each(function() {
    // Get the value
    var val = parseFloat($(this).html()); 
    // Make sure that the value is in 0 - 5 range, multiply to get width
    var size = Math.max(0, (Math.min(5, val))) * 36.5; 
    // Create stars holder
    var $span = $('<span> </span>').width(size); 
    // Replace the numerical value with stars
    $(this).empty().append($span);
  });
}

$(function() {
  console.log("Calling stars()");
  $('.results-content span.stars').stars();
});
.results {
  font-size: 0;
  padding-bottom: 16px;
}
.results-content {
  font-size: 13px;
  display: inline-block;
  margin-left: 20px;
  vertical-align: top;
  background: url('https://i.stack.imgur.com/rwkqF.png') 0 0 repeat-x;
  width: 185px;
  height: 35px;
}
.results .results-content span.stars span {
  background: url('https://i.stack.imgur.com/rwkqF.png') 0 -36px repeat-x;
  display: inline-block;
  height: 35px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="results">
  <div class="results-content">
    <span class="stars">0.0</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">0.5</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">1.0</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">1.5</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">2.0</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">2.0</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">2.5</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">3.0</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">3.5</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">4.0</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">4.5</span> 
  </div>
</div>
<div class="results">
  <div class="results-content">
    <span class="stars">5.0</span> 
  </div>
</div>

【讨论】:

  • 嘿,这太棒了!太感谢了!我只是想知道,有没有办法使用原始 javascript 而不是 jQuery 来做到这一点?我在使用 jQuery 时遇到了一些问题,可能不想使用它。
  • 是的,使用 jQuery 完成原始 JavaScript 后,一切皆有可能...... jQuery 是基于它构建的......
  • 只是我使用了某种强制模板机制,无论出于何种原因,都阻止了我调用$.fn.stars 函数。好像当我拿出模板机制时,你上面的答案很完美。有什么方法可以将 $.fn.stars 函数更改为原始 JavaScript?
  • 我也一直在玩这样的东西:&lt;span class="stars" title="4.0"&gt; &lt;span style="width={4.0/5*100}%;"/&gt; &lt;/span&gt; 所以我什至不需要在我的代码中使用 JQuery 或 JavaScript,但我似乎无法做到宽度自动计算正确设置星星宽度所需的像素...
猜你喜欢
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多