我有一个广播网站,当鼠标移动时我需要隐藏菜单,并在鼠标移动时显示它。 它的工作几乎完美,除了一个错误 - 菜单只在第二次隐藏,如果我将它悬停。
var timedelay = 1;
var _delay = setInterval(delayCheck, 500);
$('.parent').on('mousemove', showAllEvent);
function delayCheck() {
if (timedelay == 3) {
$('.hide').fadeOut();
timedelay = 1;
}
timedelay = timedelay + 1;
}
function showAllEvent() {
$('.hide').fadeIn();
timedelay = 1;
clearInterval(_delay);
_delay = setInterval(delayCheck, 500);
}
.hide {
height: 100px;
width: 100px;
border: 1px solid red;
color: black;
}
.parent {
width: 100%;
height: 100vh;
border: 1px solid red;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<div class='parent'>
if you hover me ".hide" is disappearing
<div class='hide'>if you hover me i'm hide on second time</div>
</div>
答案 0 :(得分:1)
所以这是一种解决方案,感觉就像我用restrict
概念实现的黑客,因为你需要在显示时点击菜单。因此,在mousemove上添加一个类pointer-events:none
,它启用单击并将菜单div的show
设置为1,当鼠标仍然时,div的不透明度设置为0,指针事件设置为none。
我使用了css的opacity
属性而不是jquery的transition
和fadeIn
方法。
fadeOut
var timedelay = 1;
var _delay = setInterval(delayCheck, 500);
$('.parent').on('mousemove', showAllEvent);
function delayCheck() {
if (timedelay == 3) {
$('.hide').removeClass('show');
timedelay = 1;
}
timedelay = timedelay + 1;
}
function showAllEvent() {
$('.hide').addClass('show');
timedelay = 1;
clearInterval(_delay);
_delay = setInterval(delayCheck, 500);
}
.hide {
height: 100px;
width: 100px;
border: 1px solid red;
color: black;
pointer-events: none;
opacity: 0;
transition: opacity 1.5s ease-in-out;
}
.parent {
width: 100%;
height: 100vh;
border: 1px solid red;
text-align: center;
}
.show {
opacity: 1;
pointer-events: all;
}
答案 1 :(得分:0)
您提供的代码不完整。我修好了(我希望)。主要问题在于为mousemove定义事件处理程序。见下面的工作示例:
HKey_Local_Machine\Software\Classes\AppID\
你可以在这里看到它:https://jsfiddle.net/oeu77wgv/
答案 2 :(得分:0)
只需将间隔设置为1而不是500(以毫秒为单位),并使用show()和hide()方法代替fadeIn()和fadeOut(),因为默认情况下它们的播放时间为400毫秒。
我还将display:none
添加到.hide
CSS类,现在它已隐藏在初始版本。
现在,仅当鼠标在上部div上移动时,内部div才可见。
var timedelay = 1;
var _delay = setInterval(delayCheck, 1);
$('.parent').on('mousemove', showAllEvent);
function delayCheck() {
if (timedelay == 3) {
$('.hide').hide();
timedelay = 1;
}
timedelay = timedelay + 1;
}
function showAllEvent() {
$('.hide').show();
timedelay = 1;
clearInterval(_delay);
_delay = setInterval(delayCheck, 1);
}
&#13;
.hide {
height: 100px;
width: 100px;
border: 1px solid red;
color: black;
display:none;
}
.parent {
width: 100%;
height: 100vh;
border: 1px solid red;
text-align: center;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<div class='parent'>
if you hover me ".hide" is disappearing
<div class='hide'>if you hover me i'm hide on second time</div>
</div>
&#13;