首页  >  问答  >  正文

计算每个增量的不同百分比下的总价格

我正在尝试编写一个用于价格估算的计算器

这样:

1000 MTU 的价格将为 0.035,因此总数将变为 35 2000 MTU 价格将为 0.034 总计将变为 67 3000 MTU 的价格将为 0.0329,总计将变为 98.79

等等......

我编写了以下代码,但它给出了 NaN 错误。

任何编写高效代码的新建议将不胜感激。

<p id= "rangeValue" >

</p>
<div class="range-wrap">
        <div class="range-value" id="rangeV"></div>
<input id="myinput" type="range" name="points" min="1000" max="100000" value="1000" oninput="rangeValue.innerText = this.value" >
</div>
const slider = document.getElementById("myinput")
const min = slider.min
const max = slider.max
const value = slider.value

slider.style.background = `linear-gradient(to right, #0080FF 0%, #0080FF ${(value-min)/(max-min)*100}%, #596680 ${(value-min)/(max-min)*100}%, #596680 100%)`

slider.oninput = function() {
  this.style.background = `linear-gradient(to right, #0080FF 0%, #0080FF ${(this.value-this.min)/(this.max-this.min)*100}%, #596680 ${(this.value-this.min)/(this.max-this.min)*100}%, #596680 100%)`
};


// Add a change event listener to the range slider
   slider.addEventListener('change', function() {
  // Get the value of the range slider
  var value = this.value;
  var container = document.querySelector('#rangeValue');
  
  let cost;
  function calculateCost(value) {
  if (value === 1000) {
    cost = 0.0350;
  } else if (value === 2000) {
    cost = 0.0340;
  } else {
    cost = 0;
  }
  return cost;
}
var totval=value * cost;
totval = totval.toFixed(2);
  
  container.innerHTML = totval;
  // Print the value to the console
 // console.log(value);
});

const
    range = document.getElementById('myinput'),
    rangeV = document.getElementById('rangeV'),
    setValue = ()=>{
        const
            newValue = Number( (range.value - range.min) * 100 / (range.max - range.min) ),
            newPosition = 10 - (newValue * 0.2);
        rangeV.innerHTML = `<span>${range.value}</span>`;
        rangeV.style.left = `calc(${newValue}% + (${newPosition}px))`;
    };
document.addEventListener("DOMContentLoaded", setValue);
range.addEventListener('input', setValue);
#myinput {
  border-radius: 8px;
  height: 8px;
  width: 100%;
  outline: none;
  -webkit-appearance: none;
}

input[type='range']::-webkit-slider-thumb {

  -webkit-appearance: none;
   width: 20px;
  height: 20px;
  border-radius: 50%;
   background: #0080FF;
}


.range-wrap{
    width: 500px;
    position: relative;
}
.range-value{
    position: absolute;
    top: 150%;
}
.range-value span{
    width: 30px;
    height: 24px;
    line-height: 24px;
    text-align: center;
    background: transparent;
    color: #0A0E1C;
    font-size: 20px;
    display: block;
    position: absolute;
    left: 50%;
    transform: translate(-50%, 0);
    border-radius: 6px;
}
.range-value span:before{
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    top: 100%;
    left: 50%;
    margin-left: -5px;
    margin-top: -1px;
}```

P粉539055526P粉539055526180 天前333

全部回复(1)我来回复

  • P粉459440991

    P粉4594409912024-04-03 20:11:37

    使用parseInt()输入值字符串转换为整数,以便您可以计算价格。 除此之外,您在事件侦听器中使用了函数 calculateCost(),我在代码中更正了这一点,所以这就是结果:

    const slider = document.getElementById("myinput")
    const min = parseInt(slider.min)
    const max = parseInt(slider.max)
    const value = parseInt(slider.value)
    
    slider.style.background = `linear-gradient(to right, #0080FF 0%, #0080FF ${(value-min)/(max-min)*100}%, #596680 ${(value-min)/(max-min)*100}%, #596680 100%)`
    
    slider.oninput = function() {
      this.style.background = `linear-gradient(to right, #0080FF 0%, #0080FF ${(this.value-this.min)/(this.max-this.min)*100}%, #596680 ${(this.value-this.min)/(this.max-this.min)*100}%, #596680 100%)`
    };
    
    
    // Add a change event listener to the range slider
    slider.addEventListener('change', function() {
      // Get the value of the range slider
      var value = parseInt(this.value);
      var container = document.querySelector('#rangeValue');
    
      let cost;
        if (value === 1000) {
          cost = 0.0350;
        } else if (value === 2000) {
          cost = 0.0340;
        } else {
          cost = 0;
        }
      var totval=value * cost;
      totval = totval.toFixed(2);
    
      container.innerHTML = totval;
      // Print the value to the console
      // console.log(value);
    });
    
    const
        range = document.getElementById('myinput'),
        rangeV = document.getElementById('rangeV'),
        setValue = ()=>{
            const
                newValue = Number( (range.value - range.min) * 100 / (range.max - range.min) ),
                newPosition = 10 - (newValue * 0.2);
            rangeV.innerHTML = `${range.value}`;
            rangeV.style.left = `calc(${newValue}% + (${newPosition}px))`;
        };
    document.addEventListener("DOMContentLoaded", setValue);
    range.addEventListener('input', setValue);
    #myinput {
      border-radius: 8px;
      height: 8px;
      width: 100%;
      outline: none;
      -webkit-appearance: none;
    }
    
    input[type='range']::-webkit-slider-thumb {
    
      -webkit-appearance: none;
       width: 20px;
      height: 20px;
      border-radius: 50%;
       background: #0080FF;
    }
    
    
    .range-wrap{
        width: 500px;
        position: relative;
    }
    .range-value{
        position: absolute;
        top: 150%;
    }
    .range-value span{
        width: 30px;
        height: 24px;
        line-height: 24px;
        text-align: center;
        background: transparent;
        color: #0A0E1C;
        font-size: 20px;
        display: block;
        position: absolute;
        left: 50%;
        transform: translate(-50%, 0);
        border-radius: 6px;
    }
    .range-value span:before{
        content: "";
        position: absolute;
        width: 0;
        height: 0;
        top: 100%;
        left: 50%;
        margin-left: -5px;
        margin-top: -1px;
    }

    回复
    0
  • 取消回复