【问题标题】:JqueryUI (Ajax) Hide() works, Show() does notJqueryUI (Ajax) Hide() 有效,Show() 无效
【发布时间】:2015-11-23 18:25:39
【问题描述】:

我对 JQuery/Ajax 很陌生,而且很长时间没有编写任何 HTML,所以如果这是一个愚蠢的问题,请原谅我。我已经读了相当多的书,但我很茫然。

简而言之,在完成FlipClock.js 倒数计时器后,时钟应该会从页面向右滑出,这样可以正常工作。但是,在启动计时器时,我希望 div 从右侧滑到页面上,但我无法让 div 移动。这是我的代码:

function showTimer() {
$(".clock").show("slide", {direction: "left"}, 2000); //Does nothing, seemingly
timerRunning= true;
var clock = $('.clock').FlipClock(3, {
    countdown: true,
    clockFace: 'MinuteCounter',
    callbacks: {
        stop: function() {
            timerStopped();
        }
    }

});
}

function timerStopped() {
        console.log("Test function on clock stop!");
        $('.clock').hide('slide',{direction:'right'},1000);

        }

我还没有为 clock div 设置任何 CSS,所以我不确定是否需要将其置于屏幕之外,但 hide 可以,所以我有点困惑。

任何意见或建议将不胜感激。

谢谢

【问题讨论】:

  • 你在其他地方调用 showTimer() 吗?
  • 是的,抱歉,上面有一个 switch 语句调用它。只从一个地方调用,并且只调用一次。

标签: javascript jquery html ajax jquery-ui


【解决方案1】:

经过长时间的调试,终于找到了解决办法。请在 jsfiddle 中尝试一下:https://jsfiddle.net/mLkfyrd8/1/

可能出错的地方:

  1. 忘记包装在 $(document).ready()
  2. 忘记包含 jQuery/jQuery UI 库
  3. 忘记调用 $(".clock").hide()

更新:时钟向上/向下移动似乎存在问题。固定版本见this new fiddle(添加填充)。

演示:

$(document).ready(function() {

    $(".container").hide();

    function showTimer() {

        $('.clock').FlipClock(3, {
            countdown: true,
            clockFace: 'MinuteCounter',
            callbacks: {
                stop: function() {
                    timerStopped();
                }
            }

        });

        $(".container").show("slide", {direction: "left"}, 2000);

    }


    function timerStopped() {
        console.log("Test function on clock stop!");
        $('.container').hide('slide',{direction:'right'},1000);
    }

    showTimer();

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://rawgit.com/objectivehtml/FlipClock/master/compiled/flipclock.css">
<script src="https://cdn.rawgit.com/objectivehtml/FlipClock/master/compiled/flipclock.min.js"></script>

<div class="container" style="padding: 20px;"><div class="clock"></div></div>

【讨论】:

  • 啊哈,看来我在调用show之前没有调用hide!这就解释了。非常感谢您的帮助!
  • 我注意到一件事,当将 div 滑入和滑出时,它会向上移动一小部分,只是轻微的,但有点烦人。关于如何解决这个问题的任何想法?
  • @Tony 是的,我也注意到了这一点。 :)
  • @Tony 只有在将 div 设置为 FlipClock 时才会这样做。如果你不这样做,它就不会发生。例如。 jsfiddle.net/6aeq0krf div 不会向上/向下移动。也许您可以尝试将时钟 div 包装在另一个 div 中并为容器设置动画?例如。 &lt;div class="container"&gt;&lt;div class="clock"&gt;&lt;/div&gt;&lt;/div&gt; 和动画 .container 而不是 .clock?
  • @Tony 已修复!只是在clockContainer 中添加了一些填充。很快就会更新我的答案...
【解决方案2】:

您应该为时钟 div 设置尺寸和位置。用例如查找它firebug(按 F12)并搜索您的时钟 div。在那里你应该看到 div 在哪里,它可能在你的视口之外。你得到控制台日志输出了吗?

【讨论】:

  • 此时时钟出现在页面的最左上角。我会尝试在它上面使用一个固定的位置。谢谢。
  • 尝试给position:absolute;和top:300px;left:300px;width:100px;height:100px;。现在你应该看到你的时钟,并且它在哪个方向上被切换了。
  • 时钟现在出现在页面的中间,但它只是在刷新时出现,而不是滑动。其他效果似乎都不起作用,例如爆炸。
  • 它当前被这样调用: if (document.readyState === "complete") { console.log("Starting timer");显示定时器(); }
  • 你好像在用jquery?您将错误的参数传递给 show 方法。可能是.show( duration [, easing ] [, complete ] ) 或.show( options ) 或.show( [duration ] [, complete ] ) 或show()。见api.jquery.com/show。尝试不带任何参数的 show 调用,看看它是否出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2011-11-11
相关资源
最近更新 更多