パズル効果を実現するネイティブ 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データベーステーブルの容量を確認する方法の例

推薦する

MySQLの比較演算子正規表現マッチングREGEXPの使用の詳細な説明

1. データを初期化する `test_01` が存在する場合はテーブルを削除します。 テーブル「te...

画像の色を変更するための純粋なCSS

画像の色を変更するための CSS テクニックは非常にシンプルです。具体的なコードは次のとおりです。ヒ...

Mysqlマスタースレーブ同期の実装原理

1. MySQL マスター/スレーブ同期とは何ですか?マスター データベースのデータが変更されると、...

MySQL テーブルの断片化を解消し、スペースを再利用する方法

目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...

JS配列ループ方式と効率分析の比較

配列メソッドJavaScript には多くの配列メソッドが用意されています。次の図は、ほとんどの配列...

lastInfdexOf 関数の MySQL 実装例

MySQL では lastIndexOf に似た関数を使用する必要がある場合もありますが、すぐに使用...

Docker コンテナのログを表示およびクリーンアップする方法 (テスト済みで効果的)

1. 問題Docker コンテナのログにより、ホストのディスク領域がいっぱいになりました。 doc...

XHTML: フレーム構造タグ

フレーム構造タグ <frameset></frameset>フレームを使用す...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

Docker-compose を使用して GitLab をデプロイする方法

Docker-compose は GitLab をデプロイします1. Dockerをインストールする...

Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

方法 1: 設定ファイルを変更する (docker サービスを停止する必要があります) 1. doc...

ウェブデザインの仕事に応募する方法

<br />みなさんこんにちは!ここで皆さんとチャットできて光栄です! (*^__^*)...

Web 標準アプリケーション: Tencent QQ ホームページの再設計

Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...

Linuxでawkを使用する方法の詳細な説明

awk を学ぶ前に、sed、grep、tr、cut などのコマンドを学んでおく必要があります。これら...

Ubuntu で時刻同期に NTP を使用する

NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...