【问题标题】:Scroll to next div on body click在身体点击时滚动到下一个 div
【发布时间】:2014-02-17 10:28:40
【问题描述】:

我有许多 div 都带有类 '.slide' 和一个滚动功能,当单击 .slide div 时滚动它们。

请看这里: http://codepen.io/thomasjwpayne/pen/KFotg

但是,我试图在单击正文而不是幻灯片时使该功能起作用。另外,因为幻灯片显示为内联块,所以当下一张幻灯片已经完全在视口中时,我需要它滚动到幻灯片。

有人对此有任何指导吗?

【问题讨论】:

    标签: jquery onclick next scrollto css


    【解决方案1】:

    在我的示例中,您必须在某处保留跟踪器 - 我使用 body 来保留 data-* 属性,该属性存储当前可见的当前 jQuery 对象。

    var currentSlide = $('body').data( 'current-slide', $('div.slide').eq(1) );
    

    然后将$.click() 处理程序从$('div.slide') 切换到$('body')

    $('body').click(function(e){
       e.preventDefault();
       //get the current slide index from the body tag.
       $this = currentSlide.data( 'current-slide' );
       $next = $this.next('div.slide');
    
       if($next.length) {
            $next.scrollTo($next.attr('id'));
            //Save the next slide as the current.
            $('body').data( 'current-slide', $next );
       } else {
            //Throw us back to the top.
            $('div.slide:first').scrollTo($('div.slide:first').attr('id'));
            //Save the first slide as the first slide, which 
            //Cycles us back to the top.
            $('body').data( 'current-slide', $('div.slide:first'));
       }
    
       $(".slide a").click(function(e) {
           e.stopPropagation();
       });
    });
    

    CodePen 演示: http://codepen.io/anon/pen/tBqhJ

    【讨论】:

    • 谢谢!这使得主体单击工作,但当多个幻灯片在视口中连续放置时似乎仍然存在一些问题。例如,当我有一排三张幻灯片时,主体必须单击 3 次才能进入下一行。我想知道是否有办法让它在这些情况下单击一下就跳到下面的行。
    • 当然是!交换$.click() 处理程序以进入containers 而不是slides 自己:codepen.io/anon/pen/klICL
    • 抱歉,我的意思是不限制容器的宽度。我试图在浏览器宽度允许的范围内保持尽可能多的幻灯片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2021-06-27
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多