これはユーザーのローカルマシンから画像を表示するためのコードですが、初めて動作しないことがあります。特に(携帯の)ユーザーがカメラから写真を撮るとき。
ユーザーが初めて自分の画像を選択するのはほとんどの場合、うまくいきません。
私はImage()
を使用して、aspectRatio
の画像の幅と高さをresizable
とします。JavaScript(モバイルカメラ)でローカル画像を表示
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Image</title>
<style>
* {
padding: 0;
margin: 0;
}
body {
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.select-img {
width: 450px;
height: 250px;
border-radius: 10px;
cursor: pointer;
border: 3px dashed gray;
display: flex;
justify-content: center;
align-items: center;
font-family: sans-serif;
font-size: 25px;
}
#image {
display: none;
}
</style>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
</head>
<body>
<div class="select-img">
<p>Select Image</p>
</div>
<img id="image">
<script>
function upload (file) {
var fr = new FileReader();
fr.onload = function (event) {
var src = event.target.result;
var img = new Image();
img.onload = function() {
$('.select-img').remove();
$('#image').css('display', 'block').attr('src', src).resizable({ aspectRatio: this.width/this.height });
};
img.src = src;
};
fr.readAsDataURL(file);
}
$('.select-img').click(function() {
var fileInput = $(document.createElement("input"));
fileInput.attr('type', 'file');
fileInput.attr('accept', 'image/*');
fileInput.trigger('click');
$(fileInput).on('change', function (ev) {
upload(ev.target.files[0]);
});
return false;
});
</script>
</body>
</html>
コンソールにアラートがありますか?モバイルでどのブラウザをテストしていますか? – Twisty
@Twistyコンソールにアラートがありません。 Chromeを使用していますが、他のブラウザは動作しません。 –
初期テストといくつかの最適化が必要なコードが見つかりました:https://jsfiddle.net/Twisty/188x0w0u/ - モバイルテストの場合:https://jsfiddle.net/Twisty/188x0w0u/show/ – Twisty