【问题标题】:Jquery Animate works randomlyJquery Animate 随机工作
【发布时间】:2011-10-24 11:06:10
【问题描述】:

基本上我有一个喊话框,新的喊话会添加到喊话框的底部。 我希望每个喊声都以动画方式向下滚动。

问题:它只在它想要的时候才动画..如果你幸运的话,大约是每 10 次喊叫..

现在我尝试应用 .stop() 和 .dequeue() 其他一些事情来弄清楚它为什么会随机发生

这是我正在使用的代码..

function tbSingleScroll(){
if (tbscroll <= 0) {
    $('#shouts').animate({scrollTop: $('#shouts')[0].scrollHeight});
}
}

现在因为它是一个实时的喊话箱,并设置为每 1 秒更新一次以检查新的喊声。 它还将滚动设置为 1 秒。 我有一个倒计时函数,它每秒调用这个函数来向下滚动。

现在人们可以阅读之前的呼喊并向上滚动我添加了一个 20 秒的计时器 使用此代码

$("#shouts").scroll(function () { 
currentScrollTop = $("#shouts").scrollTop(); 

if (tempScrollTop > currentScrollTop ) {
    tbscroll = 20;
}
tempScrollTop = currentScrollTop;
});

现在有没有更好的方法来设置滚动? 在应用之前是不可能向上滚动的,因为它只会让你锁定在喊话框的底部,因为它被设置为每秒向下滚动。 现在它检测到您已经向上滚动并在它调用向下滚动之前放置 20 秒。

所以我认为它发送了太多请求而没有做任何事情。

如果我能解决这个问题,我将不胜感激,这样我就可以对每个传入的喊声产生很好的影响。 此外,任何有助于更好地滚动的帮助都会很好..

【问题讨论】:

  • 我认为更好的方法是:如果检查新喊声的 ajax 脚本返回 true,则根据需要滚动尽可能多的新项目。不要将滚动设置为 1 秒。 (此外,让脚本每秒检查一次可能会导致严重的过载)。
  • 嘿,谢谢你的建议,我把卷轴移到了

标签: php jquery


【解决方案1】:

这取决于您的喊话框小部件。
如果它有 api,您可以挂钩事件侦听器或回调到 new shout 事件,以处理您的所有滚动。
如果它不提供类似 api 的任何东西,或者它没有触发任何事件,您可能应该调用一个函数,该函数每 x 秒滚动一次喊话框。
我个人认为,如果用户正在阅读喊话框,您应该停止自动滚动。我发现尝试阅读随机向下滚动的内容非常烦人。所以我的建议是在用户滚动、聚焦或点击时停止滚动(取决于您的喊话框标记)。
这是我的想法:

$('#shouts').bind('scroll',function(e,data){
    //if the user has triggered it, we should stop the auto-scroll 
    if(data === undefined) 
        {
             clearInterval($('#shouts').data('scrollInterval'));
        }
});
var animationDuration = 1000; // 1 second
$('#shouts').data('scrollInterval',setInterval(function(){
    var shouts = $('#shouts').get(0);
    if(shouts.scrollTop < shouts.scrollHeight)
        return;
    $('#shouts')
        .stop()
        .animate({scrollTop: shouts.scrollHeight},animationDuration);
},1000));

【讨论】:

  • 嘿.. 这是非常有用的信息。我已将滚动函数的调用移至 if(talk_jax.readyState == 4) { 它似乎只是现在才向下滚动新的呼喊 基本上没有用 PHP 和 Javascript 编写的 API。平面文件检查以使用 refresh.txt 检查新的呼喊以检查更改的数据,然后如果更改则从 MySQL 数据库获取呼喊。我现在遇到的唯一问题和问题是.. 导航页面时,它会在页面加载时滚动到底部,然后跳过一个 lil,留下 2-3 个喊叫丢失,您必须手动向下滚动才能阅读..
  • 这可能是由于向下滚动,然后 Shoutbox 仍在加载图像以及它周围的图像,它会跳起来.. 有没有办法把它锁定到底部.. 这是我每 1 秒滚动一次以使其始终位于底部的原因之一。更改页面时的 ESP.. 使用上面编写的代码.. 非常感谢您抽出宝贵时间来做这件事.. 非常感谢我只是有一个问题.. 谈话框什么时候会再次自动开始向下滚动?有没有办法让他们到达页面底部时自动恢复?
  • 对不起,我还想补充一点,将对滚动函数的调用移动到 if(talk_jax.readyState == 4) { 已经解决了我的 .animate 不工作的问题。它现在正在工作.我只是在上面提到了一个滚动问题。
  • 如果您因为图像未加载而导致容器大小出现问题,也许您应该在呼喊中预加载图像,并且只有在它们完全加载后才呼喊消息。为此,您所要做的就是创建一个new Image 对象,附加一个回调,将消息喊到它的load 事件,然后相应地设置src 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多