Bagaimana untuk membuat bar kemajuan dalam jadual data?
P粉422227023
2023-08-26 21:01:16
<p>Saya sedang mengusahakan jadual data yang mengandungi sejumlah besar data (5000). Untuk dapat memuatkan data yang sedang berjalan, saya menambah bar kemajuan yang menggambarkan jumlah data yang telah dimuatkan setiap unit masa. Tetapi kod di bawah tidak lagi berfungsi.</p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">biarkan handleProgressBar = (id, nilai, jumlah) => {
biarkan peratus = Math.round((nilai / jumlah) * 10000) / 100;
$(id + " > div").html(peratus + "%");
$(id + " > div").css('lebar', peratus + "%");
}
biarkan jadual = $('#data').DataTable();
ambil ('https://jsonplaceholder.typicode.com/photos')
.then((res) => res.json())
.then((res) => {
res.forEach(async(data, indeks)=>{
table.row.add([
data.id,
data.albumId,
data.title,
data.url
]);
handleProgressBar('#progress-bar', indeks+1, res.length);
tunggu Janji baharu(r => setTimeout(r, 1)); // tidur 1 ms
});
table.draw();
});</pre>
<pre class="brush:css;toolbar:false;">.progress-bar-striped {
limpahan: tersembunyi;
ketinggian: 20px;
jidar bawah: 20px;
warna latar belakang: #f5f5f5;
jejari sempadan: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
bayang-kotak: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar-striped>div {
imej latar belakang: kecerunan linear(45deg, rgba(255, 255, 255, 0.15) 25%, lutsinar 25%, lutsinar 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, telus 75%, telus);
saiz latar belakang: 40px 40px;
terapung: kiri;
lebar: 0%;
ketinggian: 100%;
saiz fon: 12px;
ketinggian garis: 20px;
warna: #000000;
font-weight: tebal;
text-align: tengah;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
bayang-kotak: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
/*-webkit-transition: lebar 3s mudah;
-moz-transition: lebar 3s mudah;
-o-peralihan: lebar 3s mudah;
peralihan: lebar 3s mudah;*/
animasi: progress-bar-stripes 2s linear infinite;
warna latar belakang: #288ade;
}
.progress-bar-belang p {
margin: 0;
}
@keyframes progress-bar-stripes {
0% {
kedudukan latar belakang: 40px 0;
}
100% {
kedudukan latar belakang: 0 0;
}
}</pra>
<pre class="brush:html;toolbar:false;"><link href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css" rel=" lembaran gaya"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>
<div id="progress-bar" class="progress-bar-striped">
<div style="width: 0%;">
<p>0%</p>
</div>
</div>
<table id="data" class="table display table-stripped">
<kepala>
<tr>
<th>ID</th>
<th>ID Album</th>
<th>Tajuk</th>
<th>Foto URL</th>
</tr>
</kepala>
<tbody></tbody>
</table></pre>
<p><br /></p>
<p>Jadual berjaya dimuatkan, tetapi bar kemajuan menunjukkan <kod>100%</kod> kod>. Saya tertanya-tanya sama ada ia akan berfungsi (<em>tetapi tidak sempurna</em>) jika saya tidak menggunakan jadual data, seperti yang ditunjukkan dalam kod di bawah.</p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">biarkan handleProgressBar = (id, nilai, jumlah) => {
biarkan peratus = Math.round((nilai / jumlah) * 10000) / 100;
$(id + " > div").html(peratus + "%");
$(id + " > div").css('lebar', peratus + "%");
}
(async() =>{
biarkan n = 5000;
handleProgressBar('#progress-bar', 0, n);
untuk(biar i = 1; i <= n; i++) {
handleProgressBar('#progress-bar', i, n);
tunggu Janji baharu(r => setTimeout(r, 1)); // tidur 1 ms
}
})();</pra>
<pre class="brush:css;toolbar:false;">.progress-bar-striped {
limpahan: tersembunyi;
ketinggian: 20px;
jidar bawah: 20px;
warna latar belakang: #f5f5f5;
jejari sempadan: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
bayang-kotak: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar-striped>div {
imej latar belakang: kecerunan linear(45deg, rgba(255, 255, 255, 0.15) 25%, lutsinar 25%, lutsinar 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, telus 75%, telus);
saiz latar belakang: 40px 40px;
terapung: kiri;
lebar: 0%;
ketinggian: 100%;
saiz fon: 12px;
ketinggian garis: 20px;
warna: #000000;
font-weight: tebal;
text-align: tengah;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
bayang-kotak: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
/*-webkit-transition: lebar 3s mudah;
-moz-transition: lebar 3s mudah;
-o-peralihan: lebar 3s mudah;
peralihan: lebar 3s mudah;*/
animasi: progress-bar-stripes 2s linear infinite;
warna latar belakang: #288ade;
}
.progress-bar-belang p {
margin: 0;
}
@keyframes progress-bar-stripes {
0% {
kedudukan latar belakang: 40px 0;
}
100% {
kedudukan latar belakang: 0 0;
}
}</pre>
<pre class="brush:html;toolbar:false;"><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> ;</skrip>
<div id="progress-bar" class="progress-bar-striped">
<div style="width: 0%;">
<p>0%</p>
</div>
</div></pre>
<p><br /></p>
<p>我不知道错误出在哪里。谁能为我提供处理大量数据的数据表进度松的家。</p>
Saya dah jumpa penyelesaiannya. Kesilapannya ialah saya menyediakan pembolehubah
async
一词放在res.forEach
中。当我将其放在fetch.then
之后并使用for
循环而不是forEach
时,函数执行的行为发生了变化并且可以成功完成。loadNumber
untuk menentukan jumlah data yang akan diplotkan dalam jadual data bagi setiap unit masa.