カルーセル画像の回転効果html + css + js

最初に効果を見てください:

写真を回転させる方法はたくさんあり、効果もたくさんあります。以下は、両側にぼやけた画像、中央に拡大された画像がある単純なカルーセル効果です。または右の画像をマウスクリックすると、中央に移動して大きくなり、他の画像は横に移動してぼやけます。

右端の画像を
ノーザンライツナイト。
クリックします。左端の画像をクリックします。
ノーザンライツナイト。
ここに画像の説明を挿入

この効果は、マウスがクリックされた後にのみ回転することです。マウスがクリックされない自動回転の効果については、将来、別の記事を公開する時間があります。

成し遂げる:

1.ラベルを定義します。.kuangは一番下のボックス、.itemは画像のボックスです。任意の画像ボックスを書き込むことができます。私は、8枚の画像、3枚以下の画像を書き込みましたが、すべて同じクラス名です。最後の3枚の写真のクラス名を付けます。.leftはレンダリングの左側を表し、.middleは上記のレンダリングの中央のレンダリングを表し、.rightはレンダリングの右側のレンダリングを表します。

   <div class="kuang">
        <div class="kuang">
            <div class="item "><img src="4.jpg"></div>
            <div class="item "><img src="5.jpg"></div>
            <div class="item "><img src="6.jpg"></div>
            <div class="item "><img src="7.jpg"></div>
            <div class="item "><img src="8.jpg"></div>
            <div class="item left"><img src="1.jpg"></div>
            <div class="item middle"><img src="2.jpg"></div>
            <div class="item right"><img src="3.jpg"></div>  
        </div>

2.下のボックスと画像の基本的なスタイルまず、すべての画像ボックスが完全に同じ位置に配置され、すべての画像が重なるようにします。

 .kuang{
    
    
           position: relative;
           width: 400px;
           height: 250px;
          cursor: pointer;
       }
       .item{
    
    
           position: absolute;
           top: 0;
           left: 0;
           width: 400px;
           height: 250px;
           transition: all 1.5s;   
       }
    
       .item img{
    
    
           width: 100%;
           height: 100%;
          
       }

遷移:すべて1.5秒;遷移効果

3.私たちの目が見る上記の効果の3つの写真を書き、それらのクラススタイルを重ね合わせます。左側の画像は半分左に移動してぼやけ、右側の画像は半分右に移動してぼやけ、中央の画像は中央にあり、1.3倍に拡大します。

 .kuang .left{
    
    
           left: -200px;
          filter: blur(6px);
          z-index: 3; 
       }
      .kuang .middle{
    
    
           left: 0px;
           transform: scale(1.3);
          z-index: 4;          
       }
      .kuang .right{
    
    
           left: 200px;
          filter: blur(6px);
          z-index: 3;
       }

真ん中の画像が最上層に表示されるため、z-indexが最大になります。左右をカバーします。
filter:blur(6px);画像がぼやけています。
transform:scale(1.3);画像が拡大されます。

4.私たちの目に見える3つのレンダリングではない他の写真にスタイルを与えます。

 .xiaoshi{
    
    
          left: 0px;
          z-index: 1;
      
      }

それらはすべて重なり合って中央に戻り、z-indexが最も小さく、左、中央、右の3つの目よりも小さいため、誰もそれらを見ることができません。

5.jsの実装では、対応する要素にクラス名を大まかに割り当てています。
(1)最初に、すべての画像がitems配列に配置され、次にforループがクリックイベントを各画像にバインドします。
(2)次に、クリックイベントで、すべての画像の3つのエフェクトクラスすべてをクリアし、それらすべてにxiaoshiクラスを追加する別のforループがあります。このようにして、画像はすべて中央の位置に戻ります。写真が全部で3枚しかない場合は、このサイクルを削除できます。
(3)次に、クリックイベントを取得する画像にクラス.middleを追加すると、中央に移動してズームインします。
this.previousElementSiblingは、兄弟の前の要素を取得することを意味します。つまり、最後の画像を取得します。左側のクラスは左側に配置します。これは、実際に前面が選択されていることを意味します。それ以外の場合は、背面が選択されています。以下はitems [items.length-1]です。つまり、前に画像がない場合は、最後の画像を選択します。

