Rumah hujung hadapan web tutorial js Javascript digabungkan dengan Flexbox untuk hanya melaksanakan kemahiran permainan_javascript teka-teki gelongsor

Javascript digabungkan dengan Flexbox untuk hanya melaksanakan kemahiran permainan_javascript teka-teki gelongsor

May 16, 2016 pm 03:15 PM
flexbox

Teka-teki gelongsor bermaksud membahagikan gambar kepada bahagian yang sama, merombak susunan (gambar di bawah), dan kemudian menggelongsorkannya bersama-sama untuk membentuk gambar yang lengkap.

Untuk melaksanakan teka-teki jigsaw, anda perlu mempertimbangkan cara mengocok pesanan secara rawak, cara menukar kedudukan dua gambar, dsb. Walau bagaimanapun, selepas menggunakan reka letak Flexbox, anda tidak perlu memikirkan perkara ini. Pelayar akan melakukannya untuk anda. Untuk pengenalan kepada Flexbox, klik di sini.
Apa yang digunakan dalam permainan ini ialah atribut susunan susun atur Flexbox Atribut pesanan boleh digunakan untuk mengawal susunan item Flex.
Di sini saya menggunakan sembilan elemen kanvas untuk membahagikan imej kepada sembilan bahagian yang sama. Anda juga boleh menggunakan kaedah lain, seperti kedudukan imej latar belakang:

<div class="wrap">
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
  <canvas></canvas>
</div>
Salin selepas log masuk

Jika ia tidak terhad kepada grid sembilan persegi, tetapi juga grid enam belas persegi, dsb., elemen di atas boleh dijana secara dinamik.
Berikut ialah kod untuk menjana sembilan gambar dalam susunan kocok:

var drawImage = function (url) {
  return new Promise(function (resolve, reject) {
    var img = new Image();
    img.onload = function () {
      resolve(img);
    };
    img.src = url;
  })
};

drawImage("2.jpg").then(function (img) {
  var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  var random = arr.sort(function() {return Math.random() > 0.5});
  [].forEach.call(document.querySelectorAll("canvas"), function (item, i) {
    item.width = $(".wrap").clientWidth / 3;
    item.height = $(".wrap").clientHeight / 3;
    item.style.order = random[i];
    var ctx = item.getContext("2d");
    ctx.drawImage(img, img.width * (i % 3) / 3, img.height * Math.floor(i / 3) / 3, img.width / 3, img.height / 3, 0, 0, item.width, item.height);
  });
});

Salin selepas log masuk

Kod kunci di atas ialah:

item.style.order = random[i];
Salin selepas log masuk

Dengan merombak susunan nombor dan memberikannya secara rawak kepada atribut susunan setiap elemen kanvas, penyemak imbas akan mengisih nombor tersebut secara automatik untuk anda.
Saya tidak akan membincangkan butiran lain tentang kod ini. Begini cara menukar kedudukan dua gambar. Ini sangat mudah:

var order1 = item.style.order;
var order2 = target.style.order;
Salin selepas log masuk

Anda hanya perlu menukar nilai atribut pesanan kedua-dua pihak.

