CSS3 はドラッグ可能なルービックキューブの 3D 効果を実現します

CSS3 はドラッグ可能なルービックキューブの 3D 効果を実現します

主に使用される知識ポイント:

•css3 3D変換 •ネイティブjsマウスドラッグイベント

•表示:グリッドレイアウト

実装された機能

• 3Dルービックキューブはクリックしてドラッグできます

• 効果を直接確認する

html:

<div class="コンテナ">
        <div class="box デフォルト">
            <div class="pic"><img src="./img/cat.jpg" alt=""></div>
            <div class="pic"><img src="./img/dog.jpg" alt=""></div>
            <div class="pic"><img src="./img/elephant.jpg" alt=""></div>
            <div class="pic"><img src="./img/lion.jpg" alt=""></div>
            <div class="pic"><img src="./img/rabbit.jpg" alt=""></div>
            <div class="pic"><img src="./img/monkey.jpg" alt=""></div>
        </div>
    </div>
    <h1>下の画像ボタンをクリックして切り替えます</h1>
    <div class="btn">
        <input type="image" class="1" src="./img/cat.jpg">
        <input type="image" class="2" src="./img/dog.jpg">
        <input type="image" class="3" src="./img/elephant.jpg">
        <input type="image" class="4" src="./img/lion.jpg">
        <input type="image" class="5" src="./img/rabbit.jpg">
        <input type="image" class="6" src="./img/monkey.jpg">
    </div>

CS: ...

   * {
        マージン: 0;
        パディング: 0;
    }
    html,
    体 {
        幅: 100%;
        高さ: 100%;
        背景: #66677c;
        テキスト配置: 中央;
    }
    。容器 {
        幅: 300ピクセル;
        高さ: 300px;
        マージン: 50px 自動 150px;
        パースペクティブ: 1200px;
    }
    .コンテナ .ボックス {
        幅: 300ピクセル;
        高さ: 300px;
        位置: 相対的;
        変換スタイル: 3D を保持します。
        遷移: 0.5 秒を変換します。
    }
    .コンテナ .ボックス .pic {
        位置: 絶対;
        左: 0;
        上: 0;
        幅: 300ピクセル;
        高さ: 300px;
        ボックスシャドウ: 0px 0px 5px #fff;
    }
    .コンテナ .ボックス .pic 画像 {
        幅: 100%;
        高さ: 100%;
        カーソル: ポインタ;
    }
    .コンテナ .ボックス .pic:nth-child(1) {
        変換: translateZ(150px);
    }
    .コンテナ .ボックス .pic:n番目の子(2) {
        変換: 回転Y(-180度) 移動Z(150ピクセル);
    }
    .コンテナ .ボックス .pic:nth-child(3) {
        変換: 回転Y(90度) 移動Z(150ピクセル);
    }
    .コンテナ .ボックス .pic:nth-child(4) {
        変換: 回転Y(-90度) 移動Z(150ピクセル);
    }
    .コンテナ .ボックス .pic:nth-child(5) {
        変換: 回転X(90度) 移動Z(150ピクセル);
    }
    .コンテナ .ボックス .pic:nth-child(6) {
        変換: 回転X(-90度) 移動Z(150ピクセル);
    }
    h1 {
        色: #fff;
        フォントサイズ: 30px;
        下部マージン: 30px;
    }
    .btn{
        表示: グリッド;
        コンテンツの中央揃え: 中央;
        グリッドテンプレートの列: 100px 100px 100px;
        グリッドテンプレートの行: 100px 100px;
        グリッドギャップ: 15px;
    }
    .btn 入力 {
        幅: 100ピクセル;
        高さ: 100px;
        アウトライン: なし;
        境界線: 2px 実線 #fff;
    }
    .btn 入力:フォーカス {
        境界線: 2px 実線 #e70;
    }
    。デフォルト {
        変換: translateZ(-150px) rotateX(-10deg) rotateY(15deg);
    }
    .image1 {
        変換: translateZ(-150px) rotateX(0deg) rotateY(0deg);
    }
    .image2 {
        変換: translateZ(-150px) rotateY(-180deg);
    }
    .image3 {
        変換: translateZ(-150px) rotateY(-90deg);
    }
    .image4 {
        変換: translateZ(-150px) rotateY(90deg);
    }
    .image5 {
        変換: translateZ(-150px) rotateX(-90deg);
    }
    .image6 {
        変換: translateZ(-150px) rotateX(90deg);
    }

