Слайд-экран с помощью jQuery
Это немного сложная задача. Вот что я ищу:
- 3 divs на экране
- Div 1 находится в середине страницы (в центре)
- Div 2 находится совсем рядом с экраном слева.
- Div 3 находится совсем рядом с экраном справа.
-
OnClick
, Div 1 скользит в положение Div 2 (слева), Div 2 полностью сместится с экрана, Div 3 скользит туда, где Div 3 был (средний, по центру). Справа появляется новый div.
Я пробовал использовать анимацию jQuery и AddClass. jQuery не любит сдвигать div на экран.
Любые мысли?
В качестве примера того, что я описываю, посетите Groupon.com. Я думал, что это крутая идея, и поставил перед собой задачу воссоздать ее. Пока что нет кубиков.
-D
Ответы
Ответ 1
Что-то вроде этого?
http://jsfiddle.net/jtbowden/ykbgT/embedded/result/
http://jsfiddle.net/jtbowden/ykbgT/
Это базовая функциональность. Он не масштабируется для большего количества разделов и т.д., Но это должно заставить вас начать.
Ключ состоит в том, чтобы обернуть элементы в контейнер и сделать переполнение скрытым.
Обновление
Здесь немного лучшая версия, которая обрабатывает любое количество 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>
Ответ 2
Возможно, я неверно истолковал. Я, хотя вы хотели, чтобы три divs подряд, и только те, которые на конце скользят и что-то еще.
http://jsfiddle.net/acsfy/
(Я знаю, что вы используете jQuery для этого, но это раздражало меня, когда я пытался заставить его работать. Вам придется адаптировать это для ваших целей.)
Ответ 3
Расширение ответа 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");
});
});
Пример в: http://jsfiddle.net/tvLt1r9h/2/
Ответ 4
И... не год слишком поздно. Если вы хотите, чтобы он начинался с первого 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%; }