클라이언트 측의 자바스크립트,창조의 여러 가지 요소이고 각각 표시 asap
-
18-09-2019 - |
문제
클라이언트 측면 javascript 코드를 만들 중 일부 요소(에 대한 50-100)에서 사이클:
for (var i = 0; i < list.length; i++) {
var obj = document.createElement("DIV");
obj.innerHTML = "<span class=\"itemId\">" + list[i].Id
+ "</span><!-- some more simple code --> ";
mainObj.appendChild(obj);
}
몇 가지 문제가 있으로 브라우저 렌더링을 수행합니다.예를 들어,IE 게임을 다운로드를 완료할 때까지 사이클,그리고 그 모든 요소에서 한다.는 방법이 있습을 보여 생성된 각각의 요소를 별도로 후 즉시 appendChild()
?
해결책
삽입하는 지연 사이에 추가 연속적인 항목으로, setTimeout()
.
function insertEntry(list, ix) {
if (ix == null) {
ix = 0;
}
else if (ix < list.length) {
var elt= document.createElement("DIV");
var attr = document.createAttribute('id');
attr.value = 'item'+ix;
elt.setAttributeNode(attr);
elt.innerHTML = "<span class='itemCls'>" + list[ix].Id + ': ' + list[ix].Name +
"</span><!-- some more simple code -->\n";
mainObj.appendChild(elt);
ix++;
}
if (ix < list.length) {
setTimeout(function(){insertEntry(list, ix);}, 20);
}
}
작:
insertEntry(myList);
는 myList 는 다음과 같습니다:
var myList = [
{ Id : '1938377', Name : 'Sven'},
{ Id : '1398737', Name : 'Walt'},
{ Id : '9137387', Name : 'Edie'}
...
};
demo: http://jsbin.com/ehogo/4
다른 팁
이것은 하나의 스레드 자연의 브라우저입니다.렌더링을 시작하지 않을 때까지 스레드가 유휴 상태입니다.이 경우에는,그것의 경우 루프가 완료되고 기능을 종료됩니다.는 유일한 방법이(정의)시뮬레이션하는 여러 쓰레드를 사용하여 타이머,이렇게:
var timer,
i = 0,
max = list.length;
timer = window.setInterval(function ()
{
if (i < max)
{
var obj = document.createElement("DIV");
obj.innerHTML = "<span class=\"itemId\">" + list[i].Id
+ "</span><!-- some more simple code --> ";
mainObj.appendChild(obj);
i++;
}
else
window.clearInterval(timer);
}, 1);
분명한 결점이 걸릴 것입니다 루을 완료하는 데 시간이 더 오래기 때문에 그것은 피팅의 연출 inbetween 각 반복.
나는 월드 그것을 같이 사용하는 jQuery 대신:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function() {
timer = window.setInterval(function ()
{
for (var i = 0; i < 100; i++) {
$('#container').append('<div>testing</div><br />');
}
},10);
});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
jQuery 래서 그것은,신속하게 당신이 필요하지 않습니다 귀찮게 보여주는 정도로 만들어진,그러나 당신이 그것을 만들 수 있고 부드럽게 추가하여 타이머로 보여줍니다.
있는 특별한 이유가 당신이 원하는 DOM 한 후 업데이트 모든 사이클?그것은 것이 많이 더 빨리 만드는 경우는 모든 요소 중 하나에서 javascript 요소를 추가 이 하나의 요소 DOM 때 사이클이 완료됩니다.
var holder = document.createElement("DIV");
for (var i = 0; i < list.Length; i++) {
var obj = document.createElement("DIV");
obj.innerHTML = "<span class=\"itemId\">" + list[i].Id
+ "</span><!-- some more simple code --> ";
holder.appendChild(obj);
}
mainObj.appendChild(holder);
제휴하지 않습니다 StackOverflow