2013-05-23 11 views
7

Czy istnieje sposób uzyskania powiadomienia, gdy obiekt CSSStyleDeclaration zostanie zmieniony, podobnie jak zmiany DOM, które można śledzić za pomocą zdarzeń takich jak DomAttrModified?Wykrywanie zmian obiektu CSSStyleDeclaration w JS

Więc jeśli na przykład był jakiś kod JS jak

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

jest jakiś sposób, aby otrzymywać powiadomienia o tej zmianie modułu obsługi JS bez zmiany fragmentu kodu powyżej w ogóle?

Z góry dziękuję!

+0

myślę, że można zachować parametr CSSText w zmiennej i porównać je później. –

+1

@Mr_Green, który nie rozwiązuje problemu, OP pyta, czy istnieje zdarzenie, które może zaatakować, które zostanie wywołane po zmianie CSS. Podobnie jak wydarzenie DOM Mutation. Interesujące pytanie OP. –

+0

@Mr_Green sondowanie dużego ciągu nie jest dokładnie skuteczne –

Odpowiedz

1

Nie sądzę, że jest do tego dostęp natywnie.

W zależności od przypadku użycia można łatwo zbudować opakowanie, aby Twój kod korzystał z opakowania i powiadamiał słuchaczy, że coś się zmieniło.

Coś zupełnie podstawowy tak:

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) 
      }) 
     } 
    } 
} 

które można użyć tak:

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)") 
+0

+1 Jest to prawdopodobnie jedyny sposób, który działa we wszystkich przeglądarkach, nawet w przeglądarce bez względu na nocne kluby. –

Powiązane problemy