使用 jQuery 动画 lineHeight 的下拉菜单
Drop down menu using jQuery animate lineHeight
想法是制作一个下拉菜单,首先所有菜单项都堆叠在顶部,悬停时它们会向下动画。
我通过将行高设置为 0 来做到这一点。悬停时将行高设置为 35px。
问题是这也会将第一行向下移动,这有时会将鼠标定位在文本之外并使其再次跳起来。
我尝试将第一个项目从动画中移除,但这会导致重叠。
也是搬进搬出几次后,我就停工了,我也不知道为什么。
有人有解决办法吗?
我的 Javascript 和 jQuery 技能有限,所以我尝试用我知道的东西发挥创造力。
第一次尝试
HTML
<h2>
<a>project one <br></a>
<a>number two <br></a>
<a>this would be project three<br></a>
<a>and number four <br></a>
</h2>
CSS
h2 {
left:10px;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:36px;
font-weight:400;
line-height:10px;
position:absolute;
top:-5px;
}
jQuery:
$("h2").hover(function () {
$(this).filter(':not(:animated)').animate({
lineHeight: '35px'
});
}, function () {
$(this).animate({
lineHeight: '0px'
});
});
第二
HTML
<div id="menu">
<h2>
<a>project one<br/> </a>
<span id="anim">
<a>number two<br/> </a>
<a>this would be project three<br/> </a>
<a>and number four<br> </a>
</span>
</h2>
</div>
jQuery:
$("h2").hover(function () {
$("#anim").filter(':not(:animated)').animate({
lineHeight: '35px'
});
}, function () {
$("#anim").animate({
lineHeight: '0px'
});
});
这里还有一个jsfiddle:
我会选择 max-height 而不是 line-height 的动画。另外,我会更改您的 html 结构,因为 h2 应该用于标题 - 而不是链接列表。
$(document).ready(function () {
$("ul").hover(function () {
$(this).children('li').animate({'max-height': 100}) // make the 100 larger than the tallest li
}, function () {
$(this).children('li').animate({'max-height': 0})
});
});
ul {
position:absolute;
top:0;
left:10px;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:36px;
font-weight:400;
list-style:none;
padding:0;
margin:0;
}
li {
padding:0;
margin:0;
overflow:visible;
max-height:0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="menu">
<ul>
<li><a>project one</a></li>
<li><a>number two</a></li>
<li><a>this would be project three</a></li>
<li><a>and number four</a></li>
</ul>
</div>
jQuery 已经有一个内置的方法来做这样的动画,它被恰当地命名为 .slideToggle()。考虑以下代码...
HTML:
<h2>Hover Over Me</h2>
<nav>
<a>Link 1</a>
<a>Link 2</a>
<a>Link 3</a>
</nav>
CSS:
h2 {
display:block;
font-size:24px;}
nav {
display:none;}
nav a {
display:block;}
jQuery:
$('h2').hover(function(){
$('nav').slideToggle();
});
想法是制作一个下拉菜单,首先所有菜单项都堆叠在顶部,悬停时它们会向下动画。
我通过将行高设置为 0 来做到这一点。悬停时将行高设置为 35px。
问题是这也会将第一行向下移动,这有时会将鼠标定位在文本之外并使其再次跳起来。
我尝试将第一个项目从动画中移除,但这会导致重叠。
也是搬进搬出几次后,我就停工了,我也不知道为什么。
有人有解决办法吗?
我的 Javascript 和 jQuery 技能有限,所以我尝试用我知道的东西发挥创造力。
第一次尝试
HTML
<h2>
<a>project one <br></a>
<a>number two <br></a>
<a>this would be project three<br></a>
<a>and number four <br></a>
</h2>
CSS
h2 {
left:10px;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:36px;
font-weight:400;
line-height:10px;
position:absolute;
top:-5px;
}
jQuery:
$("h2").hover(function () {
$(this).filter(':not(:animated)').animate({
lineHeight: '35px'
});
}, function () {
$(this).animate({
lineHeight: '0px'
});
});
第二
HTML
<div id="menu">
<h2>
<a>project one<br/> </a>
<span id="anim">
<a>number two<br/> </a>
<a>this would be project three<br/> </a>
<a>and number four<br> </a>
</span>
</h2>
</div>
jQuery:
$("h2").hover(function () {
$("#anim").filter(':not(:animated)').animate({
lineHeight: '35px'
});
}, function () {
$("#anim").animate({
lineHeight: '0px'
});
});
这里还有一个jsfiddle:
我会选择 max-height 而不是 line-height 的动画。另外,我会更改您的 html 结构,因为 h2 应该用于标题 - 而不是链接列表。
$(document).ready(function () {
$("ul").hover(function () {
$(this).children('li').animate({'max-height': 100}) // make the 100 larger than the tallest li
}, function () {
$(this).children('li').animate({'max-height': 0})
});
});
ul {
position:absolute;
top:0;
left:10px;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:36px;
font-weight:400;
list-style:none;
padding:0;
margin:0;
}
li {
padding:0;
margin:0;
overflow:visible;
max-height:0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="menu">
<ul>
<li><a>project one</a></li>
<li><a>number two</a></li>
<li><a>this would be project three</a></li>
<li><a>and number four</a></li>
</ul>
</div>
jQuery 已经有一个内置的方法来做这样的动画,它被恰当地命名为 .slideToggle()。考虑以下代码...
HTML:
<h2>Hover Over Me</h2>
<nav>
<a>Link 1</a>
<a>Link 2</a>
<a>Link 3</a>
</nav>
CSS:
h2 {
display:block;
font-size:24px;}
nav {
display:none;}
nav a {
display:block;}
jQuery:
$('h2').hover(function(){
$('nav').slideToggle();
});