0

我目前正在创建一个应用程序,它将成为 Android 上的一种数字显示器。我的问题是我需要显示一个包含多个区域的 html 页面。(或盒子)我现在已经实现了,但是每个区域都有不止一个项目可以放入其中。每个盒子的元素之间的这些切换是在特定时间后完成的。而我目前正在做的是在那段时间过去之后,我只是将新数据加载到已过期的区域中,然后使用 webView 查看新创建的 html 文件。然而,这种方法会导致不必要的加载,并且需要一些时间来使用 android 设备。

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

例如,我有 3 个不同的区域,分别是 A、B 和 C。在 A 区域我有 2 个项目,分别显示 10 秒和 30 秒。在区域 B 上,只有一项要显示。而且在区域 C 上,假设有 3 个不同的项目,它们的持续时间为 15 秒-25 秒-10 秒。我还必须一次又一次地展示这些物品。有没有办法让循环和内容在 html 上的每个持续时间后发生变化?任何信息或代码片段都会有所帮助,因为我对 JS 或 JQuery 了解不多。

关于这些不同区域内的那些元素:它们由文本(也有一些动画)、RSS 提要、图像、视频、嵌入的 html 组成。

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 的不同框。我将这些标签与一些 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。

4

3 回答 3

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 );
});

​</p>

于 2012-04-24T13:22:46.337 回答
2

contentAll 是一个对象,其中包含您希望随着时间的推移出现在不同区域的 html 数组。3000 和 2000 是函数被触发的毫秒数(在这种情况下是“regionA”和“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.net/pVzjU/4

于 2012-04-24T09:26:21.353 回答
0

您可以使用 setTimeout() 函数:

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

这是示例http://jsfiddle.net/47uRA/

于 2012-04-24T08:37:17.967 回答