Звучит так, будто все, что вам нужно сделать, - это сначала вызвать Math.max
для значения во входе, чтобы вы могли извлечь из массива или индекс в ползунке или * 1005. * максимальный индекс в массиве. Это гарантирует, что вы получите объект в вашей переменной v
, и вы можете установить css
.
Например, для imageScale
, имеющего 6 элементов, если пользователь перемещается в значение 3, установите CSS для объекта с индексом 3. Если пользователь перемещается к значению 20, или 100, или 10000, это выходит за пределы диапазона массива, поэтому вы можете установить CSS для объекта с самым высоким индексом в массиве. - вот это [5]
:
slider.oninput = function() {
first.innerHTML = this.value * 200;
}
var imageScale = [{
'transform': 'scale(0.7)'
}, {
'transform': 'scale(0.9)'
}, {
'transform': 'scale(1.1)'
}, {
'transform': 'scale(1.3)'
}, {
'transform': 'scale(1.8)'
}, {
'transform': 'scale(0.25)'
}];
$(document).on('input change', '#slider', function() { //listen to slider changes
var v = Math.min($(this).val(), imageScale.length - 1); //getting slider val
$("#img").css(imageScale[v]);
});
img {
width: 60px;
height: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="range" id="slider" min="0" max="100" value="0" class="slider" />
<span id="first"></span>units
<img src="http://cdn2.stylecraze.com/wp-content/uploads/2013/07/dahlia-flowers.jpg" id='img' />
Обратите внимание, что текущий код приводит к тому, что значения за пределами поля приводят к уменьшению изображения - это потому, что последний элемент в imageScale
массив 'transform': 'scale(0.25)'
, намного меньше, чем все остальные элементы в массиве. (Если вы хотите, чтобы последний элемент был больше , чем другие элементы в массиве, возможно, сделайте что-то вроде 'transform': 'scale(2.5)'
)