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 = false в 'hover off'.
Можно ли это сделать?
Ответы
Ответ 1
Я бы рекомендовал установить интервал вместо рекурсии, потому что, предполагая, что окончательное решение не просто предупреждает, а делает что-то неблокирующее, рекурсия во время зависания может быстро вызвать зависание памяти и невосприимчивость.
Что-то вроде:
var hoverInterval;
function doStuff() {
// Set button 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);
}
);
});
Ответ 2
Я бы предложил переместить следующую часть за пределы функции $(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;
});
});