亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動畫冒泡排序算法

動畫冒泡排序算法

慕森王 2021-10-29 16:27:21
我正在嘗試制作一個簡單的冒泡排序算法動畫。我有幾個里面有文字的 div:https : //codepen.io/menezesr08/pen/pozYMKG我的目標是交換 div 內的文本,因為算法正在執行交換。我最初的方法是獲取所有 div,遍歷它們并在進行交換時更改“innerHTML”。這個 html 更改發生得太快了,所以有沒有辦法減慢它的速度,使其看起來像動畫?<div class="box">  <p>8</p></div><div class="box">  <p>2</p></div><div class="box">  <p>10</p></div><div class="box">  <p>12</p></div>
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

如果您使用的是最新瀏覽器,您可以嘗試以下操作(自包含的 css 和 JS)。使用帶有 async/await 語法的 CSS 轉換和 promise。您可以直接在此處運行代碼片段。


<!DOCTYPE html>

<html>

  <head>

    <meta charset="UTF-8" />

    <meta

      name="viewport"

      content="width=

    

    , initial-scale=1.0"

    />

    <meta http-equiv="X-UA-Compatible" content="ie=edge" />

    <title>Document</title>

    <style>

      .box1 {

        height: 100px;

        width: 100px;

        background: red;

        display: inline-block;

        vertical-align: middle;

        transition: transform 1s linear;

      }


      p {

        text-align: center;

        color: yellow;

        font-size: 30px;

      }

    </style>

  </head>


  <body>

    <div class=" box1">

      <p>8</p>

    </div>

    <div class="box1">

      <p>2</p>

    </div>

    <div class="box1">

      <p>12</p>

    </div>

    <div class="box1">

      <p>10</p>

    </div>

    <div class="box1">

      <p>2</p>

    </div>

    <div class="box1">

      <p>1</p>

    </div>

    <script>

      var divs = document.getElementsByTagName("div");


      var firstNumberHTML = divs[0].getElementsByTagName("p");

      var maxNumberDiv = divs[0];

      var maxNumber = Number(firstNumberHTML[0].innerHTML);

      async function bubbleSort (){

         for (var i = 1; i < divs.length; i++) {

         let currentNumberHTML = divs[i].getElementsByTagName("p");

         let number = Number(currentNumberHTML[0].innerHTML);

         await new Promise(res => {

             setTimeout(() => res("delay"), 1000);

         })

        if (maxNumber > number) {

            const offset = divs[i].getBoundingClientRect().x -

            maxNumberDiv.getBoundingClientRect().x;

            let prevTranslateMaxDiv = maxNumberDiv.style.transform.replace("translateX","").replace("(","").replace(")", "").replace("px", ""); 

            prevTranslateMaxDiv = Number(prevTranslateMaxDiv) === NaN ? 0: Number(prevTranslateMaxDiv);

            maxNumberDiv.style.transform = `translateX(${prevTranslateMaxDiv + offset}px)`;

            divs[i].style.transform = `translateX(-${offset}px)`;

          } else {

            maxNumberDiv = divs[i];

            maxNumber = number;

          }      

      }

      }

      bubbleSort();

     

    </script>

  </body>

</html>


查看完整回答
反對 回復 2021-10-29
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號