jQuery .animate()用于简单的水平滑块不能按预期工作

时间:2013-07-11 19:55:30

标签: jquery css slider jquery-animate

我尝试修改此jQuery滑块解决方案:https://stackoverflow.com/a/9864636/908491(使用第一个解决方案 - http://jsfiddle.net/sg3s/rs2QK/)。

这是我的jsFiddle:http://jsfiddle.net/markrummel/KSHSX/

DIV滑动工作得很好,但被滑出的那个跳开了,而不是以与DIV滑入相同的速率平滑滑出。我在javascript和{{注释了.hide()在CSS中,我可以看到DIV被滑出的位置。

这是我第一次使用overflow:hidden,因此非常感谢您提供的任何帮助!

这是我的javascript:

.animate()

HTML:

$('.date-nav-prev').click(function () {
    $('.date-nav-next').show();
    var current = $('.visible-actions');
    var prev = current.prev('.user-actions');
    current.removeClass('visible-actions').animate({
        left: current.width()
    }, 500, function() {
        //current.hide();
    });
    prev.addClass('visible-actions').show().css({
        left: -(prev.width())
    }).animate({
        left: 0
    }, 500);
});

$('.date-nav-next').click(function () {
    var current = $('.visible-actions');
    var next = current.next('.user-actions');
    current.removeClass('visible-actions').animate({
        left: -(current.width())
    }, 500, function() {
        //current.hide();
    });
    next.addClass('visible-actions').show().css({
        left: prev.width()
    }).animate({
        left: 0
    }, 500);
});

CSS:

<button class="date-nav-prev">< Prev</button>
<button class="date-nav-next">Next ></button><br />
<div id="wrapper">
  <div class="user-actions daysAgo2">
      Actions from 2 Days Ago</div>
  <div class="user-actions yesterday">
      Yesterday's Actions</div>
  <div class="user-actions today visible-actions">
      Today's Actions</div>
</div>

2 个答案:

答案 0 :(得分:4)

我简单地完成了整个事情只是为了向你展示它可以走向哪个方向。在大多数插件中,有一个左右滑动的包装盒,而不是实际的盒子本身。这让事情变得容易一些。

Have a look at the DEMO.

我添加了一个左右滑动的#slider div:

<button class="date-nav-prev">< Prev</button>
<button class="date-nav-next">Next ></button>
<div id="wrapper">
    <div id="slider">
        <div id="daysAgo2">Actions from 2 Days Ago</div>
        <div id="yesterday">Yesterday's Actions</div>
        <div id="today">Today's Actions</div>
    </div>
</div>

将包装器设置为overflow:hidden;,以便隐藏当前幻灯片之前或之前的所有内容:

#wrapper{
    width:300px; 
    height:300px; 
    border:1px solid #333;
    position:relative; 
    overflow:hidden;
}
#slider {
    width: 1000px;
    height: 100%;
    position: absolute;
}
#slider div {
    width:300px; 
    height:100%; 
    float:left; 
}
#today{background:green;}
#yesterday {background:yellow;}
#daysAgo2 {background:orange;}

只需向左和向右滑动滑块即可。当然,扩展此类滑块没有限制。

var sliderWidth = 300;
var slider = $('#slider');
var sliderCount = $('div', slider).length;
slider.width(sliderCount * sliderWidth);

$('.date-nav-prev').click(function () { 
    $('#slider').animate({left: '+='+sliderWidth}, 500);
});

$('.date-nav-next').click(function () {
    $('#slider').animate({left: '-='+sliderWidth}, 500);
});

答案 1 :(得分:0)

您可以使用this plugin

$('#wrapper').cycle({
    fx:     'scrollHorz',
    prev:   '#prev',
    next:   '#next',
    timeout: 0
});

EXAMPLE HERE