Trigger mousemove event using Jquery or Javascript

前端 未结 3 1619
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-03 23:46

Hi I know we can trigger click event . but I want to know that can we trigger mousemove event without any actual mouse movement by user.

Description :

I want

相关标签:
3条回答
  • 2021-01-04 00:10
    let coordX = 0; // Moving from the left side of the screen
    let coordY = window.innerHeight / 2; // Moving in the center
    
    function move() {
        // Move step = 20 pixels
        coordX += 20;
        // Create new mouse event
        let ev = new MouseEvent("mousemove", {
            view: window,
            bubbles: true,
            cancelable: true,
            clientX: coordX,
            clientY: coordY
        });
    
        // Send event
        document.querySelector('Put your element here!').dispatchEvent(ev);
        // If the current position of the fake "mouse" is less than the width of the screen - let's move
        if (coordX < window.innerWidth) {
            setTimeout(() => {
                move();
            }, 10);
        }
    }
    
    // Starting to move
    move();
    
    0 讨论(0)
  • 2021-01-04 00:15

    Albeit it is probably possible to mimic such an event as shown in Andrii Verbytskyi's answer, most of the time, when you want to do it, it is because of an "X-Y problem".

    If we take OP's case for instance, here we absolutely don't need to trigger this mousemove event.

    Pseudo-code of current implementation :

    function mousemoveHandler(evt){
        do_something_with(evt.pageX, e.pageY);
    }
    element.addEventListener('mousemove', mousemoveHandler)
    
    function clickHandler(evt){
        do_something_else();
    }
    element.addEventListener('click', clickHandler);
    

    And what we want is to also call do_something_with in the click handler.

    So OP spends some time to find a way to trigger a fake mousemove, spends another amount of time trying to implement it, while all that is needed is to add a call to do_something_with in clickHandler.

    Both mousemove and click events have these pageX and pageY properties, so the event can be passed has is, but in other case, we could also just want to pass it with a fake object containing required properties.

    function mousemoveHandler(evt){
        do_something_with(evt.pageX, evt.pageY);
    }
    element.addEventListener('mousemove', mousemoveHandler)
    
    function clickHandler(evt){
        do_something_else();
        do_something_with(evt.pageX, evt.pageY);
    }
    element.addEventListener('click', clickHandler);
    // here we won't have pageX nor pageY properties
    function keydownHandler(evt){
        do_something_else();
        // create a fake object, which doesn't need to be an Event
        var fake_evt = {pageX: someValue, pageY: someValue};
        do_something_with(fake_evt.pageX, fake_evt.pageY);
    }
    element.addEventListener('keydown', keydownHandler);
    

    Note : you are mixing jQuery.on and element.addEventListener, so you might need to pass the originalEvent property of the jQuery event object.

    0 讨论(0)
  • 2021-01-04 00:21

    A good native approach is to use dispatchEvent method on EventTarget.

    It dispatches an Event at the specified EventTarget, invoking the affected EventListeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) also apply to events dispatched manually with dispatchEvent().

    Try

    // 1. Add an event listener first
    canvas.addEventListener('mousemove', tooltipDraw ,0);
    
    // 2. Trigger this event wherever you wish
    canvas.dispatchEvent(new Event('mousemove'));
    

    in your case it should trigger mousemove event on canvas element.

    (Triggering events in vanilla JavaScript article can be also useful):

    var elem = document.getElementById('elementId');
    
    elem.addEventListenter('mousemove', function() {
      // Mousemove event callback
    }, 0);
    
    var event = new Event('mousemove');  // (*)
    elem.dispatchEvent(event);
    
    // Line (*) is equivalent to:
    var event = new Event(
        'mousemove',
        { bubbles: false, cancelable: false });
    

    jQuery:

    Try this with jQuery trigger method:

     $('body').bind('mousemove',function(e){   
        // Mousemove event triggered!
    });
    $(function(){
        $('body').trigger('mousemove');
    });
    

    OR (if you need triggering with coords)

    event = $.Event('mousemove');
    
    // coordinates
    event.pageX = 100;
    event.pageY = 100; 
    
    // trigger event
    $(document).trigger(event);
    

    OR Try using .mousemove() jQuery method

    0 讨论(0)
提交回复
热议问题