2012-04-24 59 views
0

我目前正在创建一个应用程序,它将成为Android上的一种数字显示。我的问题是我需要显示一个HTML页面,其中有多个区域。 (或者是我目前已经实施的那些盒子),但是这些地区中的每一个都有不止一个物品放入其中。在每个盒子的元素之间的切换在特定的时间之后完成。我现在正在做的是在这段时间过去之后,我只是将新数据加载到已被删除的区域,然后使用webView查看新创建的html文件。然而,这种方法不必要的加载,并需要一些时间与Android设备。如何在经过一段时间后在HTML中更改div的内容,然后再次启动它?

我想学习的是,是否有可能实现不同div之间的每个项目之间的切换与某种js函数?我阅读了一些关于更改divs内容的信息,但是我无法在一段时间之后找到一种方法。

例如,我有3个不同的地区,这是A,B和C.在一个地区我有2个项目将显示10秒和30秒。在地区B只有一个项目要显示。而且在区域C上可以说有3个不同的项目获得了15秒-25秒-10秒的持续时间。另外我必须一次又一次地展示这些物品。有没有办法让这个循环和内容在html每个持续时间之后改变?任何信息或代码片段都会有帮助,因为我不太了解JS或JQuery。

关于这些不同区域内的元素:它们由文本(也包含一些动画),rss feeds,图像,视频,嵌入式htmls组成。

