【问题标题】:Slider handle breaks when adding .animate()添加 .animate() 时滑块句柄中断
【发布时间】:2011-08-19 14:57:54
【问题描述】:

我正在尝试构建一个使用数组数据的滑块控制条形图。我已经设法使用一些非常混乱的代码here 让它工作,但我制作了一个更简洁的版本here,它应该可以工作,但不能。实际上,它可以完美地从数组中捕获数据,但是当我输入为框设置动画的代码时它会中断。然后滑块停止移动,并且只有在其中包含实数(即第 1 列)的情况下框才会显示动画。我只能发布两个链接,但是如果您将该文件重命名为 labourslider2_noslide.html,您可以看到带有工作滑块的版本。

让我感到困惑的是,尽管滑块手柄损坏,但数字仍在传递给变量(column1、column2 和 column3),并且其中包含实数的框会动画,但没有一个变量框做一件事。我不明白为什么会这样。

我是 jquery 的新手,所以它可能真的很愚蠢。希望这真的很愚蠢。 ;)

这是我的代码:

<!DOCTYPE html>
<html class="no-js">
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <!--<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>-->
    <script type="text/javascript" src="http://img.seiu.org/js/custom-link-tracking.js"></script>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js" type="text/javascript"></script>
<script> 



 $(document).ready(function () {

var updateSizes = function (s) {

    var column1 = s[0];
    var column2 = s[1];
    var column3 = s[2];


     return "Column 1: " + column1 + ", Column 2: " + column2 + ", Column 3: " + column3;

},
laborData = Array(14);

laborData[0] = [100, 6, 38];
laborData[1] = [300, 6.5, 38.5];
laborData[2] = [500, 7, 39];
laborData[3] = [6.5, 7.5, 40];
laborData[4] = [7, 8, 40.5];
laborData[5] = [8, 9, 42];
laborData[6] = [8.5, 9.5, 42.5];
laborData[7] = [9, 10, 43];
laborData[8] = [9.5, 10.5, 44];
laborData[9] = [10, 11, 44.5];
laborData[10] = [10.5, 11.5, 45];
laborData[11] = [11, 12, 46];
laborData[12] = [11.5, 12.5, 46.5];
laborData[13] = [12, 13, 47];



$("#slider").slider({
    range: "max",
    min: 0,
    max: 13,
    step: 1,
    slide: function (event, ui) {
      $("#amount").val(updateSizes(laborData[ui.value]));

     $("#box").animate({"height":300});
     $("#box2").animate({"height":column2});
     $("#box3").animate({"height":column3});    




    }
});


//    $("#slider-men").slider({
//        range: "max",
//        min: 0,
//        max: 13,
//        step: 1,
//        slide: function (e, ui) {
//            $("#amount-men").val(updateSizes(laborData[ui.value]));
//        }
//    });

});
</script>

</head>
<body>
<div id="slider"></div> 
<label for="amount">Data:</label> <input type="text" id="amount" style="border:0;  color:#f6931f; font-weight:bold;width:300px;" /> 

<p>

<div id="box" style="background:#98bf21;height:100px;width:100px;margin:6px; float: left;">
</div>
<div id="box2" style="background:#98bf21;height:100px;width:100px;margin:6px; float: left;">
</div>
<div id="box3" style="background:#98bf21;height:100px;width:100px;margin:6px; float: left;">
</div>



</body>
</html>

是的。任何帮助都会很棒。我难住了。

【问题讨论】:

    标签: javascript jquery arrays slider jquery-animate


    【解决方案1】:

    您必须在全局范围内定义 column1/2/3 变量,因为您在一个函数中设置它并在另一个函数中访问它。

    我已经设置了一个小提琴并修复了它,看看。我相信您希望盒子动画是并行的,所以我将盒子动画的排队设置为 false

    工作demo

    【讨论】:

    • @stealthyninja - 下次好运:)
    • AAsdnsadhkfgfdjsd!当然!哇,这太明显了。啊哈哈,谢谢!现在要弄清楚如何让它向上动画。
    【解决方案2】:

    在我看来,您正在导入 jQuery AFTER 您自己的脚本。这将导致原始脚本无法开始初始化。至少在您提供的链接中是这种情况(干净的版本)。

    【讨论】:

    • 我不确定我是否理解。调用所有 jquery 源后,该脚本将嵌入页面中。无论哪种方式,我都摆脱了无关的脚本,但它仍然无法正常工作。我错过了什么吗?
    • 我主要查看的是我的 Firebug 日志,它给了我独特的警告“$ 未定义”,这通常表明导入顺序错误。我回家后会调查的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多