#javascript #jquery #html #css
#javascript #jquery #HTML #css
Вопрос:
Я должен скрывать текстовое поле, только если пользователь зависает> 2 секунд.
<div id="content">
<input type="text" id="txt1" />
</div>
$('#content').on('mouseleave', function(){
$('#txt1').delay(2000).hide();
});
Это будет ждать 2 секунды, прежде чем скрыть текстовое поле. Но если пользователь вернется в течение 2 секунд, он все равно скроется. Как предотвратить это?
Комментарии:
1. В вашем примере, когда пользователь покидает ввод, он скрывается через 2 секунды. Ты этого хочешь?
2. Если пользователь возвращается в течение 2 секунд, то он не должен скрываться.
3. Внимание всем, уже есть 5 ответов
setTimeout
; пожалуйста, прекратите отвечать на этоsetTimeout
.
Ответ №1:
Используйте setTimeout/clearTimeout
вместо:
var clr;
$('#content').on('mouseleave', function () {
clr = setTimeout(function () {
$('#txt1').hide();
}, 2000)
}).on('mouseenter', function () {
clearTimeout(clr)
})
Также обратите внимание, что задержка в вашем примере вообще не будет работать, поскольку .метод delay() задерживает выполнение функций, которые следуют за ним в стандартной очереди эффектов или в пользовательской очереди. Это не задержит формы без аргументов .show() или .hide(), которые не используют очередь эффектов.
Ответ №2:
Используйте старую добрую моду setTimeout и clearTimeout
var leaveTimeout;
$('#content').on('mouseleave', function() {
leaveTimeout = setTimeout(function() {
$('#txt1').hide();
}, 2000);
})
.on('mouseenter', function() {
clearTimeout(leaveTimeout);
});
Ответ №3:
Как насчет более простого решения CSS: http://jsfiddle.net/2Jtrb/2 /.
HTML:
<div id="content">
<input type="text" id="txt1" />
</div>
CSS:
div {
outline: 1px dotted #000;
}
div > input {
visibility: hidden;
-webkit-transition: visibility 2s;
transition: visibility 2s;
}
РЕДАКТИРОВАТЬ: ввод также останется видимым, если он сфокусирован.
div:hover > input, input:focus {
visibility: visible;
transition-duration: 0s;
}
Ответ №4:
Попробуйте это…
var theTimer;
$('#content').on('mouseleave', function(){
theTimer = setTimeout(function() {
$('#txt1').hide();
}, 2000);
});
$('#content').on('mouseenter', function(){
clearTimeout(theTimer);
});
Ответ №5:
Если вы используете setTimeout
, вы можете отменить тайм-аут, если пользователь снова войдет в текстовую область. Этот код выглядит примерно так:
var timeoutHandle;
$('#content').on('mouseleave', function(){
timeoutHandle = setTimout(
function () {
timeoutHandle = undefined;
$('#txt1').hide();
}, 2000);
});
$('#content').on('mouseenter', function(){
if (timeoutHandle) clearTimeout(timeoutHandle);
});
Кстати, это похоже на то, что предоставляют другие плагины, поэтому вы можете рассмотреть возможность просмотра плагина hover intent здесь: http://cherne.net/brian/resources/jquery.hoverIntent.html .
Ответ №6:
Вы можете попробовать это:-
var typingTimer;
$('#content').on('mouseleave', function(){
typingTimer = setTimeout(function(){
$('#txt1').hide();
},2000);
});
$('#content').on('mouseenter', function(){
clearTimeout(typingTimer);
});
Ответ №7:
Используйте функцию setTimeout.
var timeout = null;
$('#content').on('mouseleave', function() {
timeout = setTimeout(function() { $('#text1').hide();
});
Затем, когда пользователь вводит div, снимите тайм-аут.
$('#content').on('mouseenter', function() {
clearTimeout(timeout);
});
Я написал это, ничего не просматривая, так что, надеюсь, я ничего не перепутал 😉