搜尋

首頁  >  問答  >  主體

計算每個增量的不同百分比下的總價格

我正在嘗試編寫一個用於價格估算的計算器

這樣:

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粉539055526228 天前417

全部回覆(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
  • 取消回覆