我正在尝试将我的应用程序的上部面板默认为top
属性为-80px
,因此除了它的一小部分外,它是不可见的。当用户将鼠标悬停在该部分上时,它会再次向下滑动。
问题是,这个div有一个textbox
,我希望div在用户输入textbox
时停止向上滑动,即使他将鼠标指针移开,但不幸的是知道怎么做,这是我的代码:
的index.html
<div id="taskInput">
<div id="controllers">
<input type="text" name="mainTask" id="mainTask">
<button id="addMain">Add</button>
<button id="resetMain">Reset</button>
</div>
</div>
此部分的CSS:
#taskInput {
background: red;
width:606px;
height:43px;
padding: 22px;
box-shadow: 0px 3px 4px -3px black;
position: absolute;
z-index : 0;
top:0px;
}
的script.js
$(function(){
$("#taskInput").delay(400).animate({top:-80}, 500,function(){});
$("#taskInput").mouseover(
function(){
$(this).stop().animate({top:0}, 200, function(){});
});
$("#taskInput").mouseout(function(evt){
$(this).stop().animate({top:-80}, 200, function(){});
})
$("#mainTask").focus(function(){
//i though i can put something here to stop mouseout event or something
})
})
答案 0 :(得分:2)
我已经从评论中改变了主意,没有必要取消绑定事件或使用全局变量来跟踪它。您可以使用document.activeElement
获取页面上当前关注的元素,并将其ID与<input>
的ID进行比较,如下所示:
$("#taskInput").mouseout(function(evt){
if(document.activeElement.id !== 'mainTask') {
$(this).stop().animate({top:-80}, 200, function(){});
}
});
答案 1 :(得分:1)
将动画添加到顶部并在焦点功能中更改它
我没有测试过这个,但它应该可行
$(function(){
writing = false;
$("#taskInput").delay(400).animate({top:-80}, 500,function(){});
$("#taskInput").mouseover(
function(){
$(this).stop().animate({top:0}, 200, function(){});
});
$("#taskInput").mouseout(function(evt){
if(writing == false){
$(this).stop().animate({top:-80}, 200, function(){});
}
})
$("#mainTask").focus(function(){
//i though i can put something here to stop mouseout event or something
writing = true
})
$("#mainTask").focusout(function(){
//i though i can put something here to stop mouseout event or something
writing = false
})
})
答案 2 :(得分:1)
最简单的方法是将#mainTask的data-focus
属性设置为true,然后在#taskInput上执行mouseout
时,确保在为幻灯片设置动画之前将其设置为False。
$(function(){
// ... code
$("#taskInput").mouseout(function(evt){
console.log($('#mainTask').data('focus'));
if ($('#mainTask').data('focus') === false) {
$(this).stop().animate({top:-80}, 200, function(){});
}
})
$("#mainTask").on({
focus: function(){
$(this).data('focus', true);
},
blur: function () {
$(this).data('focus', false);
}
});
})
答案 3 :(得分:1)
我想,你也可以尝试一下:
$('#taskInput').delay(400).animate({top:-80},500);
$('#taskInput').mouseover(function()
{
$(this).stop().animate({top:0},200);
});
$('#taskInput').mouseout(function()
{
if(!$('#mainTask').is(':focus'))
{
$(this).stop().animate({top:-80},200);
}
});
<强> DEMO 强>
您也可以将其添加到您的代码中:
$('#mainTask').blur(function()
{
$('#taskInput').stop().animate({top:-80},200);
});
<强> DEMO 2 强>
答案 4 :(得分:0)
在$(“#mainTask”)。焦点事件处理程序中,您可以将全局布尔变量设置为true,在blur事件处理程序中将其设置为false,并在#taskInput mouseout事件处理程序中检查该变量的值
var preventSlide = false;
$("#taskInput").mouseout(function(evt){
if (!preventSlide) {
$(this).stop().animate({top:-80}, 200, function(){});
}
})
$("#mainTask").focus(function(){
preventSlide = true;
})
$("#mainTask").blur(function(){
preventSlide = false;
})
答案 5 :(得分:0)
$(function(){
var flag=true;
$("#taskInput").on('mouseenter mouseleave', function(e) {
if (flag) $(this).stop().animate({top: e.type=='mouseenter'?0:-80}, 200);
}).delay(400).animate({top:-80}, 500);
$("#mainTask").on('blur focus', function(e) {
flag=e.type=='blur';
});
});