Kod penuh

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
  <meta content="yes" name="apple-mobile-web-app-capable" />
  <meta content="black" name="apple-mobile-web-app-status-bar-style" />
  <meta content="telephone=no" name="format-detection" />
  <title></title>
  <style>
    html, body {
      height: 100%;
    }
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
    .wrap {
      display: flex;
      flex-wrap: wrap;
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
    .wrap canvas {
      width: 33.3333%;
      height: 33.3333%;
      border: 1px solid red;
      box-sizing: border-box;
    }
  </style>
</head>
<body>
<div class="wrap">
  <canvas data-value="1"></canvas>
  <canvas data-value="2"></canvas>
  <canvas data-value="3"></canvas>
  <canvas data-value="4"></canvas>
  <canvas data-value="5"></canvas>
  <canvas data-value="6"></canvas>
  <canvas data-value="7"></canvas>
  <canvas data-value="8"></canvas>
  <canvas data-value="9"></canvas>
</div>
<script>
  var $ = function (el) {
    return document.querySelector(el);
  };
  var touchMove, touchEnd;
  var drawImage = function (url) {
    return new Promise(function (resolve, reject) {
      var img = new Image();
      img.onload = function () {
        resolve(img);
      };
      img.src = url;
    })
  };
  drawImage("2.jpg").then(function (img) {
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var random = arr.sort(function() {return Math.random() > 0.5});
    [].forEach.call(document.querySelectorAll("canvas"), function (item, i) {
      item.width = $(".wrap").clientWidth / 3;
      item.height = $(".wrap").clientHeight / 3;
      item.style.order = random[i];
      var ctx = item.getContext("2d");
      ctx.drawImage(img, img.width * (i % 3) / 3, img.height * Math.floor(i / 3) / 3, img.width / 3, img.height / 3, 0, 0, item.width, item.height);
    });
  });
  document.addEventListener("touchstart", function (e) {
    var target = e.target;
    if (e.target.tagName.toLowerCase() !== "canvas") {
      return;
    }
    var ctx = target.getContext("2d");
    var image = ctx.getImageData(0, 0, target.width, target.height);
    var obj = target.cloneNode(true);
    obj.getContext("2d").putImageData(image, 0, 0);
    var top = target.getBoundingClientRect().top, left = target.getBoundingClientRect().left;
    obj.style.cssText = "position: absolute; top: " + top + "px; left: " + left + "px";
    document.body.appendChild(obj);
    var point = {"x": e.touches[0].pageX, "y": e.touches[0].pageY};
    document.addEventListener("touchmove", touchMove = function (e) {
      obj.style.cssText = "position: absolute; top:" + (e.touches[0].pageY - point.y + top) + "px; left: " + (e.touches[0].pageX - point.x + left) + "px";
    });
    document.addEventListener("touchend", touchEnd = function (e) {
      var pos = {"x": e.changedTouches[0].pageX, "y": e.changedTouches[0].pageY};
      [].forEach.call(document.querySelectorAll(".wrap canvas"), function (item, i) {
        var offset = item.getBoundingClientRect();
        if (pos.x > offset.left && pos.x < (offset.left + item.width) && pos.y > offset.top && pos.y < (offset.top + item.height)) {
          var order1 = item.style.order;
          var order2 = target.style.order;
          if (obj.parentNode) {
            document.body.removeChild(obj);
          }
          item.style.order = order2;
          target.style.order = order1;
        }
      });
      document.removeEventListener("touchmove", touchMove);
      document.removeEventListener("touchend", touchEnd);
    })
  })
</script>
</body>
</html>
Salin selepas log masuk

Apabila anda menguji, sebaiknya gunakan emulator Google atau telefon mudah alih untuk membukanya, kerana hanya acara sentuhan mudah alih yang disokong.

Hanya fungsi asas dilaksanakan dalam kod, dan fungsi lengkap tidak dilaksanakan.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kemahiran aplikasi fleksibel atribut kedudukan dalam H5 Kemahiran aplikasi fleksibel atribut kedudukan dalam H5 Dec 27, 2023 pm 01:05 PM

Bagaimana untuk menggunakan atribut kedudukan secara fleksibel dalam H5 Dalam pembangunan H5, kedudukan dan susun atur elemen sering terlibat. Pada masa ini, sifat kedudukan CSS akan mula dimainkan. Atribut kedudukan boleh mengawal kedudukan elemen pada halaman, termasuk kedudukan relatif, kedudukan mutlak, kedudukan tetap dan kedudukan melekit. Artikel ini akan memperkenalkan secara terperinci cara menggunakan atribut kedudukan secara fleksibel dalam pembangunan H5.

Petua pengoptimuman sifat reka letak CSS: kedudukan melekit dan flexbox Petua pengoptimuman sifat reka letak CSS: kedudukan melekit dan flexbox Oct 20, 2023 pm 03:15 PM

Petua pengoptimuman atribut reka letak CSS: positionsticky dan flexbox Dalam pembangunan web, reka letak adalah aspek yang sangat penting. Struktur susun atur yang baik boleh meningkatkan pengalaman pengguna dan menjadikan halaman lebih cantik dan mudah dinavigasi. Ciri reka letak CSS adalah kunci untuk mencapai matlamat ini. Dalam artikel ini, saya akan memperkenalkan dua teknik pengoptimuman sifat reka letak CSS yang biasa digunakan: positionsticky dan flexbox, dan memberikan contoh kod khusus. 1. jawatan

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur sama ketinggian, lebar sama, dan jarak yang sama Tutorial HTML: Cara menggunakan Flexbox untuk susun atur sama ketinggian, lebar sama, dan jarak yang sama Oct 27, 2023 pm 05:51 PM

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur sama tinggi, sama lebar, sama jarak Contoh kod khusus Pengenalan: Dalam reka bentuk web moden, reka letak adalah faktor yang sangat kritikal. Untuk halaman yang perlu memaparkan sejumlah besar kandungan, cara mengatur kedudukan dan saiz elemen secara munasabah untuk mencapai keterlihatan yang baik dan kemudahan penggunaan adalah isu penting. Flexbox (Tempat Letak Kotak Fleksibel) ialah alat yang sangat berkuasa di mana pelbagai keperluan susun atur fleksibel boleh direalisasikan dengan mudah. Artikel ini akan memperkenalkan Flexbox secara terperinci

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur ketinggian sama menegak Tutorial HTML: Cara menggunakan Flexbox untuk susun atur ketinggian sama menegak Oct 16, 2023 am 09:12 AM

Tutorial HTML: Cara Menggunakan Flexbox untuk Susun Atur Ketinggian Menegak Dalam pembangunan web, reka letak sentiasa menjadi isu penting. Terutama apabila perlu untuk melaksanakan susun atur ketinggian sama menegak, kaedah susun atur CSS tradisional sering menghadapi beberapa kesukaran. Masalah ini boleh diselesaikan dengan mudah menggunakan susun atur Flexbox. Tutorial ini akan memperkenalkan secara terperinci cara menggunakan Flexbox untuk susun atur ketinggian sama menegak dan memberikan contoh kod khusus. Flexbox ialah ciri baharu dalam CSS3 yang boleh digunakan untuk mencipta reka letak yang fleksibel dan responsif.

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur ketinggian sama suai Tutorial HTML: Cara menggunakan Flexbox untuk susun atur ketinggian sama suai Oct 21, 2023 am 10:00 AM

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur ketinggian sama suai, contoh kod khusus diperlukan Pengenalan: Dalam reka bentuk dan pembangunan web, melaksanakan susun atur ketinggian sama suai adalah keperluan biasa. Kaedah susun atur CSS tradisional sering menghadapi beberapa kesukaran apabila berurusan dengan susun atur ketinggian yang sama, dan susun atur Flexbox memberikan kami penyelesaian yang mudah dan berkuasa. Artikel ini akan memperkenalkan konsep asas dan penggunaan biasa susun atur Flexbox, dan memberikan contoh kod khusus untuk membantu pembaca menguasai penggunaan Flexbox dengan cepat untuk melaksanakan mereka sendiri

Tutorial HTML: Cara Menggunakan Flexbox untuk Reka Letak Teragih Sekata Tutorial HTML: Cara Menggunakan Flexbox untuk Reka Letak Teragih Sekata Oct 16, 2023 am 09:31 AM

Tutorial HTML: Cara Menggunakan Flexbox untuk Reka Letak Teragih Sekata Pengenalan: Dalam reka bentuk web, elemen susun atur selalunya diperlukan. Kaedah susun atur tradisional mempunyai beberapa had, dan Flexbox (susun atur kotak fleksibel) ialah kaedah susun atur yang boleh memberikan lebih fleksibiliti dan kuasa. Artikel ini akan memperkenalkan cara menggunakan Flexbox untuk mencapai reka letak pengedaran yang sekata dan memberikan contoh kod khusus. 1. Pengenalan kepada Flexbox Flexbox ialah model susun atur kotak fleksibel yang diperkenalkan dalam CSS3, yang membolehkan elemen untuk

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur penyesuaian boleh skala, sama tinggi, sama lebar, sama jarak Tutorial HTML: Cara menggunakan Flexbox untuk susun atur penyesuaian boleh skala, sama tinggi, sama lebar, sama jarak Oct 19, 2023 am 10:22 AM

Tutorial HTML: Cara menggunakan Flexbox untuk susun atur boleh berskala, sama tinggi, sama lebar, sama jarak susun atur model kotak. Ia adalah singkatan kepada FlexibleBox, yang bermaksud susun atur yang fleksibel. Susun atur Flexbox secara automatik boleh melaraskan kedudukan dan saiz elemen mengikut saiz bekas untuk mencapai pelbagai susunan fleksibel. 2. Cara menggunakan susun atur Flexbox untuk mencipta

Bagaimana untuk menggunakan teknologi flexbox CSS3 untuk mencapai pengedaran kandungan web yang sekata? Bagaimana untuk menggunakan teknologi flexbox CSS3 untuk mencapai pengedaran kandungan web yang sekata? Sep 11, 2023 am 11:33 AM

Bagaimana untuk menggunakan teknologi flexbox CSS3 untuk mencapai pengedaran kandungan web yang sekata? Dengan pembangunan reka bentuk web, orang ramai mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk susun atur halaman web. Untuk mencapai pengedaran kandungan web yang sekata, teknologi flexbox CSS3 telah menjadi penyelesaian yang sangat berkesan. Artikel ini akan memperkenalkan cara menggunakan teknologi flexbox untuk mencapai pengedaran kandungan web yang sekata, dan memberikan beberapa contoh praktikal. 1. Apakah teknologi flexbox (susun atur elastik) ialah ciri baharu yang ditambah dalam CSS3.

See all articles