3Dカルーセル効果を実現するjs

3Dカルーセル効果を実現するjs

この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

3D効果カルーセルを形成するために、主に平行移動と回転があります。私は初心者なので、不足している点があれば、さらにアドバイスをお願いします。コードは次のとおりです。

CSSコード:

 *{
            パディング: 0;
            マージン: 0;
        }
        。箱{
            位置: 相対的;
            幅: 100%;
            高さ: 100%;
            上: 200px;
            マージン: 自動;
        }
        .ワーパー{
            位置: 絶対;
            幅: 100%;
            高さ: 100%;
            パースペクティブ: 800px;
            変換スタイル:3D を保持します。
 
        }
        .box .warpper img{
            幅: 300ピクセル;
            高さ: 200px;
            フロート: 左;
            位置: 絶対;
            上: 0;
            左: 0;
            下部: 0;
            右: 0;
            マージン: 自動;
            境界線の半径: 8px;
            遷移: すべて 1 のイーズイン アウト。
        }
        .btn{
            位置: 相対的;
            上位: 50%;
            左: 50%; 
            幅: 1200ピクセル;
            変換: translate(-50%,-20px);
        }
        .btn .left、.btn .right{
            高さ: 50px;
            幅: 50px;
            フォントサイズ: 30px;
            テキスト配置: 中央;
            行の高さ: 50px;
            背景色: 黒;
            色: 白;
            境界線の半径: 15%;
            位置: 絶対;
        }
        .btn .left{
            左: 0;
        }
        .btn .right{
            右: 0;
        }
        .btn span:hover{
            背景色: rgba(0,0,0,0.8);
        }
        .ポイント{
            位置: 絶対;
            左: 50%;
            下: 10px;
            変換: translate(-50%,200px);
            高さ: 14px;
        }
        .ポイント li{
            表示: インラインブロック;
            リストスタイル: なし;
            幅: 14px;
            高さ: 14px;
            境界線: 1px実線 #000;
            境界線の半径: 50%;
            背景色: 白;
            マージン: 0 5px;
        }
        .ポイント.現在{
            背景色: 赤;
        }

HTMLコード:

<div class="box">
        <div class="warpper">
            <img src="./Inspiration 3.jpg" alt="">
            <img src="./Inspirational2.jpg" alt="">
            <img src="./2f1d.jpg" alt="">
            <img src="./aimg.jpg" alt="">
            <img src="./peg.jpg" alt="">
        </div>
        <div class="btn" id="btn">
            <span class="left"> < </span>
            <span class="right"> > </span>
        </div>
        <ul class="ポイント">
        </ul>
    </div>
<script src="swarp.js"></script>

JSコード:

