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

推薦する

docker-compose ポートと expose の違いの詳細な説明

docker-compose でコンテナ ポートを公開する方法は、ports と expose の ...

アーティストの自己啓発におけるいくつかの経験

会社の影響力が拡大し、製品が改良され続けるにつれて、関連するイメージデザインもそれに追いつき、徐々に...

MySQLコンテナ間のレプリケーション構成例の詳細な説明

背景先週、会社で MySQL レプリケーションのトレーニングを受けたので、今週末は学んだことを実践す...

Tomcatを使用して共有ライブラリを設定し、同じjarを共有する

デプロイされるプロジェクトが増えるにつれて、Tomcat にデプロイされるリリース パッケージも増え...

MySQL パーティション関数の詳細な説明と例の分析

まず、データベース パーティショニングとは何でしょうか?以前、MySQL のテーブル パーティショニ...

CSS3 で背景ぼかしを実現する 3 つの方法 (要約)

1. 通常の背景ぼかしコード: <スタイル> html, 体 { 幅: 100%; 高...

js 属性オブジェクトの hasOwnProperty メソッドの使用

オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...

Vue3 ドキュメント クイックスタート

目次1. セットアップ1. セットアップ関数の最初のパラメータ - props 2. 文脈2. セッ...

vue-cli4.5.xはプロジェクトを素早く構築します

1. vue-cliをインストールする vue.js で vue.js を実行します。 2. プロジ...

ウェブページ作成時に標準 HTML コードを使用する際のポイント

<br />多くのウェブサイト デザイナーが犯す最も一般的な間違いは、ウェブページが I...

Linux は、ディレクトリが存在するかどうかを判断するために if を使用します。

Linux で if を使用してディレクトリが存在するかどうかを判断する方法方法は次のとおりです。...

MySQL実践スキル: 2つのテーブルに異なるデータがあるかどうかを比較する方法の分析

この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を...

mysql 計算関数の詳細

目次2. フィールドの連結2. MySQL関数の例をいくつか挙げてください。 2.1 シンボル処理2...

プロジェクトにおける CSS グリッドシステムの柔軟な使用方法の詳細な説明

序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...

Dockerを使用してMySQL 8.0をデプロイする方法の例

1. 公式サイトを参照してdockerをインストールする2. MySQLイメージをプルします(デフォ...