2013-04-11 67 views
1

我慢慢地疯了。我正在尝试在网页上放置文字报告。它会在监视器上运行,甚至没有连接到它的鼠标。它只是显示建筑物周围的一些信息。有一件事我想补充说,我认为这是一个好主意。几个人可以编辑的底部滚动文本消息。Javascript动态邮件滚动条

我使用的是this,因为它是唯一一个似乎足够光滑的滚动条,并且没有那么神秘,我需要在开发团队中才能理解。

由于我不能只更改div文本并让爬虫滚动它。我试图把它放在更新面板中设置div文本,同时它正在渲染和reInit crawler.The控制messasge的div是在一个名为`crawlerUpdate'的UpdatePanel中msgString是一个全局的Javascript变量,我用它来保存div复位时的值。

我已经设置了var oCrawlerUpdate = setInterval(function() { updateCrawler() }, 10000);更新消息每10秒(只是用于测试,投票会更长)

我的更新履带式看起来像:

function updateCrawler(){ 
     msgString = ''; 
     $.getJSON('getCrawlerText.aspx', function (data) { 
      $.each(data, function (index, elem) { 
       msgString += index + 1 + '. ' + elem.message + '- - -'; 
      }); 

      if ($('#textCrawler').html() != msgString) 
       __doPostBack("<%= this.postBackVehicle.UniqueID %>", ""); 
     }); 
    } 

这里就是我开始失去它。这有点超出我的理解,但它有点作品。 我不得不注册一个启动脚本。我假设在更新面板回传时被注入并执行。

ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.postBackVehicle); 
ScriptManager.RegisterStartupScript(this.crawlerUpdate, this.GetType(), "reInitCrawler", "if(!msgString)msgString=\"Loading ticker message...\";$(\"#textCrawler\").html(msgString);initCrawler()", true); 

它在Firefox中100%有效。我更改数据库中的消息,并在接下来的10秒内滚动程序重新启动新消息。当我在IE7中加载它时,人们打算使用它,我在jQuery(1.4.1)文件的某处发现一个未定义的错误,而不是在我的代码中,我不知道从哪里开始。很久以前,当我测试时,我能够在添加滚动条之前每次都显示新消息。我可以看到该消息在div中闪烁,但IE后面的错误会立即出现。

我还应该指出,onLoad div是空白的,并在第一次通过它的作品。它会滚动我的加载消息,直到10秒后的第一次轮询。我几乎是积极的,我正在使这种指数级的难度超过需求,但我不知道。

我仍然在谷歌搜索其它滚动的工具,但是这是接近我一直和我想知道为什么IE是给我消化不良。我知道IE是一个善变的野兽,我希望这很容易。我很亲密,我想继续前进。

编辑:我并没有完全使用所提供的答案,但我甩了滚动库和使用两种功能。

function resetCrawler() { 
     var contWidth = $('#scrollContainer').width(); 
     var blockWidth = $('#textCrawler').width(); 
     var moveLen = (contWidth + blockWidth) * -1 
     var timeFigure = (-1 * moveLen)/.05; 
     //console.log("Container: " + contWidth + " Block: " + blockWidth + " MovementSpan: " + moveLen + " TimeSpan: " + timeFigure); 

     $('#textCrawler').html(msgString).css('left', contWidth).animate({ left: moveLen }, timeFigure, 'linear', function() { resetCrawler() }); 
    } 

    function updateCrawler(){ 
     msgString = ''; 
     $.getJSON('getCrawlerText.aspx', function (data) { 
      $.each(data, function (index, elem) { 
       msgString += index + 1 + '. ' + elem.message + '- - -'; 
      }); 

      if ($('#textCrawler').html() != msgString) { 
       resetCrawler(); 
      } 
     }); 
    } 

我只是做了一个px每毫秒计算,并使其滚动相同的速度,无论多长时间的消息。我怀疑我遇到了与你发布的链接相同的问题,我在jQuery中调用了一些东西。我只是在完成后再次调用它,这是由内部div的宽度决定的。更多的工作要做,但我称它足够好...

谢谢你的帮助。

+0

您多久看一次更新文本? – 2013-04-11 13:55:52

+0

大概检查5分钟的时间间隔。也许更长。 – Bmo 2013-04-11 14:46:38

+0

好的,看看我在答复中引用的帖子。如果这不能回答你的问题,我可能会有更多的想法。 – 2013-04-11 14:47:28

回答

0

我所有的服务器端代码,我是反对的大部分时间定时器,但如果你正在做的是滚动的一些文字,你有没有鼠标输入,这将需要运行其他脚本,为什么不只是使用计时器?

显式设置您的AJAX调用不缓存结果,并使用计时器每隔一段时间调用一次您的AJAX来更新文本。

我在这里看到的唯一问题是确保您仍然平滑地滚动,而不会影响执行移动的能力。


更新:我发现this post,实际上告诉你如何做到这一点,使用可以匹配你正在寻找做一个例子。


让我知道如果您有任何疑问。祝你好运! :)