textRender += String.format("<div id='text' style='position:relative; overflow:hidden; width: %dpx; height: %dpx; 
           left: %dpx; top: %dpx'>", widthOfRegio - 10, heightOfRegio,leftOfRegio,topOfRegio); 
textRender += String.format("<div id='innerText' style='position:absolute; %s:" + /*leftOfRegio+*/"0px; top: "+/*topOfRegio+*/"0px; 
width: %dpx; %s'>%s</div></div>", startPosition, widthOfRegio-10, textWrap, toTest); 

与此代码段例如我写每个元素为html文件。而且,我还为每个创建的新元素生成不同的ID。例如,如果我有3个区域像上面的例子,我有3个不同的ID与不同的ID。我用了一些js函数的标签,帮助我,使文本浮左右等

这里是原始生成的HTML如下:

<div id='text' style='position:relative; overflow:hidden; width: 310px; height: 300px; left: 0px; top: 20px'> 
<div id='innerText' style='position:absolute; left:0px; top: 0px; width: 310px; '><iframe src="http://free.timeanddate.com/clock/i31ww8ou/n514/fn6/fs8/fc9ff/tc000/ftb/bas0/bat1/bacfff/tt0/tw1/th1/ta1/tb4" frameborder="0" width="70" height="24"></iframe></div></div> 
<div id='text1' style='position:relative; overflow:hidden; width: 96px; height: 100px; left: 160px; top: -300px'> 
<div id='innerText1' style='position:absolute; left:0px; top: 0px; width: 96px; '><p><em><strong><span style="color:#8b4fff;">Some Text Goes Here</span></strong></em></p></div></div> 
<div id='text2' style='position:relative; overflow:hidden; width: 96px; height: 100px; left: 53px; top: -306px'> 
<div id='innerText2' style='position:absolute; left:0px; top: 0px; width: 96px; '><p><em><strong><span style="color:#8b4fff;">Some Text Goes Here</span></strong></em></p></div></div> 

我使用的那种结构来使文本和rss提要与我的功能一起工作。它需要这2个id来处理,这就是为什么我为一个地区atm创建2个不同的div id。

+0

你能举一些简单的HTML代码为例吗? – pomeh 2012-04-24 08:27:51

+0

我用一段代码编辑帖子,这段代码将它放到我的模板html文件中。将所有这些项目写入该模板html后,我只需触发webview即可显示该html。 – denizt 2012-04-24 08:35:32

+0

我的意思是,原始输出HTML,而不是你生成它的方式,它没有太大的帮助:/ – pomeh 2012-04-24 09:31:03

回答

2

contentAll是包含要随着时间的推移出现在不同区域HTMLS阵列的对象。 3000和2000年是毫秒的功能被解雇(“地域性”,在这种情况下,“regionB”) 看看的jsfiddle也(链接在底部)

$('#regionA').attr('data-content', 0); 
$('#regionB').attr('data-content', 0); 
var contentAll = {regionA: ['first content', 'second content', 'third content'], 
        regionB: ['etc 1', 'the same 2', 'another 3']}; 

changeRegion = function(id) { 
    var $el = $('#'+id), 
    num = $el.attr('data-content'), 
    content = contentAll[id], 
    numMax = content.length; 

    num = (num+1)%content.length; 
    $el.html(content[num]); 
    $el.attr('data-content', num); 
}; 

setInterval(function(){ 
     changeRegion('regionA'); 
    }, 3000); 
setInterval(function(){ 
     changeRegion('regionB'); 
    }, 2000);​ 

http://jsfiddle.net/pVzjU/

的情况下,数你希望每个内容有不同的出现时间:

$('#regionA').attr('data-content', 0); 
$('#regionB').attr('data-content', 0); 
var contentAll = {regionA: [['first content', 1000], ['second content', 2000], ['third content', 3000]], regionB: [['etc 1', 1000], ['another 2', 2000], ['third', 3000]]}; 

var changeRegion = function(id){ 
    var $el = $('#'+id), 
    num = $el.attr('data-content'), 
    content = contentAll[id], 
    numMax = content.length, 
    time = null; 

    num = (num+1)%content.length; 
    time = content[num][1]; 
    $el.html(content[num][0]); 
    $el.attr('data-content', num); 
    console.log(content[num][0], time); 
    setTimeout(function(){changeRegion(id)}, time); 
}; 
setTimeout(function(){changeRegion('regionA')},contentAll['regionA'][0][0]); 

http:// jsfiddle。净/ pVzjU/4

+0

感谢很多miszy,这是我一直在寻找。不过,我有一个关于setInterval函数的问题。是否有可能为每个html元素传递不同的持续时间,因为我需要根据这一点进行更改。 – denizt 2012-04-24 09:39:06

+1

http://jsfiddle.net/pVzjU/4/当然:) – 2012-04-24 10:12:23

+0

这只是完美的工作。非常感谢您的帮助和时间Miszy。你真的让这个应用程序的工作好得多=),但似乎第二区域不会随着时间而改变。我猜这个小错误。现在可以,非常感谢你。 – denizt 2012-04-24 10:23:51

0

可以使用的setTimeout()函数:

var bar = function() 
{ 
    $('#foo').html(Math.random()) 
    setTimeout(bar, 2000) 
} 
setTimeout(bar, 2000) 

下面是示例http://jsfiddle.net/47uRA/

+0

好的,但我如何可以将该功能应用于例如3个不同的地区在HTML?关于这些地区内每个项目的持续时间,我该如何处理?无论如何thnx您的意见 – denizt 2012-04-24 08:41:28

+0

在这种情况下最好使用setInterval。 – 2012-04-24 08:56:14

+0

@Miszy不是不是。在这里看到更多的信息http://zetafleet.com/blog/why-i-consider-setinterval-harmful – pomeh 2012-04-24 09:30:10

2

这里是一个替代版本,在这里工作的演示http://jsfiddle.net/pomeh/HAjrY/

HTML代码

<div class="container"> 
    <div class="hidden" data-display-time="2"> 
     First A content<br /> 
     2 seconds 
    </div> 
    <div class="hidden" data-display-time="4"> 
     Second A content<br /> 
     4 seconds 
    </div> 
</div> 

<div class="container"> 
    <div> 
     Unique B content 
    </div> 
</div> 

<div class="container"> 
    <div class="hidden" data-display-time="3"> 
     First C content<br /> 
     3 seconds 
    </div> 
    <div class="page hidden" data-display-time="6"> 
     Second C content<br /> 
     6 seconds 
    </div> 
    <div class="hidden" data-display-time="3"> 
     Third C content<br /> 
     3 seconds 
    </div> 
</div>​ 

CSS代码

.container { 
    width: 100px; 
    height: 100px; 
    border: solid black 1px; 
    float: left; 
    margin-left: 10px; 
} 

.hidden { 
    display: none; 
} 

Javascript代码

// get all containers 
var $containers = $(".container:has([data-display-time])"); 


function displayNext($container, $pages, hitCount) { 
    // get the index of the next displayed page 
    var nextPageIndex = hitCount % $pages.length, 
     $pageToDisplay = $pages.eq(nextPageIndex), 
     // convert time to milliseconds 
     displayTime = 1000*$pageToDisplay.data("displayTime"); 

    // hide all page, and show the right one 
    $pages.addClass("hidden"); 
    $pageToDisplay.removeClass("hidden"); 

    // init a timer to display the next page, increment hitCount 
    setTimeout(function() { 
     displayNext($container, $pages, hitCount+1); 
    }, displayTime); 
} 

// initialize the process once for each container 
$containers.each(function() { 
    var $container = $(this), 
     $pages = $container.find("[data-display-time]"), 
     hitCount = 0; 

    // nothing to show 
    if($pages.length === 0) { 
     return; 
    } 
    // nothing to rotate with, display the unique page 
    else if($pages.length === 1) { 
     $pages.removeClass("hidden"); 
     return; 
    } 

    // init the rotation process 
    displayNext($container, $pages, hitCount); 
}); 

+0

感谢您的答案pomeh。多数民众赞成在另一个有用的方法,这对我真的很有帮助。 – denizt 2012-04-24 14:01:20

相关问题