#javascript #if-statement
#javascript #if-statement
Вопрос:
Я пытаюсь создать средство просмотра изображений на javascript. Итак, есть эта функция, в которой я уменьшаю размер изображения при нажатии кнопки ‘-‘ или прокрутке колесика мыши вниз. Но после того, как высота изображения опустится ниже 10 пикселей, я больше не могу увеличить его обратно. Итак, чтобы решить эту проблему, я подумал о том, чтобы поместить оператор if, где он будет проверять высоту изображения и не уменьшит размер, если он не превышает 10 пикселей. Но этот оператор if не работает. И я не могу понять, почему.
Ниже приведен фрагмент моего кода. Я попытался поставить console.log()
, чтобы проверить, входит ли он в оператор if или нет. Но это не происходит.
function decrease_image(){
var img = new Image();
img = image_viewer_pics[current_viewer_image];
if (img.style.height < "100%"){
img.style.margin = "auto 0px";
}
if (img.style.height > "10px"){
img.height = img.height / 1.1;
console.log("greater than 10px");
}
}
Комментарии:
1. вы должны преобразовать строку в число и сравнить…
2. но приведенный выше оператор if, в котором я сравниваю его со 100% размером, работает.
3. сравнение по строке отличается от сравнения по номеру. «9px»> «10px», потому что первый символ «9» больше «1», поэтому вы должны преобразовать в число
4. По той же причине, которая
if(img.style.height < "one hundred percent")
не будет работать. Для JS это всего лишь две (бессмысленные) строки, которые он сравнивает, и он сравнивает их байт за байтом, слева направо.
Ответ №1:
Вот функция, иллюстрирующая комментарии — вы должны нормализовать переменные перед сравнением. Сравните строки со строками и числа с числами.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
function decrease_image(){
let img = image_viewer_pics[current_viewer_image]; //= new Image();
let is_perc = img.style.height.includes("%");
let height_n = img.style.height.replace(/[^0-9.]/g, '') // this removes any non-number (except .) - the sign in front turns it into type Number
if (is_perc amp;amp; height_n < 100){
img.style.margin = "auto 0px";
} else if (!is_perc amp;amp; height_n > 10){
img.height = (height_n / 1.1) "px";
console.log("greater than 10px");
}
}