使用jQuery将一个div滑动到屏幕外

54

这有点具有挑战性。以下是我所要求的:

  1. 屏幕上有3个div
  2. Div1位于页面中央(居中)
  3. Div2位于屏幕最左侧
  4. Div3位于屏幕最右侧
  5. OnClick,Div1向左滑动到Div2的位置,Div2完全滑出屏幕,Div3滑动到原来Div1的位置(中间,居中)。一个新的div出现在右边。

我尝试使用jQuery动画和AddClass。jQuery不喜欢将div滑出屏幕。

有什么想法吗?

要了解我所描述的内容,请访问Groupon.com。我认为这是一个很酷的想法,并且已经给自己制造了挑战。目前还没有成功。

-D


你目前有什么进展? - qwertymk
1
"jQuery不喜欢将div滑动到屏幕外。你只需要将元素(即绝对定位)动画化为负的左偏移量即可。(示例在此-> http://jsfiddle.net/steweb/tUU7a/)" - stecb
展示你目前的进展,我们会帮助你解决计划中出现问题的部分。 - jyoseph
4个回答

115

这是一个类似的示例?

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>


7
好的,我来翻译一下。您提到的内容翻译为:“对于一份好的实际演示和比我先完成它点赞;-)(还有使用百分比而非像我一样使用像素 : swearing :)。” - Brad Christie
同意。我花了约3个小时在这上面,但离这还很远。非常感谢!这是一项艺术品 :) - djreed
3
哇,竟然在一年后被踩了。有时候我希望人们能够解释一下为什么要踩。 - Jeff B
@Jeff B,您能否看一下我的问题?它与这个非常相似,唯一的区别是我有左右箭头来回切换。谢谢。 - Muhammed Bhikha
谢谢Jeff,这正是我长期寻找的东西。 - vivek salve
显示剩余2条评论

3
也许我误解了。我以为你想要三个div并排,只有两端的滑动等效果。 http://jsfiddle.net/acsfy/ (我知道你在使用jQuery,但是当我试图强制它工作时,它让我很生气。你需要根据自己的需求进行调整。)

我曾经对jQuery有同样的感觉。然后有一天,它就豁然开朗了,从此我再也没有回头过。再见document.getElementById() - Jeff B
1
@Jeff 我觉得我正在接近转变的边缘。前几天,我在处理这个复杂的导航问题 - 抓取链接,更改样式,效果等等。截止日期逼近,所以我只好说,“管他呢”,然后转向jQuery。仅用了10分钟和20行 - 20行! - 就完成了整件事。它可能不是“恍然大悟”,但只是时间问题。 - sdleihssirhc

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");
});

});

示例代码:http://jsfiddle.net/tvLt1r9h/2/


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%; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接