【问题标题】:Same code acts differently on website and jsfiddle相同的代码在网站和 jsfiddle 上的行为不同
【发布时间】:2015-10-31 05:39:17
【问题描述】:

我有一些代码旨在允许用户通过单击横向滚动,这在 jsfiddle 上运行良好,但在我的实际网站上却完全不同。在我的网站上,您可以向右滚动一次,但不能再滚动一次,当您向后滚动时,它显然会向右滚动到左侧边框之外。

这是我网站上问题的实时链接:rouvou.com/error

这是fiddle。

我从字面上复制并粘贴了代码。我在我的网站上使用 jQuery 1.10.0,而 jsfiddle 最接近的 jQuery 版本是 1.10.1,但我无法想象这会导致这种不同的行为。我发布的 html 是整个页面上唯一的代码。在这两个地方,我都在 Ubuntu 上使用 Chrome 版本 42.0.2311.152(64 位)。

为什么代码在 jsfiddle 和我的网站上会有不同的结果?

$(document).ready(function() {
  var $item = $('div.item'),                 //Cache your DOM selector
    visible = 2,                             //Set the number of items that will be visible
    index = 0,                               //Starting index
    endIndex = ($item.length / visible) - 1; //End index

  $('div#arrowR').click(function() {
    if(index < endIndex) {
      index++;
      $item.animate({
        'left': '-=300px'
      });
    }
  });

  $('div#arrowL').click(function() {
    if(index > 0) {
      index--;
      $item.animate({
        'left': '+=300px'
      });
    }
  });
});
#container {
  width: 340px;
  height: 50px;
}
#list-container {
  overflow: hidden;
  width: 300px;
  float: left;
}
.list {
  background: grey;
  min-width: 1400px;
  float: left;
}
#arrowR {
  background: yellow;
  width: 20px;
  height: 50px;
  float: right;
  cursor: pointer;
}
#arrowL {
  background: yellow;
  width: 20px;
  height: 50px;
  float: left;
  cursor: pointer;
}
.item {
  background: green;
  width: 140px;
  height: 40px;
  margin: 5px;
  float: left;
  position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>

<div id="container">
  <div id="arrowL">
  </div>
  <div id="arrowR">
  </div>
  <div id="list-container">
    <div class='list'>
      <div class='item'>1
      </div>
      <div class='item'>2
      </div>
      <div class='item'>3
      </div>
      <div class="item">4
      </div>
      <div class='item'>5
      </div>
      <div class='item'>6
      </div>
      <div class='item'>7
      </div>
      <div class="item">8
      </div>
    </div>
  </div>
</div>

【问题讨论】:

  • 好吧,好消息是我复制了错误的行为。坏消息是这台计算机上没有加载 1.10.1,所以我无法测试它在该版本下是否有任何不同。 (编辑:在 1.11.1 和 1.9 下。它可以正常工作;你确定这不是 1.10.0 中的错误吗?)
  • @Samurai8 它适用于我尝试的每个 jquery 版本的 jsfiddle,因此您可以尝试使用随机版本。例如 1.9.1 肯定有效。
  • @Jasen 你是什么意思?
  • 加载页面显示 404 错误。但是 fuyushimoya 的回答似乎是你问题的原因。

标签: javascript jquery jquery-1.10


【解决方案1】:

似乎正如你所说,1.10.0 有一些错误。我创建了你的jsfiddle 的修改版本,唯一的区别是jQuery 使用的是1.10.0 版本,你可以看到它现在就像你的网站一样工作。

见jQuery 1.10.1 Change log:

  • 效果

#13937:finish() 只完成集合中的最后一项是 .animate()d。

#13939: 1.10.0 打破相对动画

还有issue ticket#13939:

  • 说明

相对动画(使用 += 或 -=)在 1.10.0 中被破坏。例如, $('h1').animate({marginLeft: '+=100px'});不工作。

因此,您可能必须切换到版本 1.10.x,其中 x 是最新版本,因为它们的更改主要是问题修复,而不是功能更改。

【讨论】:

  • 啊该死的真的吗?在我的情况下你会怎么做?升级到 1.10.1?
  • 是的,如果可能的话,您可以使用1.10.x,其中x 是最新的,因为它可能与问题修复有关。您可以查看changelogs 和all jquery versions 来决定哪个版本适合您。
  • IMO 我会尝试切换到最新的稳定版本,并开始修复由于 lib 更新而中断的代码,但同样,当问题是关于 lib 升级,甚至是哪个版本时,它变得基于意见。
  • 根据您的经验,您认为升级到 1.10.1 会导致我现有代码出现错误吗?我认为微小的版本颠簸只是为了修复错误。
  • 如您所说,微型版本主要用于修复错误,从更改日志来看,它不会对您现有的代码造成问题。
【解决方案2】:

问题是1.10.0确实有bug,但是对于以后有这个问题又不想升级的人,我想办法让这个功能在1.10.0上也能正常工作。

    <div id="container">
        <div id="arrowL">
        </div>
        <div id="arrowR">
        </div>
        <div id="list-container">
            <div class='list'>
                <div class='item'>1
                </div>
                <div class='item'>2
                </div>
                <div class='item'>3
                </div>
                <div class="item">4
                </div>
                <div class='item'>5
                </div>
                <div class='item'>6
                </div>
                <div class='item'>7
                </div>
                <div class="item">8
                </div>
            </div>
        </div>
    </div>

    <script type="text/javascript">
    $(document).ready(function() {

        var $item = $('div.item'), //Cache your DOM selector
            visible = 2, //Set the number of items that will be visible
            index = 0, //Starting index
            endIndex = ( $item.length / visible ) - 1; //End index
            animatepixels = 0

        $('div#arrowR').click(function(){
            if(index < endIndex ){
              index++;
              animatepixels = 0 - (index * 300)
              $item.animate({'left':animatepixels+'px'});
            }
        });

        $('div#arrowL').click(function(){
            if(index > 0){
              index--;
              animatepixels= 0 - (index * 300)
              $item.animate({'left':animatepixels+'px'});
            }
        });

    });
    </script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2013-09-16
    • 2010-10-24
    • 2021-02-27
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多