コンソールの画像の幅を表示する際に問題があります。関数が呼び出されるとすぐに画像の幅を表示し、1秒後に表示する関数があります。最初のものは0になり、1秒後には実際の結果が得られます。私が望むのは、1秒間待たずにその幅を取得し、画像が作成されるときに変数に保存できることです。これは私のコードです:画像の幅が正しくない
HTML
<div class="image-container" id="top-img">
<!-- 1st row of images -->
</div>
CSS
.image-container {
height: 200px;
left: calc((100vw - 940px)/-2);
background-color: rgba(0, 0, 0, 0.4);
}
.image-container img {
position: absolute;
right: 0;
max-height: 100%;
border-radius: 5px;
}
JS
var top_images = [7, 6, 9, 8, 5];
var childImg;
var img;
var top_slider;
$(document).ready(function(){
top_slider = document.getElementById('top-img');
insertImages();
});
function insertImages(){
var i;
for(i = 0; i < top_images.length; i++){
childImg = document.createElement('img');
childImg.setAttribute('src', 'Assets/slider-image-' + top_images[i] + '.jpg');
childImg.setAttribute('alt', 'image ' + top_images[i]);
top_slider.appendChild(childImg);
img = top_slider.getElementsByTagName('img')[i];
getImageWidth(img);
}
}
function getImageWidth(img){
console.log('init: ' + img.clientWidth); // get 0, I want to get actual result here - not having to create setTimeout() function
setTimeout(function(){
console.log(img.clientWidth); // get correct width
}, 1000);
}
は誰でも提案がありますか?私は.width、.naturalWidth、およびいくつかの移動方法を使用してみました...それらはすべて、ほとんど同じ結果を与えます。だから私は私の質問はどのようにタイマー関数を呼び出すことなく幅を取得することだと思いますか?私は何が欠けていますか?
レースエラーのように私には見える。私は私のPCではないので、私がテストすることはできませんが、私はinsertImages機能はするgetImageWidth前に終了していないと思いますはと呼ばれますが、1秒後です。 – asimovwasright
どこのコードでは、タイマーを使わずに正しい幅の値を取得するのが安全でしょうか? –
まだ私のPCで、申し訳ありません!しかし、私は、insertImages関数自体の中で言うでしょう。たぶん今日はテストする時間を見つけることができます。 – asimovwasright