8

DomAttrModifiedなどのイベントを使用して追跡できる DOM の変更と同じように、 CSSStyleDeclarationオブジェクトが変更されたときに通知を受け取る方法はありますか?

たとえば、次のようなJSコードがあった場合

document.styleSheets[0].rules[0].style.backgroundImage = "url(myimage.png)";

上記のコード スニペットをまったく変更せずに、JS ハンドラーでその変更について通知を受ける方法はありますか?

前もって感謝します!

4

1 に答える 1

1

これにネイティブで利用できるものはないと思います。

ユース ケースに応じて、ラッパーを簡単に作成して、コードでラッパーを使用し、何かが変更されたことをリスナーに通知できます。

このような非常に基本的なもの:

function Wrapper() {
    var listeners = []

    return {
        addListener: function(fn) {
            listeners.push(fn)
        },
        removeListener: function(fn) {
            listeners.splice(listeners.indexOf(fn), 1) // indexOf needs shim in IE<9
        },
        set: function(prop, val) {
            prop = val
            // forEach needs shim in IE<9, or you could use a plain "for" loop
            listeners.forEach(call)

            function call(fn) {
                fn(prop, val)
            })
        }
    }
}

次のように使用できます。

var wrapper = Wrapper()
wrapper.addListener(function(prop, val) {
    // When you'll change a prop, it'll get there and you'll see
    // which property is changed to which value
})

// This sets the property and notifies all the listeners
wrapper.set(document.styleSheets[0].rules[0].style.backgroundImage, "url(myimage.png)")
于 2013-05-23T08:43:45.663 に答える