这是一个挑战。这就是我要找的东西:
OnClick
,Div 1滑动到Div 2的位置(左侧),Div 2完全滑离屏幕,Div 3滑动到Div 3的位置(中间,居中)。一个新的div到达右边。我尝试过使用jQuery动画和AddClass。 jQuery不喜欢在屏幕外滑动div。
有什么想法吗?
有关我所描述的示例,请访问Groupon.com。我认为这是一个很酷的主意,并给了我自己重新创造它的挑战。到目前为止,没有骰子。
-D
答案 0 :(得分:114)
这样的东西?
http://jsfiddle.net/jtbowden/ykbgT/embedded/result/
http://jsfiddle.net/jtbowden/ykbgT/
这是基本功能。它不会扩展到更多的div等,但这应该让你开始。
关键是将元素包装在容器中并隐藏溢出。
<强>更新强>:
这是一个稍微好一点的版本,可以处理任意数量的div(大于1):
http://jsfiddle.net/jtbowden/ykbgT/1/
进一步简化:
http://jsfiddle.net/jtbowden/ykbgT/2/
代码段:
$('.box').click(function() {
$(this).animate({
left: '-50%'
}, 500, function() {
$(this).css('left', '150%');
$(this).appendTo('#container');
});
$(this).next().animate({
left: '50%'
}, 500);
});
body {
padding: 0px;
}
#container {
position: absolute;
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
overflow: hidden;
}
.box {
position: absolute;
width: 50%;
height: 300px;
line-height: 300px;
font-size: 50px;
text-align: center;
border: 2px solid black;
left: 150%;
top: 100px;
margin-left: -25%;
}
#box1 {
background-color: green;
left: 50%;
}
#box2 {
background-color: yellow;
}
#box3 {
background-color: red;
}
#box4 {
background-color: orange;
}
#box5 {
background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div id="box1" class="box">Div #1</div>
<div id="box2" class="box">Div #2</div>
<div id="box3" class="box">Div #3</div>
<div id="box4" class="box">Div #4</div>
<div id="box5" class="box">Div #5</div>
</div>
答案 1 :(得分:3)
也许我误解了。我虽然你想要连续三个div,而只有那些最后滑动的东西。
(我知道你正在使用jQuery,但它让我生气,因为我试图强迫它工作。你必须根据你的目的调整它。)
答案 2 :(得分:1)
扩展 Jeff B 回答,我已经包含了Hammer.js并制作了一份循环列表。
$(function() {
$("#esq").click(function() {
console.log("Esquerda !");
var obj = $(".ativo");
$(obj).animate({
left: '-50%'
}, 500, function() {
$(this).css('left', '+150%');
$(this).appendTo('#container');
});
$(obj).next().animate({
left: '+50%'
}, 500, function() {
$(this).addClass('ativo');
$(obj).removeClass('ativo');
});
});
$("#dir").click(function() {
console.log("Direita !");
var obj = $(".ativo");
var prox = $(obj).siblings(":last");
$(obj).animate({
left: '+150%'
}, 500, function() {
$(prox).prependTo('#container');
});
$(prox).css('left', '-50%');
$(prox).animate({
left: '+50%'
}, 500, function() {
$(this).addClass('ativo');
$(obj).removeClass('ativo');
});
});
var hammertime = new Hammer(document.getElementById("container"));
hammertime.get('swipe').set({direction: Hammer.DIRECTION_HORIZONTAL});
hammertime.on('swipeleft', function() {
$("#esq").trigger("click");
});
hammertime.on('swiperight', function() {
$("#dir").trigger("click");
});
});
答案 3 :(得分:0)
而且......不是一年太晚了。如果你想让它从第一个div开始,你的CSS需要看起来像这样。
#box1 { background-color:#333; } #box2 { background-color:#333; left: -50%; } #box3 { background-color:#333; left: 150%; } #box4 { background-color:#333; left: 150%; } #box5 { background-color:#333; left: 150%; }