var imgs = document.querySelectorAll("img")
var btns = document.querySelectorAll("span")
var ul = document.querySelector(".points")
var lis = document.getElementsByTagName("li")
変数タイマー
var current = 0 // 現在再生中の画像のインデックス var flag = true // クリック手ぶれ補正の調整 var len = imgs.length // 画像の長さ function loadFirst() {
    画像移動()
    バインド()
    ボタンクリック()
    getDot()
    ドットを表示()
    自動再生()
}
ロードファースト()
関数imgMove() {
    var mlen = Math.floor(len / 2)
    (var i = 0; i < mlen; i++) の場合 {
        // 現在の再生画像インデックス値 var rimg = current + 1 + i
        var limg = len + current - 1 - i
        リムの長さが 1 以上の場合
            リム -= 長さ
        }
        (limg >= len)の場合{
            limg -= len
        }
        imgs[limg].style.transform = `translateX(${150 * (i + 1)}px) translateZ(${200 - i * 100}px) rotateY(-30deg)`
        imgs[rimg].style.transform = `translateX(${-150 * (i + 1)}px) translateZ(${200 - i * 100}px) rotateY(30deg)`
    }
    imgs[現在].style.transform = `translateZ(300px)`
}
// 自動再生機能 function autoPlay() {
    タイマー = setInterval(関数() {
        (現在値 >= 長さ - 1) の場合 {
            電流 = 0
        } それ以外 {
            現在の++
        }
        画像移動()
        オートLi()
    }, 3000)
}
// 画像をクリックして再生します。関数bind() {
    (i = 0; i < imgs.length; i++ とします) {
        imgs[i].onclick = 関数 () {
            電流 = i
            画像移動()
            オートLi()
        }
        imgs[i].onmouseover = 関数 () {
            クリアインターバル(タイマー)
        }
        imgs[i].onmouseout = 関数 () {
            自動再生()
        }
    }
}
// 左ボタンと右ボタンをクリックする function btnClick() {
    (i = 0 とします; i < btns.length; i++) {
        btns[i].onclick = 関数(){
            // クリックミスを防ぐ if (!flag) {
                戻る
            }
            フラグ = 偽
            (i == 0) の場合 {
                // 前 if (current <= 0) {
                    現在の長さ = 長さ - 1
                } それ以外 {
                    現在 - 
                }
            } それ以外 {
                //次に、(現在の長さ >= 1) {
                    電流 = 0
                } それ以外 {
                    現在の++
                }
            }
            setTimeout(関数() {
                フラグ = true
            }, 1000)
 
            画像移動()
            オートLi()
 
        }
        btns[i].onmouseenter = 関数(){
            クリアインターバル(タイマー)
        }
        btns[i].onmouseout = 関数(){
            自動再生()
        }
    }
}
// ドット関数 getDot() {
    (var i = 0; i < len; i++) の場合 {
        ul.innerHTML += `<li></li>`
    }
    lis[0].classList.add("現在")
}
関数 showDot() {
    (i = 0; i < len; i++) の場合 {
        lis[i].onclick = 関数(){
            (var j = 0; j < len; j++) の場合 {
                lis[j].classList.remove("現在")
            }
            this.classList.add("現在")
            電流 = i
            画像移動()
        }
    }
}
関数autoLi() {
    (var i = 0; i < len; i++) の場合 {
        if (i == 現在の) {
            lis[i].classList.add("現在")
        } それ以外 {
            lis[i].classList.remove("現在")
        }
    }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • カルーセル例の JS 実装
  • JS でカルーセル効果を実現する 3 つの簡単な方法
  • カルーセル効果を実現するための純粋なjs
  • ブリージングカルーセルを実装するネイティブJS
  • カルーセル効果を作成するためのjs
  • JavaScript が Xiaomi のカルーセル効果を模倣
  • JavaScriptカルーセルの実装について

<<:  Dockerイメージのローカル移行の実装

>>:  MySQL 8.0.23 無料インストールバージョンの設定詳細チュートリアル

推薦する

Nginx のパラメータをオンにして Web パフォーマンスを 3 倍向上させる方法

1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...

SASSで変数のデフォルト値を使用する方法

SASS で定義された変数では、後で設定された値によって古い値が上書きされます。 $色: 赤; $色...

Reactイベントメカニズムソースコード分析

目次原理ソースコード分析委任されたイベントバインディングすべてのサポートされているイベントを聴くネイ...

MySql インポート CSV ファイルまたはタブ区切りファイル

別のライブラリから別のライブラリにデータをインポートする必要がある場合があり、このデータは CSV ...

Linux クラウド サーバーに JDK と Tomcat をインストールするための詳細な手順 (推奨)

JDKをダウンロードしてインストールするステップ 1: まず、公式 Web サイト http://...

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

CSSを使用してすべての子要素を選択する方法の詳細な説明

CSS を使用してすべての子要素を再帰的に選択するにはどうすればよいですか?以下の記事では、CSS ...

単一のdivの正多角形変換を実現する純粋なCSS

前回の記事では、beforeとafterの擬似要素を使用してMaterial Designスタイルの...

IE8はマルチ互換モードを使用してWebページを正常に表示します

IE8には複数の互換モードがあります。 IE プラットフォームの設計者である Chris Wilso...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

gbk utf8 GBK と UTF-8 ウェブページエンコーディングを正しく理解して使用する方法

Web ページ エンコーディングは英語では web page encoding と翻訳され、Web ...

シェルスクリプトを使用して Docker サービスを一括で開始および停止する

目次Dockerを起動するDockerを停止するPython 呼び出しスクリプト最近、日々のテストで...

MYSQL接続ポートが占有され、ファイルパスエラーが発生する問題を解決します

今朝、私は Wampserver を使用してローカルの win7 マシン上に PHP 環境を構築し、...

カルーセルバナーの自動回転効果を実現する純粋な CSS

さっそくコードを見てみましょう * { マージン: 0; パディング: 0; } 。容器 { マージ...