Javascript で自分でフォト ギャラリーを作成しようとしました。コードは次のとおりです。
var images = [
"BAN46",
"BASTIONE"
];
var legendes = [
"exemple \"avec des\" guillemets",
"legende2"
];
var path = '/galerie/';
var nbr = images.length;
var galerie = document.getElementById('sous_galerie');
var bloc_image = document.getElementById('bloc_image');
var nouvelle_image;
for(var i = 0; i < nbr; i++) {
nouvelle_image = document.createElement('img');
nouvelle_image.src = path + 'vignettes/' + images[i] + '-vignette.jpg';
nouvelle_image.alt = images[i];
nouvelle_image.setAttribute('onclick', 'zoom(' + i + ')');
galerie.appendChild(nouvelle_image);
}
function zoom(i) {
var image = document.createElement('img');
image.src = path + images[i] + '.jpg';
image.alt = images[i];
image.id = images[i];
image.setAttribute('onclick', 'dispose(' + i + ')');
var paragraphe = document.createElement('p');
paragraphe.innerHTML = legendes[i];
paragraphe.id = legendes[i];
var ratio = image.height / image.width;
if(image.height >= 750) {
image.height = '750';
image.width = image.height / ratio;
}
image.style.marginTop = 0 - image.height / 2 + 'px';
image.style.marginLeft = 0 - image.width / 2 + 'px';
paragraphe.style.width = image.width + 'px';
paragraphe.style.marginTop = (image.height + 20) / 2 + 'px';
paragraphe.style.marginLeft = 0 - image.width / 2 + 'px';
bloc_image.style.width = '100%';
bloc_image.style.height = '100%';
bloc_image.appendChild(image);
bloc_image.appendChild(paragraphe);
}
function dispose(i) {
bloc_image.removeChild(document.getElementById(images[i]));
bloc_image.removeChild(document.getElementById(legendes[i]));
bloc_image.style.width = '0';
bloc_image.style.height = '0';
}
(コードはフランス語で申し訳ありません。コードに関するコメントや精度が必要な場合は、遠慮なく私に質問してください =) )
私の問題は、ビネットをクリックすると正しい画像が表示されますが、幅と高さが0pxであると見なされるため、画像は正しく表示されますが、南東に移動します.
image.style.marginTop = 0 - image.height / 2 + 'px';
image.style.marginLeft = 0 - image.width / 2 + 'px';
また、キャプションも写真の上に移動します。しかし、ページを更新して再試行すると、幅と高さの値が正しいため、今回は画像が正しく表示され、真ん中に表示されます。
ブラウザはプロパティをロードする前に画像とキャプションを表示しているようで、この「バグ」を修正する方法がわかりません。