私はあなたが複数のrequestAnimationFrameループを開始していると思います。例
let numLoops = 0;
const countElem = document.querySelector("#count");
const stats = new Stats();
document.body.appendChild(stats.domElement);
function loop() {
stats.update();
requestAnimationFrame(loop);
}
function startLoop() {
++numLoops;
countElem.textContent = numLoops;
requestAnimationFrame(loop);
}
startLoop();
document.querySelector("button").addEventListener('click', startLoop);
<script src="https://cdnjs.cloudflare.com/ajax/libs/stats.js/r16/Stats.min.js"></script>
<button>Click to add another requestAnimationFrame loop</button>
<div>Num Loops Running: <span id="count"></span></div>
のために私が編集私の例を作った後、http://webglfundamentals.orgにrunable方法は、BLOBを使用してiframe内の例を実行するために
です。ユーザーが「更新」を選択するたびに、編集したソースで新しいBLOBを生成し、そのBLOBの新しいURLにiframeを設定します。これは、例が完全にリロードされ、古いコード/ループ/イベント/ webglコンテキストなどがブラウザによって破棄されることを意味します。
あなたはactual code for getSourceBlob
を見て、あなたはそれが少しより多くの仕事をして表示されますが、それは、上記の基本的なら効果的
function runLastVersionOfUsersCode() {
var url = getSourceBlob(usersEditedHtml);
someIFrameElement.src = url;
}
var blobUrl;
function getSourceBlob(options, htmlForIFrame) {
// if we already did this discard the old one otherwise
// it will stick around wasting memory
if (blobUrl) {
URL.revokeObjectURL(blobUrl);
}
var blob = new Blob([htmlForIFrame], {type: 'text/html'});
blobUrl = URL.createObjectURL(blob);
return blobUrl;
}
あるthe code hereを見ることができます。
説明した問題をChromeバージョン55.0.2883.95(64ビット)に複製できませんでした。 – Radio