[Solved] Javascript dealy 1 second [closed]


Add a timeout. First create a variable to hold the timer at the top, like this:

var timeout = null;

Then update the display_menu parent to operate on a timeout (my comments in the code explain):

function display_menu(parent, named) {
    // First clear any existing timeout, if there is one
    if (timeout) clearTimeout(timeout);

    // Set a timeout to open the menu after 1 second
    timeout = setTimeout(function() {
        // As we open the menu, the timer went off, so clear the timeout variable
        timeout = null;

        //get the named menu
        var menu_element = document.getElementById(named);
        //override the 'display:none;' style attribute
        menu_element.style.display = "";
        //get the placement of the element that invoked the menu...
        var placement = findPos(parent);
        //...and put the menu there
        menu_element.style.left = placement[0] + "px";
        menu_element.style.top = placement[1] + "px";
    }, 1000);
}

Finally, the logic for hide_menu:

function hide_menu(named) {
    // If a timer is running to open a menu...
    if (timeout) {
        // Nothing has yet been opened, so just stop the timer
        clearTimeout(timeout);
        timeout = null;
    // If there isn't a timer running, it's because we displayed a menu; hide it here
    } else {
        //get the named menu
        var menu_element = document.getElementById(named);
        //hide it with a style attribute
        menu_element.style.display = "none";
    }
}

solved Javascript dealy 1 second [closed]