Is it possible to listen to a “style change” event?

前端 未结 11 1128
南笙
南笙 2020-11-22 08:03

Is it possible to create an event listener in jQuery that can be bound to any style changes? For example, if I want to \"do\" something when an element changes dimensions, o

11条回答
  •  长发绾君心
    2020-11-22 08:43

    I think the best answer if from Mike in the case you can't launch your event because is not from your code. But I get some errors when I used it. So I write a new answer for show you the code that I use.

    Extension

    // Extends functionality of ".css()"
    // This could be renamed if you'd like (i.e. "$.fn.cssWithListener = func ...")
    (function() {
        orig = $.fn.css;
        $.fn.css = function() {
            var result = orig.apply(this, arguments);
            $(this).trigger('stylechanged');
            return result;
        }
    })();
    

    Usage

    // Add listener
    $('element').on('stylechanged', function () {
        console.log('css changed');
    });
    
    // Perform change
    $('element').css('background', 'red');
    

    I got error because var ev = new $.Event('style'); Something like style was not defined in HtmlDiv.. I removed it, and I launch now $(this).trigger("stylechanged"). Another problem was that Mike didn't return the resulto of $(css, ..) then It can make problems in some cases. So I get the result and return it. Now works ^^ In every css change include from some libs that I can't modify and trigger an event.

提交回复
热议问题