jQuery - Как я могу продолжить анимацию, в то время как мышь нависает над элементом?

Мне нужен способ выполнить некоторую функцию 'whileonmouseover' для продолжения анимации в то время как верхние мячи мыши по элементу...

Например, учитывая эту функцию:

$(document).ready(function()
{
    function doAlert()
    {
        alert(1);
    }

    $('#button').hover(function()
    {
        doAlert();
    });
});

Предупреждение будет стрелять однажды как парения мыши по #button. Мне нужен способ продолжить иметь тот аварийный огонь, в то время как мышь остается по #button...

Я попытался делать некоторую функциональную рекурсию для продолжения предупреждения, пока триггер не установлен, заставив это остановиться:

$(document).ready(function()
{
    var doLoop = true;

    function doAlert()
    {
        if (!doLoop) return;

        alert(1);
        doAlert();
    }

    $('#button').hover(function()
    {
        doAlert();
    }, function()
    {
        doLoop = false;
    });
});

Но это перестало работать. Кажется, что функция полностью игнорирует 'doLoop = ложное' присвоение в 'парении прочь'.

Какой-либо способ выполнить это?

10
задан dave 25 February 2010 в 03:34
поделиться

2 ответа

Я бы рекомендовал установить интервал вместо рекурсии, потому что, предполагая, что окончательное решение не просто предупреждает, а делает что-то неблокирующее, рекурсивно при наведении курсора может быстро вызвать перегрузку памяти и отсутствие реакции.

Примерно так:

var hoverInterval;

function doStuff() {
    // Set button's background to a random color
    $("#button").css("background", "#" + Math.floor(Math.random() * 16777215).toString(16));
}

$(function() {
    $("#button").hover(
        function() {
            // call doStuff every 100 milliseconds
            hoverInterval = setInterval(doStuff, 100);
        },
        function() {
            // stop calling doStuff
            clearInterval(hoverInterval);
        }
    );
});
19
ответ дан 3 December 2019 в 19:32
поделиться

Я бы предложил вынести следующую часть за рамки функции $(document).ready():

var doLoop = true;

function doAlert()
{
    if (!doLoop) return;

    alert(1);
    doAlert();
}

Поэтому попробуйте вместо нее этот код:

var doLoop = true;

function doAlert()
{
    if (!doLoop) return;

    alert(1);
    doAlert();
}

$(document).ready(function()
{
    $('#button').hover(function()
    {
        doAlert();
    }, function()
    {
        doLoop = false;
    });
});
1
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: