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 にデプロイする詳細な手順

推薦する

Vue-router プログラムナビゲーションの 2 つの実装コード

ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...

Vue3の状態管理の使用方法の詳細な説明

目次背景提供/注入共有状態の抽出データを提供するデータの挿入まとめ反応的な共有状態の抽出共有状態の使...

mysqlを完全にアンインストールします。個人テストです!

MySQL をクリーンアンインストールします。個人的にテストしたところ、今回はようやくうまくいきま...

CSSを使用して画像フレームアニメーションと曲線の動きを実装する

すべてのアニメーションの基本原理は、対応する画像を短時間で次々に表示し、視覚的に動いているように見せ...

Nginx 1つのドメイン名で複数のプロジェクトにアクセスする方法の例

背景最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

Windows 7 での MySQL 8.0.18 の導入とインストールのチュートリアル

1. 事前準備 (windows7+mysql-8.0.18-winx64) 1. ダウンロードアド...

JavaScript の数値および数学オブジェクトの概要

目次1. JavaScript における数値2. Javascript の Math オブジェクト1...

円形グラデーションプログレスバー効果を実現する CSS サンプルコード

実装のアイデア一番外側は大きな円(グラデーションカラー)グラデーションの円を覆うように、内側に半円を...

MySQL移行計画と落とし穴の実践記録

目次背景解決策1: 古いデータをバックアップするオプション2: テーブルを分割する解決策3: tid...

Rancher のデプロイメントと K8S クラスターのインポートに関する問題

Rancher のデプロイメントには、次の 3 つのアーキテクチャがあります。高可用性 Kubern...

MySQL 5.7.17 のインストールと設定のグラフィックチュートリアル

ブロガーはこう述べています。「私は『史上最も簡単な MySQL チュートリアル』という一連のブログ記...

Linux で jar パッケージを起動してバックグラウンドで実行する方法

jar パッケージを実行する Linux コマンドは次のとおりです。方法1: java -jar s...

K3s 入門ガイド - Docker で K3s を実行するための詳細なチュートリアル

k3dとは何ですか? k3d は、Docker で K3s クラスターを実行するための小さなプログ...