Установить высоту изображения с помощью JavaScript

В настоящее время у меня проблема с моим кодом. Я пытаюсь установить высоту изображения с помощью JavaScript, чтобы убедиться, что оно меньше 600 пикселей. Я пробовал множество альтернатив общему "this.height = 600", но ни одна из них не дала результата. Я очень надеюсь, что кто-нибудь поможет мне решить эту проблему.

<div id = "cursedframe">  
  <img src = "" id = "cursedimg">
</div>

<script>

function setImage() {
    var img = new Image();
    var images = [
        "bean.jpg",
        "xxx-edit-parallax/Images/xxx-5.jpg"
    ];

    var chosen = images[Math.floor(Math.random() * images.length)];

    img.onload = function(){

    if (this.height > 600) {
            console.info("more than");
            this.height = 600;
            console.info(img.height);
        } else {
            console.info("less than");
            this.height = "auto";
            console.info(this.height);
        }
    };

    img.src = chosen.toString();
    document.getElementById("cursedimg").src = img.src;
}   


</script>

Он успешно передает if, но никогда не устанавливает высоту.

Обновлено: В то время не знал о CSS-свойствах max-height и max-width. Было доведено до моего сведения Lain. Спасибо

Вы не можете просто установить max-height на 600 пикселей в CSS? Похоже, это примерно то, что вы здесь делаете.

Lain 11.07.2018 16:28

Ово. Это вещь? Ах, Спаситель! Думаю, можно с уверенностью сказать, что я не обращаю внимания на CSS.

Sean 11.07.2018 16:33

Кстати, вы никогда не назначаете событие загрузки для document.getElementById("cursedimg"). Просто образ img, не относящийся к DOM, который не влияет на ваше фактическое отображаемое изображение. Вам нужно будет добавить document.getElementById("cursedimg").style.height = img.height + 'px';

Lain 11.07.2018 16:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Было бы намного проще использовать свойство css max-height.

Просто чтобы показать фактический недостаток подхода в javascript: вы должны передать высоту фактическому изображению. В настоящее время вы просто устанавливаете его на объект img, но никогда не на показанный образ <img src = "" id = "cursedimg">.

var img = new Image();
var images = ['https://logosmarken.com/wp-content/uploads/2018/05/Google-Logo.png'];
var maxHeight = 200; //REM: For my test image

img.onload = function(){
    if (this.height > maxHeight) {
        console.info("more than");
        this.height = maxHeight;
        console.info(img.height);
    } else {
        console.info("less than");
        this.height = "auto";
        console.info(this.height);
    };
    
    //REM: Here you need to assign the src along with the height
    document.getElementById("cursedimg").src = this.src;
    document.getElementById("cursedimg").style.height = this.height + 'px';
};

//REM: No need for toString() - it already is.
img.src = images[Math.floor(Math.random() * images.length)];
<div id = "cursedframe">  
  <img src = "" id = "cursedimg">
</div>

Еще проще было бы вообще не создавать новый объект, а просто назначить его как есть: var img = document.getElementById("cursedimg");

Запустив следующий код, вы назначаете только атрибут src элементу img

img.src = chosen.toString();
document.getElementById("cursedimg").src = img.src;

Если вы хотите установить высоту и src элемента изображения с помощью javascript, вы можете сделать следующее:

var image = document.getElementById("cursedimg");
if ( image.height > 600 ){
     image.height = 600;
}
else{
     image.style.height = "auto";     // since 'auto' is a styling value
}
image.src = chosen.toString();

Другие вопросы по теме