Trigger onmouseover event programmatically in JavaScript

前端 未结 8 693
庸人自扰
庸人自扰 2020-11-27 18:58

Is there a way to programmatically trigger the onmouseover event in plain JavaScript? or \"extract\" the method from the onmouseover event to call

8条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 19:20

    I had to revise my RefreshMouseEvents set of functions after more testing. Here is the seemingly perfected version (again only IE9 tested):

    function RefreshMouseEvents( ElementId ) 
    {
        FireEvent( ElementId, 'mouseover' );
        setTimeout( "TriggerMouseEvent( '" + ElementId + "', '" + event.clientX + "', '" + event.clientY + "' )", 1 );
    }
    
    function TriggerMouseEvent( ElementId, MouseXPos, MouseYPos )
    {
        if( IsMouseOver( ElementId, (1*MouseXPos), (1*MouseYPos) ) )
            FireEvent( ElementId, 'mouseover' );
        else    
            FireEvent( ElementId, 'mouseout' );
    }
    
    function IsMouseOver( ElementId, MouseXPos, MouseYPos )
    {
        if( document.getElementById(ElementId) != null )    
        {
            var Element = document.getElementById(ElementId);   
            var Left  = Element.getBoundingClientRect().left, 
                Top   = Element.getBoundingClientRect().top,
                Right = Element.getBoundingClientRect().right,
                Bottom  = Element.getBoundingClientRect().bottom;       
            return ( (MouseXPos >= Left) && (MouseXPos <= Right) && (MouseYPos >= Top) && (MouseYPos <= Bottom))    
        }
        else
            return false;
    }
    
    function FireEvent( ElementId, EventName )
    {
        if( document.getElementById(ElementId) != null )    
        {   
            if( document.getElementById( ElementId ).fireEvent ) 
            {
                document.getElementById( ElementId ).fireEvent( 'on' + EventName );     
            }
            else 
            {   
                var evObj = document.createEvent( 'Events' );
                evObj.initEvent( EventName, true, false );
                document.getElementById( ElementId ).dispatchEvent( evObj );
            }
        }
    }
    

提交回复
热议问题