Pleasantries
我已经玩了几天这个想法,但似乎无法很好地掌握它。我觉得我快到了,但可以使用一些帮助。当我得到答案时,我可能会打自己的头。
实际问题我
有一系列的,它们是用 php(和 TWIG)生成的。标签中有一个图像和一个段落。在页面上,只有图像可见。用户点击图片后,文章会横向展开并显示段落。文章也会向左显示动画,因此占据了该部分的整个宽度,并将所有其他文章隐藏在其后面。<articles>
<section>
<article>
我已经毫无问题地完成了这部分效果。真正的问题是让文章回到原来的位置。文章中有一个“关闭” <button>
。一旦按钮被点击,需要反转效果(即文章恢复到原来的大小,只显示图像,并返回到原来的位置。)
当前理论
我认为我需要从每个部分的每篇文章中检索 offset().left 信息,并确保它与各自的文章相关联,以便文章知道单击“关闭”按钮后该去哪里。我当然愿意接受不同的解释。
我一直在尝试使用$.each
、each()
、$.map
和函数map()
来toArray()
了解是否有用。
实际代码
/*CSS*/
section > article.window {
width:170px;
height:200px;
padding:0;
margin:4px 0 0 4px;
position:relative;
float:left;
overflow:hidden;
}
section > article.window:nth-child(1) {margin-left:0;}
<!--HTML-->
<article class="window">
<img alt="Title-1" />
<p><!-- I'm a paragraph filled with text --></p>
<button class="sClose">Close</button>
</article>
<article class="window">
<!-- Ditto + 2 more -->
</article>
失败尝试示例
function winSlide() {
var aO = $(this).parent().offset()
var aOL = aO.left
var dO = $(this).offset()
var dOL = dO.left
var dOT = dO.top
var adTravel = dOL-aOL
$(this).addClass('windowOP');
$(this).children('div').animate({left:-(adTravel-3)+'px', width:'740px'},250)
$(this).children('div').append('<button class="sClose">Close</button>');
$(this).unbind('click', winSlide);
}
$('.window').on('click', winSlide)
$('.window').on('click', 'button.sClose', function() {
var wW = $(this).parents('.window').width()
var aO = $(this).parents('section').offset()
var aOL = aO.left
var pOL = $(this).parents('.window').offset().left
var apTravel = pOL - aOL
$(this).parent('div').animate({left:'+='+apTravel+'px'},250).delay(250, function() {$(this).animate({width:wW+'px'},250); $('.window').removeClass('windowOP');})
$('.window').bind('click', winSlide)
})
在你摸不着头脑之前,我必须指出,这种尝试涉及文章中的一个额外的 div。这个想法是让文章的溢出设置为可见(.addclass('windowOP'))
,div 自由移动。这种方法实际上确实有效……几乎。动画在第二次触发后会失败。同样由于某种原因,在关闭第一篇文章时,左边距是属性被忽略了。
IE。
第一次单击窗口:完美执行打开动画 第一次单击窗口的关闭按钮:完美执行关闭动画,返回原始位置 第二次单击 SAME 窗口:动画失败,但打开到正确的大小 第二次单击窗口的关闭按钮(如果可见):没有任何反应
感谢您的耐心等待。如果您需要更多信息,请询问。
编辑
在修改 Flambino 的代码后添加了一个 jsfiddle。
未点击的文章需要保留在原处。现在实现这一点有问题。