gpt4 book ai didi

Javascript 菜单荧光笔

转载 作者:行者123 更新时间:2023-11-30 14:49:49 24 4
gpt4 key购买 nike

我已经实现了一个带有 JavaScript 部分的菜单,它突出显示了您正在查看的当前页面。

将鼠标移到不同的条目上会使一个小元素移动(跟随鼠标)并停在悬停的条目上。

问题是当光标位于荧光笔移动的小区域(红色区域)时。

red area that causes the bug

将光标留在那里会导致荧光笔继续从事件条目跳到悬停的条目,没有结束。

bug

这是代码,也在工作 codepen 上:

HTML

<div class="wrapper">
<ul>
<li>
<a class="active" href="#"><span>Link 1</span></a>
</li>
<li>
<a href="#"><span>Link 2</span></a>
</li>
<li>
<a href="#"><span>Link 3</span></a>
</li>
<li>
<a href="#"><span>Linl 4</span></a>
</li>
<li>
<a href="#"><span>Link 5</span></a>
</li>
<li>
<a href="#"><span>Link 6</span></a>
</li>
<li>
<a href="#"><span>Link 7</span></a>
</li>
<li>
<a href="#"><span>Link 8</span></a>
</li>
<li>
<a href="#"><span>Link 9</span></a>
</li>
<li>
<a href="#"><span>Link 10</span></a>
</li>
</ul>
<span class="js-status-menu status-menu"></span>
</div>

CSS

div {
max-width: 277px;
height: 100%;
background: #333;
text-align: left;
padding: 0;
position: relative;
}

ul {
margin: 0;
padding: 0;
list-style: none;
}

ul li a {
display: block;
text-decoration: none;
font-size: 12px;
line-height: 1.25em;
color: #fff;
border-bottom: solid 1px #333D4A;
padding: 14px 25px;
position: relative;
}

ul li a:hover {
color: #fff;
background: #435162;
}

.status-menu {
width: 5px;
height: 43px;
background: #4EFFFF;
position: absolute;
left: 0;
top: 0;
}

JS

$(document).ready(function() {      
if($('.js-status-menu').length){

var jsMenuHover = $('.js-status-menu');
var disclMenu = 0;

var style = 'easeOutExpo';
var default_top = Math.round($('ul li a.active').offset().top - $('ul').offset().top) + disclMenu;

if($('ul li a.active').parents('.submenu').length){
$('ul li a.active').parents('.submenu').show();
$('ul li a.active').parents('.submenu').prev('a').addClass('open');
}

jsMenuHover.css({top: default_top});

$('ul li a').hover(function () {
var topPos = Math.round($(this).offset().top - $('ul').offset().top);
$('.js-status-menu').stop(false, true).animate({top: topPos + disclMenu},{duration:500, easing: style});
});

$('ul').on('mouseleave',function () {
if ($('ul li a').hasClass('active')){
var default_top = Math.round($('ul li a.active').offset().top - $('ul').offset().top) + disclMenu;
}
jsMenuHover.stop(false, true).animate({top: default_top},{duration:500, easing: style});
});

}

});

我也尝试添加超时,但没有帮助。有什么想法吗?

谢谢

最佳答案

您可以在 ul li a hover 函数中使用 e.stopPropagation 来解决您的问题。

$('ul li a').hover(function (e) {
e.stopPropagation()
var topPos = Math.round($(this).offset().top - $('ul').offset().top);
$('.js-status-menu').stop(false, true).animate({top: topPos + disclMenu},{duration:500, easing: style});
});

更新 1

好的,当鼠标进入光标左侧元素并应用 css 时,我已经检测到。我添加了 actual 变量来检测鼠标的实际位置。

$('.js-status-menu.status-menu').on("mouseenter",function (e) {
$("ul li").eq(actual).css({color:"#fff",background:"#435162"})
})
$('.js-status-menu.status-menu').on("mouseleave",function (e) {
$("ul li").eq(actual).css({color:"#fff",background:"#333"})
})

更新 2

好的,我已经添加了一个主体 mouseenter 函数并添加了一个变量来检查何时在您的 ul li 元素中输入。

请在下面重试:

https://codepen.io/anon/pen/VyVMJj

关于Javascript 菜单荧光笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48317820/

24 4 0