Ошибка Chrome, связанная с .naturalWidth? - PullRequest
0 голосов
/ 29 октября 2018

Кажется, что приведенный ниже код случайным образом выдает aImg.naturalWidth либо реальную ширину изображения, либо 0. Это ошибка Chrome 70.0.3538.67 для Linux?

Если это не ошибка, как заставить ее работать правильно (не возвращать 0)?

function handleImageFile(files) {
  for (var i = 0; i < files.length; i++) {
    var file = files[i];
    if (file.type != 'image/jpeg') continue;

    var img = document.createElement("img");
    img.file = file;

    var reader = new FileReader();
    reader.onload = (function(aImg) {
      return function(e) {
        $('#newPictureContainer').css('display', 'block');
        document.getElementById('newPicture').appendChild(img);
        aImg.src = e.target.result;
        if (aImg.naturalWidth >= 300 || aImg.naturalHeight >= 300) {
          if (aImg.naturalWidth <= aImg.naturalHeight)
              aImg.width = 300;
          else
              aImg.height = 300;
          $('#selectPicture').css('display', 'none');
        } else {
          $('#selectPicture [type=file]').val("");
          alert("The smallest side of the picture should be at least 300 pixels.");
        }
      };
    })(img);
    reader.readAsDataURL(file);
  }
}


  <div id="selectPicture" style="display:block">
    <input type="file" name="imageUpload" onchange="handleImageFile(this.files)"/>
  </div>
  <div id="newPictureContainer" style="display:none">
    <span id="newPicture"></span>
    <img src="/include/javascript/israelinfo/multiuploader/images/cross-small.gif"
          width="16" height="16" title="Удалить" alt="Delete" class="MUdelete"
          onclick="closePicture()">
  </div>

1 Ответ

0 голосов
/ 29 октября 2018

@ JᴀʏMᴇᴇ дал ответ:

Я должен получить доступ к .naturalWidth в обработчике onload изображения, а не в FileReader.

Я ошибочно предположил, что изображение загружается сразу после назначения data: URL-адреса для .src. Кажется, это не так.

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