Move active element loses mouseout event in Internet Explorer

后端 未结 4 899
小蘑菇
小蘑菇 2020-12-10 03:31

In a library I am using I have the task of moving an element to the front of the dom when it is hovered over. (I make it bigger so I need to see it, then shrink it back when

4条回答
  •  误落风尘
    2020-12-10 04:37

    I modified @galambalazs' answer because I found that it failed if I hovered really quickly over the li elements, as some of the elements would still retain the mouseover effect.

    I came up with a solution that removes the hover state on elements that failed to trigger the mouseover event by pushing these elements to a stack whenever the mouseover even is triggered. Anytime either the mouseover or mouseout event is called, I pop the elements from this array and remove the styles placed on it:

    $(function(){
    
        // Track any hovered elements
        window.hovered = [];
    
        $("li").mouseover(function() {
            // make sure that these actions happen only once
            if ( $(this).css("border-color") != "red" ) {
                resetHovered ();  // Reset any previous hovered elements
                $(this).css("border-color","red");
                this.parentNode.appendChild(this);
                hovered.push(this);
            }
        });
    
        $("li").mouseout(function(){
            resetHovered();  // Reset any previous hovered elements
        });
    
        // Reset any elements on the stack
        function resetHovered () {
            while ( hovered.length > 0 ) {
                var elem = hovered.pop();
                $(elem).css("border-color","black");
            }
        }
    });
    

    I've tested this solution with IE 11. A functional example can be found here.

提交回复
热议问题