Set style change event listener in Javascript

泄露秘密 提交于 2020-01-11 13:59:07

问题


My div looks something like this:

<div tabindex="0" role="button" id="profile-pic" style="background-image: "Some url";"></div>

The background image will be updated based on some criteria. I want to set listener to the style property and listen to background image change. Is it possible?


回答1:


You can use MutationObserver

Then code example:

var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutationRecord) {
    console.log('style changed!');
   });    
 });

 var target = document.getElementById('myId');
  observer.observe(target, { attributes : true, attributeFilter : ['style'] });

Note: this only works with inline styles(any changing of styles), not when the style changes as a consequence of class change or @media change This is a answer https://stackoverflow.com/a/20683311/3344953




回答2:


It's possible with MutationObserver, but it's a somewhat odd thing to do:

console.log('Script start');
const div = document.querySelector('div');

const o = new MutationObserver(() => {
  console.log('style changed');
});
o.observe(div, { attributes: true, attributeFilter: ["style"] });

setTimeout(() => {
  div.style.backgroundImage = 'url(https://www.gravatar.com/avatar/34932d3e923ffad9a4a1423e30b1d9fc?s=48&d=identicon&r=PG&f=1)';
}, 500);
<div tabindex="0" role="button" id="profile-pic" style="background-image: 'Some url';">xx</div>

It would make a lot more sense for the function that makes the style change to call other functions that need to know that the change happened.



来源:https://stackoverflow.com/questions/55590763/set-style-change-event-listener-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!