我有这个,实际上我想制作类似谷歌图片功能的东西,我的意思是如果我点击任何地方李,扩展的div总是低于包含li的行,我点击了,这是一个暗示吗?感谢
FIDDLE >>
<div class="container">
<ul>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li class="expanded">
<div>abc</div>
</li>
</ul>
</div>
JS
$(document).ready(function() {
$( ".container ul li" ).click(function() {
var id = $(this).attr('id');
var idNum = id.split('-');
var num = parseInt(idNum[1]);
var a = Math.ceil(num/4)*4;
//alert(a);
$('.container ul li').removeClass('active');
$(this).addClass('active');
$('.container ul li li.expanded').slideUp(400,function(){
$(this).insertAfter($('.container ul li #item-'+a)).slideDown(400);
})
});
});
CSS
body, ul {
margin: 0px;
padding: 0px;
}
.container {
width: 90%;
margin: 0 auto;
}
li {
width: 23%;
margin: 10px 1% 0 1%;
float: left;
list-style: none outside none;
}
li img {
width: 100%;
}
.expanded {
position: relative;
display: none;
background: #ccc;
z-index: 1;
width: 100%;
height: 500px;
}
答案 0 :(得分:0)
li.after($(&#34; .expanded&#34;))是您需要的唯一代码行。
$(document).ready(function() {
var expanded = false;
$( ".container ul li" ).click(function(e) {
var li =$(this);
if (expanded) {
li.after($( ".expanded" ));
$( ".expanded" ).slideUp("slow");
expanded = false;
}
else {
li.after($( ".expanded" ));
$( ".expanded" ).slideDown("slow");
expanded= true;
}
});
});
&#13;
body, ul {
margin: 0px;
padding: 0px;
}
.container {
width: 90%;
margin: 0 auto;
}
li {
width: 23%;
margin: 10px 1% 0 1%;
float: left;
list-style: none outside none;
}
li img {
width: 100%;
}
.expanded {
position: relative;
display: none;
background: #ccc;
z-index: 1;
width: 100%;
height: 500px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<ul>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li>
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li class="expanded">
<div>abc</div>
</li>
</ul>
</div>
&#13;
答案 1 :(得分:0)
如果我正确理解您的问题,您希望展开的元素的行为如下:
有很多方法可以实现这一目标。
一种相对简单的方法是区分您的li元素,以便您可以识别单击的特定li。这可以通过多种方式完成,但在您的情况下,您可以简单地为每个li添加唯一ID。 我在这里使用数字用于演示目的 - 您可能希望在代码中更具描述性。
接下来,您需要修改您的javascript以检查点击了哪个li。您可以使用&#34;扩展&#34;变量以跟踪哪个li最后激活了展开的元素。 (我们可以将0视为非活动状态)
因此,在每次点击时,您都会检查点击的li之前是否切换了展开的元素。如果是这样,那么只需关闭元素即可。如果它没有关闭元素并使用回调函数重新打开它。
我希望这能回答你的问题。
编辑:以下代码段已经过修改,可以将展开的元素移动到其点击的li行。这仅在每行有4个图像时才有效。
$(document).ready(function() {
var expanded = 0;
$( ".container ul li" ).click(function(e) {
e.preventDefault();
var clicked = $(this).attr("id");
if (clicked == expanded){
$( ".expanded" ).slideUp("slow", function(){
$(".expanded").remove();
expanded = 0;
});
}else if (expanded == 0){
$(".container ul #"+Math.ceil(clicked/4)*4).after('<li class="expanded"><div>abc</div></li>');
$( ".expanded" ).slideDown("slow");
expanded = clicked;
}else{
$( ".expanded" ).slideUp("slow", function(){
$(".expanded").remove();
$(".container ul #"+Math.ceil(clicked/4)*4).after('<li class="expanded"><div>abc</div></li>');
$( ".expanded" ).slideDown("slow", function(){
expanded = clicked;
});
});
}
});
});
&#13;
body, ul {
margin: 0px;
padding: 0px;
height:1000px;
}
.container {
width: 90%;
margin: 0 auto;
}
li {
width: 23%;
margin: 10px 1% 0 1%;
float: left;
list-style: none outside none;
}
li img {
width: 100%;
}
.expanded {
position: relative;
display: none;
background: #ccc;
z-index: 1;
width: 100%;
height: 500px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<ul>
<li id="1">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="2">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="3">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="4">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="5">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="6">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="7">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
<li id="8">
<a href="#"><img src="http://s13.postimg.org/8caamw1af/image4.jpg" /></a>
</li>
</ul>
</div>
&#13;
答案 2 :(得分:0)
基本上,你需要找出是否点击了两次相同的元素(如果是,只需滑动div),否则 - > gt;向上滑动(关闭'上一个'),然后向下滑动(重新打开)。由于一个div是有问题的,引用'previous'没有太多意义,实际上,我不确定这将如何与提到的ajax一起工作...但是,信用: icktoofay (How to see if you're clicking the same element twice? Jquery),这里是: http://jsfiddle.net/3a7pjeb9/11/
$(document).ready(function() {
var previousTarget = null;
$(".container ul li").click(function(e) {
if ($('.expanded').is(':visible') != true) {
$(".expanded").slideDown("slow");
} else {
if (this === previousTarget) {
$(".expanded").slideUp("slow");
} else {
$(".expanded").slideUp("slow");
$(".expanded").slideDown("slow");
}
}
previousTarget = this;
});
});
答案 3 :(得分:0)
这是你想要的结果吗?如果不是,请告诉我,我的工作类似于你的项目。
http://jsfiddle.net/3a7pjeb9/14/
$(document).ready(function() {
var expanded = false;
$( ".container ul li" ).click(function(e) {
if (expanded) {
$( ".expanded" ).slideUp("slow").children().remove();
expanded = false;
}
else {
$( ".expanded" ).slideDown("slow");
$(this).clone().appendTo('.expanded');
expanded= true;
}
});
});