рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдирд╛ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛

рдкрд╛рдардХреЛрдВ рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ, рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдлреЙрд░реНрдо рдХреЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдП рдЧрдП рддрддреНрд╡ рдЕрдм рдЖрдзреБрдирд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдореЗрдВ рдордЬрдмреВрддреА рд╕реЗ рдЙрд▓рдЭ рдЧрдП рд╣реИрдВ рдФрд░ рдЬреЛ рдХреЛрдИ рднреА рдХреБрдЫ рднреА рдХрд╣рддрд╛ рд╣реИ, рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред
рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреБрдиреЗ рд╣реБрдП рдФрд░ рдЕрдиреНрдп рдЕрдЪреНрдЫреЗ рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдЧрд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкреНрд▓рдЧрдЗрди рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред
рдореИрдВ рдПрдХ рд╕рдорд░реНрдердХ рд╣реВрдВ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдореВрд▓ рд╢реИрд▓реА рдореЗрдВ рдлреЙрд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдкреНрд▓рдЧрдЗрди рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рд╣реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рджреЗрдЦ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдЬрдм рдХрд┐рд╕реА рднреА рдкреНрд▓рдЧ-рдЗрди рдХреЗ DOM рддрддреНрд╡реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП (рдЗрд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЕрд░реНрдерд╛рддреН рдЕрдХреНрд╖рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг ( рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо, рдЕрдзрд┐рдХрддрдо ), рд╣рдореЗрд╢рд╛ рдЦрд╛рддреЗ рдХреЗ рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдерд╛, рддрддреНрд╡ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣, рдФрд░ рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдк рдкреНрд▓рдЧрдЗрди рдпрд╛ рд▓реЗрдЖрдЙрдЯ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╕реЛрдЪреЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рд╣реИред


рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ - "рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдореЗрдВ рддрддреНрд╡ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрдХрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?" ios рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб ( jsFiddle ) рд╣реИ

var MO = (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver); var observer = new MO(function(){ console.log("disabled changed") }); observer.observe(document.querySelector("id"), { attributes: true, attributeFilter: ["disabled"] }); 

рдпрд╣ рдХреЗрд╡рд▓ IE рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИ ... рдкрд╣рд▓реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, DOMAttrModified рд╣реИ , рд╕рд╛рде рд╣реА рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП рднреА ред
рдмреЗрд╢рдХ, рд╡реЗ рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ: рдПрдХ zadizeyblenny рддрддреНрд╡ рдкрд░ рдШрдЯрдирд╛рдПрдВ рдирд╣реАрдВ рдлреЗрдВрдХрддреА рд╣реИрдВред рдпрд╣рд╛рдВ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ: рдЬрдм рдЖрдк рдЕрдХреНрд╖рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХреНрд╖рдкрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдк рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдЯрд╛рддреЗ рд╕рдордп, рд╡реЗ рдЪреБрдкрдЪрд╛рдк рд░реЛрд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрдЧ рдХрд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реИ рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЛ рдХрд╛рдЯ рджреЗрдирд╛ рдмреБрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рдиреА рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ ( jsFiddle )

 var AttributeObserver = function(element, callback, attribute){ var MO = (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver); if (MO) { var observer = new MO(callback); observer.observe(element, { attributes: true, attributeFilter: [attribute] }); } else { if (!AttributeObserver.__timer) { AttributeObserver.__observed = [] AttributeObserver.__timer = setInterval(function(){ for (var i = 0; i < AttributeObserver.__observed.length; i++) { var o = AttributeObserver.__observed[i]; if (o.element.hasAttribute(o.attribute) !== o.flag) { callback() } o.flag = o.element.hasAttribute(o.attribute) } }, 500) AttributeObserver.__observed.push({ element: element, attribute: attribute, flag: element.hasAttribute(attribute) }) } } } 

рд╕реЗрдЯ рдЗрдиреНрдЯрд░рд╡рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рдЖрдХреНрд░реЛрд╢ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реБрдП рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ: рдирд╣реАрдВ, рдпрд╣ рд╣реИрдХ рдирд╣реАрдВ рд╣реИ, рд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд╛рд▓ рднрд╛рд╖рд╛ рдХрд╛ рдХрд╛рдлреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЕрд░рд╛рдЬрдХрддрд╛ рдФрд░ рдмреНрд░реЗрдХ рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЙрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ 500-1000ms рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдЖрдк рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рдкреГрд╖реНрда рдкрд░ 10-20 рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рднрд▓реЗ рд╣реА 100 рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ - рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рд╛рде рд╣реА, рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рдЧрддрд┐, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд╕реНрдЯрдо рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдВрдЬ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдорд┐рдирдЯ, рдЕрдзрд┐рдХрддрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдпрджрд┐ рдЖрдк рджреЗрд╢реА рд░реЗрдВрдЬ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдордмреИрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдФрд░ рдЗрд╕рд╕реЗ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдЖрдк рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЙрдард╛рддрд╛ рд╣реИред рдореИрдВ рдЕрдм рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╣рдо рдЕрдХреНрд╖рдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди ( jsFiddle ) рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 var AttributeObserver = function(element, callback, attribute){ var MO = (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver); if (MO) { var observer = new MO(callback); observer.observe(element, { attributes: true, attributeFilter: [attribute] }); } else if (element.addEventListener) { element.addEventListener('DOMAttrModified', function(e){ if (e.attrName == attribute) { callback() } }, false); } else if ("onpropertychange" in document) { element.attachEvent ('onpropertychange', function(e){ if (e.attrName == attribute) { callback() } }); } } 

рдкреБрдирд╢реНрдЪ рдореИрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдПрдХ рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрди рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрднрд╡ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In218529/


All Articles