js:

 (関数(){
        var btn = document.getElementsByClassName('btn')[0];
        var box = document.getElementsByClassName('box')[0];
        btn.addEventListener('click',function(e){
            var クラス名 = e.target.className;
            if(クラス名 !== 'btn'){
                ボックススタイル = '';
                box.classList.replace(box.classList[1],'画像'+クラス名);
            }
        })
        //マウスのドラッグ効果 var xN = 10, yN = 15;
        document.addEventListener('mousedown',function(e){
            e.preventDefault();
            e.stopPropagation();
            var x = e.clientX;
            var y = e.clientY;
            document.addEventListener('mousemove',move);
            document.addEventListener('mouseup', 上);
            関数move(e){
                e.preventDefault();
                e.stopPropagation();
                var x1 = e.clientX;
                var y1 = e.clientY;
                xN + = (x1 - x)*0.04;
                yN += (y1 - y)*0.04;
                box.style.transform = 'translateZ(-150px) rotateY(' + xN + 'deg) rotateX(' + -yN + 'deg)';
            }
            関数 up(){
                document.removeEventListener('mousemove', 移動);
            }
        })
    })()

要約する

上記は、CSS3 に基づくドラッグ可能なルービック キューブ 3D 効果の紹介です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

<<:  デザイン理論:人の心を理解する方法

>>:  TypeScript 環境を構築して VSCode にデプロイする詳細な手順

推薦する

HTML TextArea でのフォーマット保存の問題の解決方法

textarea の形式は保存時にデータベースに保存できますが、表示時には /n と相互に変換できな...

Node.jsはブレークポイント再開を実装する

目次ソリューション分析スライス履歴書のダウンロード具体的な解決プロセス論理的分析フロントエンドサーバ...

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

テキストカルーセルは私たちの日常生活で非常に一般的です。スーパーマーケットや実店舗の入り口には、テキ...

CSS でハニカム/六角形アトラスを実装するためのサンプルコード

理由は分かりませんが、UIではハニカム効果(手を広げたような効果)のデザインが好まれます。 1. 六...

ウェブページのテーブルの境界線を設定する方法

<br />前回は、Web テーブルにセルの線を設定する方法を学びました。今日は、Web...

deepin apt コマンドを使用して最新バージョンの docker をインストールする方法

ステップ1: Ubuntuソースを追加するルートに切り替える suルートソフトウェアソースファイルの...

チェックボックスの選択またはキャンセルを実装するJavaScript

この記事では、すべてのチェックボックスを選択または解除するためのJavaScriptの具体的なコード...

88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

私が使用しているデータベースはMySQLデータベースバージョン5.7ですまずデータベーステーブルを自...

React Hooksを使用する際のよくある落とし穴

React Hooks は React 16.8 で導入された新しい機能で、クラスを使用せずに状態や...

MySQL のバックアップとリカバリの設計アイデア

背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...

uni-appがNFC読み取り機能を実装

この記事では、参考までに、NFC読み取り機能を実装するためのuni-appの具体的なコードを紹介しま...

WeChatアプレットのスクロールビューの改行問題を解決する

今日、小さなプログラムを書いていたときに、スクロールビューを使用したのですが、スクロールビュー内のテ...

実行中の Docker コンテナにボリュームを動的に追加する方法

以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...

CSS3 シンプルカットカルーセル画像実装コード

実装のアイデアまず、親コンテナーを作成し、2 つの順序なしリストを使用して、柔軟なレイアウトで親コン...