2012-04-24 42 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

相關問題