【问题标题】:Jquery: Have it keep selecting the next image without me having to put ".next().next().next() etcJquery:让它继续选择下一个图像,而我不必输入“.next().next().next() 等
【发布时间】:2010-07-15 02:05:30
【问题描述】:

使用我的代码,我可以让一个 div 滚动浏览 4 个图像,但是如果您查看代码,我必须不断添加“.next”才能让它滚动到另一个图像。我不想确定要在 jquery 中滚动的图像数量,我希望 jquery 继续在 div 中查找尽可能多的图像,滚动浏览所有图像,然后滚动回顶部。看看我的代码。我不想使用其他插件,因为与多 KB 插件相比,我几乎已经用几行代码完成了我想做的事情。

ps:我不知道为什么需要'-165px',但是当从图片滚动到图片时它可以完美对齐。

jquery:

jquery:

$(document).ready(function(){
    $('.rotate_container').everyTime(10, function (){
        $('.rotate_container').animate({scrollTop: $('img').offset().top - 165}, 2000).delay(1000)
        .animate({scrollTop: $("img").next().offset().top - 165}, 2000).delay(1000)                   
        .animate({scrollTop: $("img").next().next().offset().top - 165}, 2000).delay(1000)
        .animate({scrollTop: $("img").next().next().next().offset().top - 165}, 2000).delay(1000)
    });
});

有什么想法吗?

【问题讨论】:

  • 能否也粘贴html代码?
  • 已发布。并且“.everytime”是我发现的 timers.js 插件的一部分,它会循环播放内容,因为我自己不知道该怎么做。

标签: jquery scrolltop


【解决方案1】:

我没有测试它,但这似乎可以工作

$(document).ready(function(){
    var container = $('.rotate_container');
    var images = container.find('img');
    container.everyTime(10, function (){
        images.each(function() {
            container.animate({scrollTop: $(this).offset().top - 165}, 2000).delay(1000);
        });
    });
});

【讨论】:

  • 这就是我一直在寻找的答案,你太棒了。嘿,如果我可能会问,为什么开头有两个变量?我认为它们几乎只是为了重用代码,但您每个只使用一次“容器”和“图像”。还有别的原因吗?它会加速代码还是什么?谢谢你,我真的很感谢你的帮助。
  • 哦,嘿,还有,你知道当鼠标在静止的图像上移动时如何暂停它吗?因此,如果它正在滑动到下一个图像并且该人将鼠标悬停在它上面,那么当它到达它正在滑动到的图像时,它会暂停,直到该人移开鼠标,然后它会继续滑动到下一个图像。非常感谢。
  • 是的,缓存您的 jQuery 对象以供重复使用始终是一种好习惯。我不得不多次返回并重构代码,现在我从缓存开始。此外,您使用了两次$('.rotate_container'),因此值得努力进行缓存。我会考虑一下你暂停的问题并回复你。
【解决方案2】:

【讨论】:

    【解决方案3】:

    可能会检查 jCarousel 或者它的小兄弟 jCarouselLite,它可以轻松实现图像滚动效果。

    对于上述问题的解决方案,您可以将第一个 img 分配给变量,然后在回调中递增它。在以下代码中,警报输出为“第二”:

    <div>First</div>
    <div>Second</div>
    <script type="text/javascript">
    $(document).ready(function(){
        var test = $('div');
            test = test.next();
            alert(test.html());
    });
    </script>
    

    所以,修改你的代码:

    $(document).ready(function(){
        var img = $('.rotate_container img');
        $('.rotate_container').everyTime(10, function (){
            $('.rotate_container').animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000)
            .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000)
            .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000)
              .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000)
        });
    });
    

    等等。

    可能也可以使用函数对其进行修改以使其更加简洁。

    【讨论】:

      【解决方案4】:

      递归。编写一个函数来做你想做的事(我会帮助你编写特定的代码,但我不知道你要做什么)。让函数获取第一张图像。在函数中做你想做的事,在你关闭函数之前调用你所在的函数并将 .next() 变量发送给它。

      【讨论】:

      • 我想要的只是一个图像滚动条,它显示一张图像几秒钟,然后向上滑动并显示下一张图像,在这里我找到了我想要构建的内容。 papermashup.com/demos/jquery-slideshow - 但是使用我上面的代码,它工作得很好,我唯一的问题是我必须在 jquery 代码中告诉它到底有多少图像要向下滚动,注意最后 3 行是相同,但每个都添加“.next()”我不知道如何制作它,以便脚本不断寻找图像。现在它只经过我事先确定的数量。
      【解决方案5】:

      我的解决方案要求您在容器中添加一个额外的 div 和一个 css 规则。它是这样的:

      <script type="text/javascript">
      $(document).ready(function(){
          var top = 0;
          var up = true;
          var wrap = $(".rotate_container > div ") // shortcut :)
      
          function slide() {
              wrap.animate( { "top" : top+"px" }, 400 );
      
              if( Math.abs( top ) > wrap.height() ){ // if all inner_wrap is outside container
                  up = false; 
              }
              else if( top >= 0 ) {
                  up = true
              }
              if( up ) top -= 165;
              else top += 165;
      
              setTimeout( slide, 500 ) // call function slide after 500 ms
          }
          setTimeout( slide, 500 ) // call function slide after 500 ms
      });
      </script>
      
      <style type="text/css">
      .rotate_container {
          max-height:292px;
          max-width:760px;
          height:292px;
          width:760px;
          overflow:hidden;
          padding:0;
          margin:0;}
      
      .rotate_container > div {
          position: relative;
          top: 0; left: 0;
      }
      
      .rotate_container img {
          height:292px;
          width:760px;}
      </style>
      
      
      <div class="rotate_container grid_12">
          <div id="inner_wrap">
              <img src="{{ MEDIA_URL }}/employlogo.png" class="top" />
              <img src="{{ MEDIA_URL }}/employlogo.png" class="middle" />
              <img src="{{ MEDIA_URL }}/employlogo.png" class="midbottom" />
              <img src="{{ MEDIA_URL }}/employlogo.png" class="bottom" />
              <img src="{{ MEDIA_URL }}/employlogo.png" class="verybottom" />
          </div>
      </div>
      

      嗯,它不漂亮,但它有效。一开始我误会你的sn-p了,抱歉。

      【讨论】:

      • 嘿,它有效,而且它很小,很好。如果可以的话,还有一个问题,我将如何更改这一行,以便不再开始逐步向上滚动到顶部,而是在一个流畅的动画中将您一直射回顶部?........ .......... "else top += 165;"
      • else top = 0;而不是else top += 165;。或者else { top = 0; wrap.animate( { "top" : top+"px" }, 2000 ); setTimeout( slide, 2000 ); return; },如果你想让这个动画花更多的时间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2023-04-07
      • 2014-01-04
      • 2023-03-08
      • 2015-07-28
      相关资源
      最近更新 更多