我正在创建一个顶部有图像的页面,下面是一个菜单。当用户点击3个菜单按钮时,图像slideUp和页面向下滚动,因此菜单位于页面顶部,然后右侧.content div淡入。slideUp应该仅在用户第一次出现时点击按钮。
使用jQuery执行此操作的最佳方法是什么?(无插件)
如果我点击两次相同的按钮,我还需要知道如何阻止它在已经可见的页面中淡入淡出?
我正在使用 rel 而不是 href ,因为href使页面跳转,即使返回false 。
这是我到目前为止所做的:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
imgVisible = true;
$('#mainmenu a').click(function(){
var $activeTab = $(this).attr('rel');
if(!imgVisible){
$('html:not(:animated),body:not(:animated)').animate({scrollTop:$('#mainmenu').offset().top-20},500);
$('.content').hide();
$($activeTab).fadeIn();
} else{
$('#imgholder').slideUp(500,function(){
imgVisible = false;
$('#mainmenu a[rel="'+$activeTab+'"]').click();
});
}
return false;
});
});
</script>
<div id="imgholder"><img src="image.jpg" /></div>
<div id="mainmenu">
<ul>
<li><a rel="#tab1"></a></li>
<li><a rel="#tab2"></a></li>
<li><a rel="#tab3"></a></li>
</ul>
</div>
<div id="container">
<div class="content" id="tab1">
content
</div>
<div class="content" id="tab2">
content
</div>
<div class="content" id="tab3">
content
</div>
</div>
答案 0 :(得分:2)
我认为这是您所寻找的一个很好的例子:Organic Tabs
答案 1 :(得分:2)
以下代码可以满足您的需求:
$('#mainmenu a').click(function(){
var myrel=$(this).attr('rel');
$('.content:not([id='+myrel+'])').hide();
$('#imgholder').slideUp(500,function(){
$('#'+myrel).fadeIn();
});
});
....
<li><a href='#' rel='tab0'></a></li>
我已从你的rel =''片段中删除了'#'符号; - )
我不确定您为什么要滚动页面。当用户单击菜单时,他/她已经将其聚焦(因此它在当前视口内可见)。但是你有一个非常大的顶部图像?如果是这种情况,请告诉我,我将修改该代码段。 (仍然,它取决于页面首次加载时可见的菜单下方的内容量。)
此外,出于SEO原因,您可能希望使用href而不是rel属性并创建单独的内容保留页面。以下代码段将删除导航操作。
$('#mainmenu a').each(function(){
var myhref = $(this).attr('href');
$(this).attr('href','#').attr('rel',myhref);
}).click(function(){
var myrel=$(this).attr('rel');
$('.content:not([id='+myrel+'])').hide();
//....etc
答案 2 :(得分:1)
var imgVisible = true;
var $activeTab, $lastTab;
var $mainmenu = $('#mainmenu');
var offset = $mainmenu.offset().top - 20;
$mainmenu.find('a').click(function() {
$activeTab = $($(this).attr('rel'));
if (!imgVisible) {
// dont fire any events if already open
if ($lastTab.attr('id') == $activeTab.attr('id')) return false;
$lastTab.fadeOut('normal', function() {
$activeTab.fadeIn(500, function() {
$lastTab = $activeTab;
});
});
} else {
$('#imgholder').slideUp(500, function() {
imgVisible = false;
window.scrollTo(0, offset);
$activeTab.fadeIn(500, function() {
$lastTab = $activeTab;
});
});
}
return false;
});
我强烈建议添加<a href="#">
,因为这样做不会使网页在正确完成后跳转,并确保您的锚链接验证。有人告诉我,如果我错过了什么,可以快速解决(或者如果你有优化或改进,你可以为我做。)