パズル効果を実現するネイティブ js

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

要件:ページが更新されるたびに、フラグメント画像が右側のコンテナにランダムに配置されます。マウスを押して左にドラッグします。正しい座標の一定範囲内で、画像が自動的に吸着されます。配置されたフラグメントはドラッグできなくなります。

まずは効果を見てみましょう:

jsコード:

//初期関数init()を実行します。
関数init() {
    //フラグメント コンテナーを作成します。var frag = document.createDocumentFragment();
    document.body.style.margin = "0px";
    // 左の画像コンテナを作成する var ul=createE("ul",{
        幅: "260px",
        高さ: "400px",
        背景画像: "url(./img/3.jpg)",
        borderRight: "1px 実線 #000",
        borderBottom: "1px 実線 #000",
        リストスタイル: "なし",
        パディング: "0px",
        マージン: "0px",
        不透明度: ".3",
        位置: 「絶対」
    })
    //画像に境界線を表示するための li を作成します var li=createE("li",{
        幅: "51px",
        高さ: "79px",
        borderLeft: "1px 実線 #000",
        borderTop: "1px 実線 #000",
        パディング: "0px",
        マージン: "0px",
        フロート: "左"
    })
    //ループし、li をコピーして ul に挿入します for (i = 0; i < 25; i++) {
        ul.appendChild(li.cloneNode(false));
    }
    //フラグメント コンテナーに ul を挿入します。frag.appendChild(ul);
    // 右側に画像コンテナを作成します。img は body に対して相対的に配置する必要があるため、その親コン​​テナには配置属性を設定できません var div = createE("div",{
        幅: "302px",
        高さ: "302px",
        境界線: "1px 実線 #000",
        左余白: "400px"
    })
    //画像タグを作成する for (var j = 0; j < 5; j++) {
        (var k = 0; k < 5; k++) の場合 {
            var img = createE("img",{
                幅: "52px",
                高さ: "80px",
                位置: "絶対"、
                左: Math.floor(Math.random() * 250) + 400 + "px",
                上: Math.floor(Math.random() * 220) + "px"
            })
            img.src = "./img/img" + j + "-" + k + ".jpg";
            //画像は mouseHandler イベントをリッスンします。img.addEventListener("mousedown", mouseHandler);
            div.appendChild(画像);
        }
    }
    // div をフラグメント コンテナーに挿入し、次に frag を body に挿入します。frag.appendChild(div);
    document.body.appendChild(フラグ);
}
//マウスイベント関数mouseHandler(e) {
    スイッチ (e.type) {
        ケース「マウスダウン」:
            // クリック後に画像を移動するデフォルトの効果をクリアします。e.preventDefault();
            console.log(this.src.match(/img\/img(.*)\.jpg/))
            //画像パス内の番号を取得し、画像の正しい位置座標を計算します。var imgSrc = this.src.match(/img\/img(.*)\.jpg/)[1].split("-");
            var rightL=imgSrc[1]*52;
            var rightTop=imgSrc[0]*80;
            //画像が正しく配置されている場合は、直接ジャンプします if (this.style.left===rightL+"px" && this.style.top===rightTop+"px") return;
            //現在の画像の Z インデックスを最大値に設定します。this.style.zIndex = "999";
            //e.offsetX、e.offsetY、および現在クリックされている画像オブジェクトをドキュメントに保存します。document.x = e.offsetX;
            ドキュメント.y = e.offsetY;
            ドキュメント.elem = これ;
            ドキュメントの右L = 右L;
            document.rightTop=右上;
            //ドキュメントは mousemove イベントと mouseup イベントをリッスンします。document.addEventListener("mousemove", mouseHandler);
            document.addEventListener("mouseup"、mouseHandler);
            壊す;
        ケース「マウス移動」:
            //自動吸着距離 var gap = 20;
            //現在の画像をマウスに合わせて移動するように設定します。let x=e.clientX - this.x;
            y = e.clientY - this.y とします。
            this.elem.style.left = x + "px";
            this.elem.style.top = y + "px";
            //現在の画像の位置座標が特定の範囲内にある場合、自動的に吸着させる if (x>=this.rightL-gap &&x<=this.rightL+gap&&
                y>=this.rightTop-gap &&y<=this.rightTop+gap) {
                this.elem.style.left = this.rightL + "px";
                this.elem.style.top = this.rightTop + "px";
            }
            壊す;
        ケース「マウスアップ」:
            //マウスが放されたら、現在の画像の Z インデックスを減らします。this.elem.style.zIndex = "10";
            //マウスを放した後、ドキュメントの mousemove イベントと mouseup イベントを削除し、データをクリアして、コンテンツの漏洩を防ぎます。this.removeEventListener("mousemove", mouseHandler);
            this.removeEventListener("mouseup", mouseHandler);
            this.elem=null;
            壊す;
    }
}
//タグを作成する function createE(elem,styleData){
    var elem = document.createElement(elem);
    for(var prep in styleData){
        elem.style[準備]=styleData[準備];
    }
    要素を返します。
}

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

