这是我的HTML代码:
<div id="showmenu">Click Here</div>
<div class="menu" style="display: none;">
<ul>
<li>Button1</li>
<li>Button2</li>
<li>Button3</li>
</ul>
</div>
我希望点击.menu
点击#showmenu
从左到右滑动(带有动画)。再次点击#showmenu
或网站页面的任意位置,.menu
将隐藏(向后滑动)。
我使用JQuery 2.0.3
我试过这个,但它没有做我想要的。
$(document).ready(function() {
$('#showmenu').toggle(
function() {
$('.menu').slideDown("fast");
},
function() {
$('.menu').slideUp("fast");
}
);
});
答案 0 :(得分:61)
在版本1.9中,jQuery中的.toggle()
method被删除了。你可以这样做:
$(document).ready(function() {
$('#showmenu').click(function() {
$('.menu').slideToggle("fast");
});
});
演示:http://jsfiddle.net/APA2S/1/
...但是问题中的代码会向上或向下滑动。要向左或向右滑动,您可以执行以下操作:
$(document).ready(function() {
$('#showmenu').click(function() {
$('.menu').toggle("slide");
});
});
演示:http://jsfiddle.net/APA2S/2/
注意到这需要jQuery-UI's slide effect,但您已将该标记添加到您的问题中,因此我认为这是正常的。
答案 1 :(得分:13)
当然slideDown
和slideUp
没有做你想做的事,你说你希望它是左/右,而不是上/下。
如果您对添加jquery-ui
标记的问题进行编辑意味着您正在使用jQuery UI,那么我将使用jQuery UI的slide
效果来使用nnnnnn's solution。
如果不是:
假设菜单开始显示(编辑:oops,我看到这不是一个有效的假设;请参阅下面的注释),如果你想让它向左滑动然后再滑动从左边回来,你可以这样做:Live Example | Live Source
$(document).ready(function() {
// Hide menu once we know its width
$('#showmenu').click(function() {
var $menu = $('.menu');
if ($menu.is(':visible')) {
// Slide away
$menu.animate({left: -($menu.outerWidth() + 10)}, function() {
$menu.hide();
});
}
else {
// Slide in
$menu.show().animate({left: 0});
}
});
});
您需要将position: relative
放在菜单元素上。
请注意,我已将toggle
替换为click
,因为从jQuery中删除了toggle
的这种形式。
如果您希望菜单开始隐藏,您可以调整上述内容。你想知道元素的宽度,基本上,当它放在页面外时。
此版本不关心菜单最初是否可见:Live Copy | Live Source
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id="showmenu">Click Here</div>
<div class="menu" style="display: none; position: relative;"><ul><li>Button1</li><li>Button2</li><li>Button3</li></ul></div>
<script>
$(document).ready(function() {
var first = true;
// Hide menu once we know its width
$('#showmenu').click(function() {
var $menu = $('.menu');
if ($menu.is(':visible')) {
// Slide away
$menu.animate({left: -($menu.outerWidth() + 10)}, function() {
$menu.hide();
});
}
else {
// Slide in
$menu.show().css("left", -($menu.outerWidth() + 10)).animate({left: 0});
}
});
});
</script>
</body>
</html>
答案 2 :(得分:2)
我会做这样的事情
JsBin中的DEMO :http://jsbin.com/ofiqur/1/
<a href="#" id="showmenu">Click Here</a>
<div class="menu">
<ul>
<li><a href="#">Button 1</a></li>
<li><a href="#">Button 2</a></li>
<li><a href="#">Button 3</a></li>
</ul>
</div>
和jQuery一样简单
var min = "-100px", // remember to set in css the same value
max = "0px";
$(function() {
$("#showmenu").click(function() {
if($(".menu").css("marginLeft") == min) // is it left?
$(".menu").animate({ marginLeft: max }); // move right
else
$(".menu").animate({ marginLeft: min }); // move left
});
});
答案 3 :(得分:0)
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".click-header").click(function(){
$(this).next(".hidden-content").slideToggle("slow");
$(this).toggleClass("expanded-header");
});
});
</script>
.demo-container {
margin:0 auto;
width: 600px;
text-align:center;
}
.click-header {
padding: 5px 10px 5px 60px;
background: url(images/arrow-down.png) no-repeat 50% 50%;
}
.expanded-header {
padding: 5px 10px 5px 60px;
background: url(images/arrow-up.png) no-repeat 50% 50%;
}
.hidden-content {
display:none;
border: 1px solid #d7dbd8;
padding: 20px;
text-align: center;
}
<div class="demo-container">
<div class="click-header"> </div>
<div class="hidden-content">Lorem Ipsum.</div>
</div>
答案 4 :(得分:0)
试试这个:
<script type="text/javascript">
$.fn.toggleFuncs = function() {
var functions = Array.prototype.slice.call(arguments),
_this = this.click(function(){
var i = _this.data('func_count') || 0;
functions[i%functions.length]();
_this.data('func_count', i+1);
});
}
$('$showmenu').toggleFuncs(
function() {
$( ".menu" ).toggle( "drop" );
},
function() {
$( ".menu" ).toggle( "drop" );
}
);
</script>
第一个功能是JQuery弃用切换的替代方法:)。适用于JQuery 2.0.3和JQuery UI 1.10.3
答案 5 :(得分:0)
使用持续时间以毫秒为单位的slideToggle(500)函数可获得更好的效果。
样本HTML
<body>
<div class="growth-step js--growth-step">
<div class="step-title">
<div class="num">2.</div>
<h3>How Can Aria Help Your Business</h3>
</div>
<div class="step-details ">
<p>At Aria solutions, we’ve taken the consultancy concept one step further by offering a full service
management organization with expertise. </p>
</div>
</div>
<div class="growth-step js--growth-step">
<div class="step-title">
<div class="num">3.</div>
<h3>How Can Aria Help Your Business</h3>
</div>
<div class="step-details">
<p>At Aria solutions, we’ve taken the consultancy concept one step further by offering a full service
management organization with expertise. </p>
</div>
</div>
</body>
在您的js文件中,如果您需要动画的子传播,请删除第二个click事件函数及其代码。
$(document).ready(function(){
$(".js--growth-step").click(function(event){
$(this).children(".step-details").slideToggle(500);
return false;
});
//for stoping child to manipulate the animation
$(".js--growth-step .step-details").click(function(event) {
event.stopPropagation();
});
});