попробуйте простой слайдер show / hide для отображения отдельных элементов div, но не можете отобразить его на slider.value в массив - PullRequest
1 голос
/ 03 мая 2020

Я учился javascript сам из w3school, и у меня появилась возможность попробовать некоторые навыки, которые я выучил, когда столкнулся с проблемой показа различных мест в моей работе в соответствии с выбранной способностью, поэтому я решил сделать слайдер и подумать Я мог бы сопоставить slider.value с переменной массива, но я пробовал это, и это не сработало.

, пожалуйста, укажите, как к этому подойти, я действительно 1-го уровня, поэтому я уверен, что я делаю действительно глупая ошибка где-то, большое спасибо за ваше время.

вот код

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.slidecontainer {
  width: 100%;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  height: 15px;
  border-radius: 5px;
  background: #d3d3d3;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #1A77B9;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}
</style>
</head>
<body>

<h1>Round Range Slider</h1>

<div class="slidecontainer">
  <input type="range" min="10" max="500" value="20"step ='10' class="slider" id="myRange" onchange ="myfunction()">
  <p>Value: <span id="demo"></span></p>
</div>

<div id="myDIV">
This is my DIV element.
</div>


<script>

var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
output.innerHTML = slider.value;

slider.oninput = function() {
  output.innerHTML = this.value;
}
var smallCap = [10, 20, 30 , 40, 50];
var Capacity;

function myfunction() {
  var x = document.getElementById("myDIV");
  if (slider.value === "50" ) {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}

</script>

</body>
</html>

1 Ответ

1 голос
/ 03 мая 2020

Это отобразит ползунок на массив smallCap. Я не знаю, как изменить диапазон после его обработки браузером, поэтому это решение создает ползунок в коде JavaScript на основе значений в smallCap и предполагает, что значения smallCap расположены в порядке возрастания.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.slidecontainer {
  width: 100%;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  height: 15px;
  border-radius: 5px;
  background: #d3d3d3;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #1A77B9;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}
</style>
</head>
<body>

<h1>Round Range Slider</h1>

<div class="slidecontainer">
  <!-- input will go here -->
  <p>Value: <span id="demo"></span></p>
</div>

<div class='venue' data-capacity=10>
Venue A has capacity of 10
</div>

<div class='venue' data-capacity=20>
Venue C has capacity of 20
</div>

<div class='venue' data-capacity=30>
Venue Q has capacity of 30
</div>


<script>
    var smallCap = [10, 20, 30 , 40, 50];
    var Capacity;

    var inputTemplate = '<input id="myRange" class="slider" type="range" min={min} max={max} value={value} step=10>'
    inputTemplate = inputTemplate.replace("{min}",smallCap[0]).replace("{max}",smallCap[smallCap.length-1]).replace("{value}",smallCap[0]);
    $('.slidecontainer').prepend(inputTemplate);

    var slider = document.getElementById("myRange");
    var output = document.getElementById("demo");

    output.innerHTML = slider.value;
    slider.oninput = function() {
        myfunction(this.value);
    }


    function myfunction(value) {
        output.innerHTML = value;

        document.querySelectorAll('.venue').forEach(item => { item.style.display = 'none'; })

        var element = document.querySelector('.venue[data-capacity="' + value + '"]');
        if (element) {
            element.style.display = 'block';
        }
    }

    myfunction(smallCap[0]);

</script>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...