私は信じられない奇妙な現象に出くわしました.なぜこれが起こるのかについて誰かが答えを持っているのだろうかと思いました. 私は、作成したカスタム jQuery スライドショーを使用して、写真サイトの画像の多くの操作を行ってきましたが、いくつかの問題に遭遇しました。
ここにギャラリーがあります: http://www.daemondeveloper.com/photography/gallery.php
このギャラリーの画像のサイズを変更して、プレビュー画像のサイズに合わせて拡大縮小する関数をいくつか追加しています。ご覧のとおり、最後の画像はパノラマであり、サイズを変更するようにjavascriptを指定していても、divの高さ全体を埋めていません。
ページを更新すると、javascript が突然動作するようになり、画像が適切に拡大縮小されます。
女の子のパノラマ写真をクリックしてみてください。私のスライドショーが表示され、jQuery を使用して縦方向に拡大縮小および中央揃えされた画像が表示されます。以下の関数は、ギャラリー内の小さな画像プレビューのクリックを処理するものです。
コメントされたchangeSize()
関数がどこにあるかを見ると、それは私が関数を持っているために使用した場所であり、スケーリングは機能しませんでした。次に、スライドショーを表示する .show() 関数の後に移動しましたが、動作するようになりました。したがって、display:none; のように見えます。デバッグすると、currentImg オブジェクトが null であったため、display:none; に設定されているときに .slides セレクターが存在しないかのように、javascript の起動方法に影響がありました。これは本当に起こっているのでしょうか、それとも他の何かの副作用を見ているだけですか?
これが実際に起こっている場合、gallery.php ページの最初の読み込み時にパノラマ画像がスケーリングされないという最初の問題の原因に関係している可能性があります。
$('.imgHolder').click(function(){
currentPosition = $('.imgHolder').index(this);
$('#slideShow').width(slideWidth);
// Remove scrollbar in JS
$('#slideContainer').css('overflow', 'hidden');
// Wrap all .slides with #slideInner div
slides.css({
'float' : 'left',
'width' : slideWidth
});
// Set #slideInner width equal to total width of all slides
$('#slideInner').css('width', (slideWidth * numberOfSlides));
// Hide left arrow control on first load
manageControls(currentPosition);
$('#slideInner').css('margin-left' , slideWidth*(-currentPosition));
//changeSize(); used to be here
$('#filter').show();
$('#photoWrap').show();
//Change image scale and center
changeSize();
});
そして、ここにスケーリングとセンタリングを行う changeSize() 関数があります
function changeSize(){
currentSlide = $('.slide').get(currentPosition);
currentImg = $(currentSlide).children('img:first')[0];
imgRatio = $(currentImg).height() / $(currentImg).width();
if(imgRatio < slideRatio)
{
$(currentImg).addClass('landscape');
//Vertically align
var thisHeight = $(currentImg).height();
$(currentImg).css('margin-top', ($('#slideShow').height()/2)-(thisHeight/2));
}else{
$(currentImg).addClass('portrait');
}
}