2013-03-23 68 views
0

我一直在拼凑一个脚本从这个网站的各个地方,但它还没有工作。我需要发生的是点击一个div,并将覆盖div向下滑动,如果单击另一个div关闭prev div并向下滑动。这是我的工作排序小提琴:http://jsfiddle.net/G94Vm/onClick addClass'active'slideDown overlay div,close overlay div onClick next div

HTML:

<div class="item"> 
    <div class="item-overlay"></div>   
</div> 
<div class="item"> 
    <div class="item-overlay"></div> 
</div> 

脚本:

$(document).ready(function() { 
var open = $('.item'), 
    a = $('div').find('.item-overlay'); 
open.click(function(){ 
    var $this = $('.item-overlay', this), 
     speed = 300; 
    $this.addClass('active').slideDown(speed); 
    if ($this.hasClass('active') === true) { 
     $this.removeClass('active').next('.item-overlay').slideUp(speed); 
    } else if (a.hasClass('active') === false) { 
     $this.addClass('active').next('.item-overlay').slideDown(speed); 
    } else { 
     a.removeClass('active').next('.item-overlay').slideUp(speed); 
     $this.addClass('active').next('.item-overlay').delay(speed).slideDown(speed); 
    } 
}); 

});

这是我working on:的网站是只是用这个简单的脚本现在:

$(document).ready(function() { 
$('.item', this).click(function() { 
    $('.item-overlay', this).slideToggle('400', function() { 
     // end animation 
    }); 
}); 

});

我还在学习jQuery,无法弄清楚我做错了什么。在这个几个小时,任何帮助将非常感激。

谢谢! 约翰

+0

我现在有点接近,看到上面更新的小提琴。仍然工作不正常,第一次和第二次点击工作,然后我失去了滑动功能。 – 2013-03-23 21:53:53

回答

1

我的理解是,你想要的.item-overlay格被点击其父.item DIV里面的时候滑下去,如果有任何其他.item-overlay的div可见它们全部收上来?

下面是一个工作示例。该效果基本show动画是目前对我来说有点越野车,但是这可能给你你以后(更新为使用的slideToggle代替了slideDown):

$('.item').click(function() { 
    $(this).find('.item-overlay').slideToggle('300').addClass('active'); 
    $(this).siblings().find('.active').each(function() { 
     $(this).slideUp('300').removeClass('active'); 
    }); 
}); 
+0

谢谢,raphaelvalerio,这工作得很好。任何想法如何获得这个幻灯片备份,如果你点击'主动'div? – 2013-03-24 00:24:41

+0

是的,只需将我的代码示例的第2行上的'slideDown'更改为'slideToggle'。我已经相应地更新了答案。希望它可以帮助你! – raphaelvalerio 2013-03-24 00:30:09

+0

这就是我正在寻找的,谢谢,raphaelvalerio!完善。该脚本还具有在您点击链接并返回页面后关闭图层的功能。我很感激这个帮助,一整天都在努力工作,你在这么短的时间内就明白了。 – 2013-03-24 00:48:05

0

我刚刚更新了小提琴:

http://jsfiddle.net/G94Vm/10

你不需要这一切if语句。 只需关闭所有叠加层,然后再向下滑动。

$(document).ready(function() { 
$('.item').click(function(){ 
    var element = $('.item-overlay', this); 
    var speed = 300; 
    $('.item-overlay').removeClass('active').slideUp(speed); 
    element.addClass('active').slideDown(speed); 
}); 
}); 

而且你需要删除

.item-overlay { 
    display:none; 
} 

因为你想它滑下来,如果它隐藏,直到它的滑动下来那是不可能的。

+0

感谢您的回复,看起来像有几种方法可以做到这一点。我会试一试,看看最适合这种情况的是什么。 – 2013-03-23 23:27:42

+0

谢谢,这似乎工作得很好,但是当你点击'主动'覆盖它重复slideDown行为。此外,如果您点击叠加层上的链接,然后关闭该窗口以返回原始网站,则会出现奇怪的闪烁。任何想法如何制作只是滑回去?似乎它需要一个条件。 – 2013-03-24 00:20:28

+0

是的,你可以检查它是否已经在slideDown之前激活。 'if(!element.hasClass('active')){element.addClass('active')。slideDown(speed); }'。我看不到任何闪烁。 – 2013-03-24 00:28:29

0

您实际使用next错误的方式。我已经重写了你的jsFiddle,以便它动画,当它应该停止时,并听取外面的点击应该关闭活动覆盖。

的链接是:http://jsfiddle.net/alexis_tondelier/Gf2dv/

而且目前的JS代码:

$(document).ready(function() { 
    var $active, 
     togglerSelector = '.item', 
     toggledSelector = '.item-overlay', 
     $items = $(togglerSelector), 
     animationDuration = 300, 
     activeClassName = 'active', 
     activeStyle = {height: 300}, 
     notActiveStyle = {height: 0} 
     hideActive = function() { 
      $active && $active 
       .stop() 
       .animate(notActiveStyle, function() { 
        $(this).removeClass(activeClassName).hide(); 
       });  
      $active = void 0;   
     }, 
     showActive = function($element) { 
      $element && ($active = $element) 
       .stop() 
       .show() 
       .animate(activeStyle) 
       .addClass(activeClassName) 
     }; 

    $items.on('click', function(event) { 
     var $this = $(this), 
      $overlay = $this.children(toggledSelector), 
      theSame = $overlay.is($active); 
     hideActive(); 
     theSame || showActive($overlay); 
     } 
    }); 
    $(this).on('click', function(event) { 
     var $target = $(event.target), 
      isOutClick = !$target.closest(togglerSelector).length; 
     isOutClick && hideActive(); 
    }); 
}); 

它应该工作,你想要的方式。

+0

我试过这个脚本,无法让它工作。 jfiddle中的JHint显示一些错误? – 2013-03-24 00:22:29

+0

我在'notActiveStyle'声明后忘记了',',然后它适用于每个导航器。即使有这个错误,由于不使用严格模式,它正在工作,但只使用全局变量而不是本地的。 jsFiddle更新:http://jsfiddle.net/alexis_tondelier/Gf2dv/ – lib3d 2013-03-24 16:52:56

+0

JHint只是不喜欢'布尔&& functionCall'样式。但它不会抛出任何错误并且运作良好。 – lib3d 2013-03-24 17:01:07