1

画像フレームを切り替えてモーションを作成する JavaScript ウィジェットがあります。ウィジェットは、renderメソッドが呼び出されたときにこれらのフレームをフェッチし、 disposeメソッドが呼び出されたときにそれらへの参照を破棄します。

この実装は、PreloadJS ( http://www.createjs.com/#!/PreloadJS/documentation ) を使用して一連のフレームをロードし、現在のフレームを<canvas>にレンダリングするか、display:none と display を切り替えます。 :レガシー ブラウザのイメージ要素でブロックします。

IE8 は、dispose メソッドが呼び出されたときにこれらのフレームからメモリを解放したくないため、問題を引き起こしています。(注: これは、画像が DOM にある場合にのみ発生します。それ以外の場合は問題ありません。)

完全なソースはここにあります: http://pastie.org/8061442

201 行目で画像が DOM に追加されます。

    var i = 0, img, node = self.$node[0];

    for ( ; i < self.imageSet.length; i += 1 ) {

        img = self.queue._loadedResults[self.imageSet[i]]

        img.setAttribute("draggable", "false")

        img.style.display = "none"

        node.appendChild(img)

        img = null
    }

    i = node = null

このコード (およびここにある :251-259の付随する破棄コード) が削除された場合、画像は正しく破棄されます。問題があるのは、要素が DOM に追加されたときだけです。

dispose が失敗した後に render メソッドが呼び出されると、従来のStack verflow at line: 0エラーがスローされます。

アイデア/提案は非常に役に立ちます。ただし、提案する前にコードを確認してください。画像へのすべての参照が無効になり、画像ローダーのインスタンスも破棄されました。循環参照を作成する画像要素にイベント リスナーはありません。画像を解放する必要があることがわかります。

4

0 に答える 0