codeazuki
@codeazuki

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

スライド時に背景画像が伸縮する

背景画像がスライドするときにだけ、画像のように伸縮してしまいます。background-sizeをcover、containにしても、同じように伸縮してしまいました。デフォルトでは、伸縮しないのですが、背景画像が代わる一瞬、画像が伸びてしまいます。改善策を教えてください。

スクリーンショット (106).png
スクリーンショット (109).png
スクリーンショット (112).png
スクリーンショット (115).png
スクリーンショット (117).png
スクリーンショット (119).png
スクリーンショット (121).png
スクリーンショット (123).png
スクリーンショット (125).png

header{
      height: 100vh;
      background: url(イタリアどこかの海岸.jpg);
      background-repeat: no-repeat;
      background-position:0px 0px;
      background-size: cover;
      transition: background-image 8s ease-in-out;
    
    }
header    onclick="changeBackground()"
const backgrounds = [
        'url("image1.jpg")',
        'url("image2.jpg")',
        'url("image3.jpg")',
    ];
    
    let currentIndex = 0;
    
    function changeBackground() {
       currentIndex = (currentIndex + 1) % backgrounds.length;
       const header = document.querySelector('header');
      header.style.backgroundImage = backgrounds[currentIndex];
     
    }
0

3Answer

またスレッド乱立されても困るのでさっさと回答しますが、背景画像のサイズ(アスペクト比)が異なるため切り替えの際に拡大縮小が起こります

画像のリサイズを行わずに実現したいとなるとクロスフェードと拡大縮小がバッティングしているのが問題なのでそれぞれを切り分けて実装する必要があります

header自体に背景画像を指定するのではなく
header内に背景画像を指定した要素を2つ用意しそれらをposition:absolute;で重ねてクリックに応じてbackground-imageで各要素に飛び石になるように指定画像を切替つつopacity:0;とopascity:1;を切り替える
という仕様等が考えられます

実装としては下記コードペンを参照してください

See the Pen for https://qiita.com/codeazuki/questions/304f3a709e8c6fbe766e by southkey47 (@southkey47) on CodePen.

3Like

Comments

  1. @codeazuki

    Questioner

    ありがとうございます。

同じ質問でスレッドを乱立するのは止めてください。閲覧者の迷惑になります。質問一覧にノイズを増やしていると認識してください。前のスレッドをクローズすれば良いってものではありません。

1Like

Comments

  1. @codeazuki

    Questioner

    承知しました。

質問内容について何か指摘を受けた場合、質問を投稿し直さなくても、本文を修正して「修正しました」と追記していただければ大丈夫です。次に質問するときは意識していただけると助かります。

ついでに言うと、過去の質問で解決済みのものはクローズしてもらえると嬉しいです。

1Like

Comments

  1. @codeazuki

    Questioner

    アドバイスありがとうございます。

Your answer might help someone💌