nextElementSiblingは、兄弟の次の要素を取得することを意味します。つまり、次の画像を彼に提供します。適切なクラスは、それを右側に配置します。これは、実際に前面が選択されていることを意味します。それ以外の場合は、背面が選択されています。以下はitems [0]です。つまり、背後に画像がない場合は、最初の画像を選択します。

 var items = document.querySelectorAll('.item');
        for(var i=0;i<items.length;i++)
        {
    
        
            items[i].addEventListener('click',function(){
    
    

                 for(let j=0;j<items.length;j++)
                {
    
    
                    items[j].classList.remove('left','right','middle');
                    items[j].classList.add('xiaoshi');
                    
                } 

                this.classList.remove('left','middle','right');
                this.classList.add('middle');
              

                let left = this.previousElementSibling ?? items[items.length-1];
                left.classList.add('left'); 
 
                let right = this.nextElementSibling ?? items[0]; 
                right.classList.add('right');  
                
            })
        }
     

完全なコード:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>北极光之夜。</title>
    <style>
         *{
     
     
           margin: 0;
           padding: 0;
           box-sizing: border-box;
       }
       body{
     
     
           height: 100vh;
           display: flex;
           align-items: center;
           justify-content: center;
           background-image: radial-gradient(white,black) ;
       }
       .kuang{
     
     
           position: relative;
           width: 400px;
           height: 250px;
          cursor: pointer;
       }
       .item{
     
     
           position: absolute;
           top: 0;
           left: 0;
           width: 400px;
           height: 250px;
           transition: all 1.5s;   
       }
    
       .item img{
     
     
           width: 100%;
           height: 100%;
          
       }
      .kuang .left{
     
     
           left: -200px;
          filter: blur(6px);
          z-index: 3; 
       }
      .kuang .middle{
     
     
           left: 0px;
           transform: scale(1.3);
          z-index: 4;          
       }
      .kuang .right{
     
     
           left: 200px;
          filter: blur(6px);
          z-index: 3;
       }
      .xiaoshi{
     
     
          left: 0px;
          z-index: 1;
      
      }
    </style>
</head>
<body>
    <div class="kuang">
        <div class="kuang">
            <div class="item "><img src="4.jpg"></div>
            <div class="item "><img src="5.jpg"></div>
            <div class="item "><img src="6.jpg"></div>
            <div class="item "><img src="7.jpg"></div>
            <div class="item "><img src="8.jpg"></div>
            <div class="item left"><img src="1.jpg"></div>
            <div class="item middle"><img src="2.jpg"></div>
            <div class="item right"><img src="3.jpg"></div>  
        </div>

    </div>
    <script>
        var items = document.querySelectorAll('.item');
        for(var i=0;i<items.length;i++)
        {
     
         
            items[i].addEventListener('click',function(){
     
     

                 for(let j=0;j<items.length;j++)
                {
     
     
                    items[j].classList.remove('left','right','middle');
                    items[j].classList.add('xiaoshi');
                    
                } 

                this.classList.remove('left','middle','right');
                this.classList.add('middle');
              

                let left = this.previousElementSibling ?? items[items.length-1];
                left.classList.add('left'); 
 
                let right = this.nextElementSibling ?? items[0]; 
                right.classList.add('right');  
                
            })
        }
     


    </script>
</body>
</html>

まとめ(歌詞):

その他の記事:
レスポンシブカードホバリング効果html + css
水波読み込みアニメーションhtml + css
ナビゲーションバースクロールグラデーション効果html + css + js
など...

私は最近この曲をよく聴いています。ニューヨークに行ったことがない-ChopstickBrothers。

今出発したら

私は去るべきですか

戻ってくることはありません

通りのそばに立つと

私はすべてを持ってきました

パスポートのクレジットカードとお金

たぶん今夜飛行機に乗る

街灯の下に駐車したタクシー

バスや地下鉄で悪くない

この瞬間に鼓動感がやってくる

私はまた夢に満ちています

自分を甘やかし、制約を取り除きます

本当に去りたい

帰りたい

ここに画像の説明を挿入
私は文が好きです:

今日は卒業しましょう〜

おすすめ

転載: blog.csdn.net/luo1831251387/article/details/113056953
おすすめ