JS

2013-05-23 22 views
7

'daki CSSStyleDeclaration nesnesinin değişikliklerini algıla. DomAttrModified gibi olayları izleyerek DOM değişiklikleri gibi bir CSSStyleDeclaration nesnesi değiştiğinde bildirim almanın bir yolu var mı?JS

örneğin

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

herhangi bir yolu yoktur

gibi bazı JS kodunun hiç Yukarıdaki kod parçacığını değiştirmeden bir JS işleyicisinde söz konusu değişiklikle ilgili bildirim almak oldu Yani orada olur?

Şimdiden teşekkürler!

+0

Bence, bir değişkene CSSText öğesindeki tutmak ve daha sonra karşılaştırabilirsiniz. Sorun çözmeyen –

+1

@Mr_Green, OP, CSS değiştiğinde ateşlenebilecek bir olay olup olmadığını soruyor. Tıpkı DOM Mutation olayı gibi. İlginç soru OP. –

+0

@Mr_Green büyük bir dizeyi yoklama tam olarak etkili değildir –

cevap

1

Bunun için doğal olarak mevcut bir şey olduğunu düşünmüyorum.

Kullanım durumunuza bağlı olarak, kolayca bir sarıcı oluşturabilir, böylece kodunuz sarmayı kullanır ve dinleyicilere bir şeylerin değiştiğini bildirir.

şey böyle oldukça temel:

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

böyle kullanabilirsiniz:

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 Bu, muhtemelen tüm tarayıcılarda, gece klüplerini göz ardı eden herhangi bir tarayıcıda çalışan tek yoldur. –