以下もご興味があるかもしれません:
  • js+ca​​nvasはスライディングパズルの検証コードの機能を実現します
  • JSはPC・モバイル端末と埋め込み型スライドパズルの検証コードの3つの効果を実現
  • jsは9マスパズルゲームを実現します
  • JS はモバイル ジグソーパズル ゲームを迅速に実装します
  • JS ジグソーパズル ゲームはオブジェクト指向で、完全にコメントされています。
  • js+html5で携帯電話で遊べるジグソーパズルゲームを実現
  • JSで書かれたデジタルパズルゲームコード[学習参考]
  • JSはスライディングパズル検証機能の完全な例を実装します
  • Node.js を使ってスライディングパズルの検証コードの動作をシミュレートするサンプルコード
  • 絵パズル記憶力テストゲーム、Web + JS バージョン

<<:  Linux /etc/network/interfaces 設定インターフェース方法

>>:  MySQLデータベーステーブルの容量を確認する方法の例

推薦する

Flask と Vue のフロントエンドとバックエンドを分離したプロジェクト展開のサンプル コード

以前、プロジェクトを開発しました。バックエンドのインターフェースを書くために Flask フレームワ...

MySQLオンラインDDLの使用に関する詳細な説明

目次文章LOCKパラメータアルゴリズムパラメータCOPY TABLE プロセスIN-PLACEプロセ...

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

この記事では、MySQL 8.0.14のインストールと設定のプロセスを記録しています。具体的な内容は...

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

MySQLのダウンロードとインストール(バージョン8.0.20)のチュートリアルは参考までに、具体的...

シェルスクリプトを使用して CentOS7 に python3.8 環境をインストールする (推奨)

ワンクリック実行仮想マシンに Python 3.8 をインストールするには、ネットワーク アダプター...

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

この記事では、mysql5.7.23 の詳細なインストールプロセスを記録し、皆さんと共有します。 1...

高同時実行シナリオにおける nginx 最適化の詳細な説明

日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...

Vuex はシンプルなショッピングカート機能を実装します

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...

MySQL バージョン 5.7.24 のデータベース インストール プロセスの詳細なグラフィック説明

MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに...

MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

Linux 7.6 バイナリに MySQL 8.0.27 をインストールする詳細な手順

目次1. 環境整備1.1 オペレーティング システムのバージョン1.2 ディスク容量1.3 ファイア...

ウェブページ作成のテスト問題を全て解けますか?

Web ページのデザインに関する質問です。すべてに答えられるでしょうか? 1. 単一選択の質問 (...

MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明

MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されま...

Alibaba Cloud Server への Web プロジェクトのデプロイについて (5 つの手順)

1.まずAlibaba Cloudのウェブサイトにログインしてアカウントを登録し、サーバータイプを...

Linux yum コマンドを使用して mysql8.0 をインストールする方法の詳細なチュートリアル

1. 設置前によく掃除する rpm -pa | grep mysql または rpm -qa | g...