如何在 JavaScript 中创建实时更改
How to create real-time changes in JavaScript
所以我写了一个非常基本的代码。我是一个真正的菜鸟。 JavaScript 3 天前开始。我希望在排序过程中可视化排序过程。但是当排序按钮在一段时间后被点击时,排序的数组就会显示出来。但我想要的是实时显示数组发生的变化。
请帮帮我。
var array = [];
container_content= "";
for (var i=0; i < 50; i++) {
array.push(Math.random() *500)
}
container_content = "";
function myFunction(element) {
container_content += '<div class="array-bar"></div>';
}
array.forEach(myFunction);
$(".container").html(container_content);
function another(element, index){
element.style.height = array[index]
}
$( "div" ).each( function( index, element ){
$( this ).css('height', array[index]);
});
$('button').click(function(){
var i, j, temp;
for(i = 0; i < array.length; i++)
{
for(j = 0; j < array.length-1; j++)
{
if( array[j] > array[j+1])
{
// swap the elements
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
$( "div" ).each( function( index, element ){
$( this ).css('height', array[index]);
});
}
})
我把你想做的事情分解成 4 个基本函数(1 个主要函数和 3 个辅助函数)。
runSort
是使用所有其他辅助函数完成所有操作的主要函数。
makeArrayAndUnsyncedBars
生成随机数组和基本 div,您将用作绿色 "bars",但它不会根据数组中的值设置这些 div 的高度。
syncArrayToBars
根据数组
中的值设置这些"bar"个div的高度
sortUntilNextSwap
对数组进行排序,直到发生交换或排序完成。此函数 returns false
如果它进行了交换(意味着它仍在通过数组工作)或 true
否则。
var FRAMES_PER_SECOND = 50;
var sortInterval = null;
function runSort() {
clearInterval(sortInterval);
makeArrayAndUnsyncedBars(50);
syncArrayToBars();
sortInterval = setInterval(function() {
var finishedSorting = sortUntilNextSwap();
syncArrayToBars();
if (finishedSorting) clearInterval(sortInterval);
}, Math.round(1000 / FRAMES_PER_SECOND));
}
var array = [];
function makeArrayAndUnsyncedBars(numberOfValues) {
var htmlToAdd = "";
array = [];
for (var i = 0; i < numberOfValues; i++) {
htmlToAdd += "<div class=\"bar\"></div>";
array.push(rando(150));
}
$("#bars").html(htmlToAdd);
}
function syncArrayToBars() {
for (var i = 0; i < array.length; i++) $(".bar").eq(i).css({
height: array[i] + "px"
});
}
var i, j, temp;
function sortUntilNextSwap() {
for (i = 0; i < array.length; i++) {
for (j = 0; j < array.length - 1; j++) {
if (array[j] > array[j + 1]) {
// swap the elements
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
return false;
}
}
}
return true;
}
.bar {
width: 5px;
background: #5aedab;
border-radius: 3px;
display: inline-block;
margin: 0px 3px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://randojs.com/1.0.0.js"></script>
<div id="bars"></div>
<button onclick="runSort();">Run sort</button>
编辑: 我应该提到我出于习惯使用 rando.js 作为随机性,但鉴于您使用 Math.random()
这里并不是非常必要反正很少。随你喜欢取出还是留在里面。
所以我写了一个非常基本的代码。我是一个真正的菜鸟。 JavaScript 3 天前开始。我希望在排序过程中可视化排序过程。但是当排序按钮在一段时间后被点击时,排序的数组就会显示出来。但我想要的是实时显示数组发生的变化。 请帮帮我。
var array = [];
container_content= "";
for (var i=0; i < 50; i++) {
array.push(Math.random() *500)
}
container_content = "";
function myFunction(element) {
container_content += '<div class="array-bar"></div>';
}
array.forEach(myFunction);
$(".container").html(container_content);
function another(element, index){
element.style.height = array[index]
}
$( "div" ).each( function( index, element ){
$( this ).css('height', array[index]);
});
$('button').click(function(){
var i, j, temp;
for(i = 0; i < array.length; i++)
{
for(j = 0; j < array.length-1; j++)
{
if( array[j] > array[j+1])
{
// swap the elements
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
$( "div" ).each( function( index, element ){
$( this ).css('height', array[index]);
});
}
})
我把你想做的事情分解成 4 个基本函数(1 个主要函数和 3 个辅助函数)。
runSort
是使用所有其他辅助函数完成所有操作的主要函数。
makeArrayAndUnsyncedBars
生成随机数组和基本 div,您将用作绿色 "bars",但它不会根据数组中的值设置这些 div 的高度。
syncArrayToBars
根据数组
sortUntilNextSwap
对数组进行排序,直到发生交换或排序完成。此函数 returns false
如果它进行了交换(意味着它仍在通过数组工作)或 true
否则。
var FRAMES_PER_SECOND = 50;
var sortInterval = null;
function runSort() {
clearInterval(sortInterval);
makeArrayAndUnsyncedBars(50);
syncArrayToBars();
sortInterval = setInterval(function() {
var finishedSorting = sortUntilNextSwap();
syncArrayToBars();
if (finishedSorting) clearInterval(sortInterval);
}, Math.round(1000 / FRAMES_PER_SECOND));
}
var array = [];
function makeArrayAndUnsyncedBars(numberOfValues) {
var htmlToAdd = "";
array = [];
for (var i = 0; i < numberOfValues; i++) {
htmlToAdd += "<div class=\"bar\"></div>";
array.push(rando(150));
}
$("#bars").html(htmlToAdd);
}
function syncArrayToBars() {
for (var i = 0; i < array.length; i++) $(".bar").eq(i).css({
height: array[i] + "px"
});
}
var i, j, temp;
function sortUntilNextSwap() {
for (i = 0; i < array.length; i++) {
for (j = 0; j < array.length - 1; j++) {
if (array[j] > array[j + 1]) {
// swap the elements
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
return false;
}
}
}
return true;
}
.bar {
width: 5px;
background: #5aedab;
border-radius: 3px;
display: inline-block;
margin: 0px 3px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://randojs.com/1.0.0.js"></script>
<div id="bars"></div>
<button onclick="runSort();">Run sort</button>
编辑: 我应该提到我出于习惯使用 rando.js 作为随机性,但鉴于您使用 Math.random()
这里并不是非常必要反正很少。随你喜欢取出还是留在里面。