【问题标题】:How can I display only a certain numbers of items contain in an Array?如何仅显示数组中包含的特定数量的项目?
【发布时间】:2016-01-20 06:35:47
【问题描述】:

我在 AS3 中有这段代码

var products:Array;
var list:Sprite = new Sprite();
function complete(e:Event):void {
    addChild(list);
    products = JSON.parse(loader5.data) as Array;
    for(var i:int = 0, l:int = products.length - 1; l >= 0; i++, l--){
    createListItem(i, products[l]);
        if(products.length >=10){
            next.visible=true;
        }
}
    showList();
}

它显示了我的表数据库中包含的所有产品的列表。

现在我添加了if(products.length >=10){,它正在工作。

我想补充

`if(products.length >=10){` 
What shoud I put here for showing only 10 products. 
next.visible=true;
next.addEventListener(MouseEvent.CLICK, show10Next);
}

function show10Next(event:MouseEvent){
What should I put here for showing the 10 next products ? 
}

------------------------------------------ ----------------------------------------- 编辑

有了 Aaron 的回答,这就是我所做的:

function complete(e:Event):void {
    addChild(list);
    products = JSON.parse(loader5.data) as Array;
    feedbackText.text = "complete";
    showNext() ;
}
function showNext():void {
    var currentNumShowing:int = list.numChildren;
    var nextNumShowing:int = Math.min(currentNumShowing + 10, products.length);
    for(var i:int = currentNumShowing; i < nextNumShowing; i++){
        createListItem(i, products[i]);
    }
    next.visible = nextNumShowing < products.length;
}

那么现在我该如何添加 next.addEventListener(MouseEvent.CLICK,next10);

(因为showNext 不是MouseEvent,所以我做不到next.addEventListener(MouseEvent.CLICK,showNext);...)

其次,我的代码从头到尾显示产品(for(var i:int = 0, l:int = products.length - 1; l &gt;= 0; i++, l--){。我怎样才能保留它?

我试过了:for(var i:int = currentNumShowing, l:int = products.length - 1; i &lt; nextNumShowing;l &gt;= 0; i++, l--){ 但它不起作用(错误 1084 期望在分号之前出现右括号并期望在右括号之前有分号)

【问题讨论】:

  • 反对票是怎么回事?这是一个合法的问题(这个问题已经被问到 php 这里:link] 或这里 [link] (stackoverflow.com/questions/1921421/…) 但从来没有问过 AS3。
  • 无法解释的否决票令人讨厌且无益。我认为你的问题不是很清楚。您是否要加载所有产品并且一次只显示 10 个?还是您一次从服务器加载 10 个?
  • 感谢您的解释。我的意思是“加载所有产品,一次只显示 10 个”(如果可能的话)。
  • 我发布了一个答案,但实际上还有另一个问题:您是否想再显示 10 个项目并保留现有项目,例如 10 个、20 个、30 个等,还是要一次只显示 10 个项目(页面),例如项目 1-9,然后是项目 10-19,然后是项目 20-29,等等?
  • 谢谢你的答案。第二个(一次只有 10 个项目(页),如项目 1-9,然后项目 10-19 ......等等)

标签: arrays actionscript-3


【解决方案1】:

如果您只想从 products 数组中一次显示 10 个,您可以创建一个函数来显示数组的切片,如下所示:

const itemsPerPage:uint = 10;

var currentPageIndex:int = 0;

function displayPage(pageIndex:int):void {
    list.removeChildren();

    currentPageIndex = pageIndex;

    var firstItemIndex:int = pageIndex * itemsPerPage;
    var lastItemIndex:int = Math.min(firstItemIndex + itemsPerPage, products.length - 1);
    for(var i:int = firstItemIndex; i <= lastItemIndex; i++){
        createListItem(i - firstItemIndex, products[i]);
    }
    next.visible = lastItemIndex < products.length - 1;
}

然后从您的 complete 处理程序中,您可以像这样显示第一页:

displayPage(0);

您的next 按钮可以有一个显示currentPageIndex + 1 的点击处理程序,如下所示:

next.addEventListener(MouseEvent.CLICK, nextClick);
function nextClick(e:MouseEvent):void {
    displayPage(currentPageIndex + 1);
}

同样,您可以displayPage(currentPageIndex - 1) 返回页面。

如果你想从数组的末尾显示到开头,我建议你只是reverse itproducts.reverse()

请注意,如果您的数据很大,仅加载 JSON 可能需要一段时间。在这种情况下,您应该对 JSON 数据本身进行分页,以便一次仅加载 10 个

【讨论】:

  • 谢谢;所以我在我的 JSON complete 处理程序中添加了showNext()。但是我不能在下一个按钮上调用相同的函数,因为它需要 1 个参数 event:MouseEvent(因为它是一个按钮..)。那么每次点击“下一步”时如何调用这个函数呢?
  • 完美:谢谢。但是,只有一件事..我怎样才能以不同的顺序展示产品? (结束到开始)谢谢
  • 嗯,只是这段代码有问题。 displayPage 似乎正在删除一个项目。如果我只有一件物品,它不会出现...知道为什么吗? (问题来自displayPage,好像把displayPage(0);complete中删除一样,才会显示唯一项。如果我放回去,则不会显示唯一项。
  • 已修复。 For 循环条件应为 i &lt;= lastItemIndex 以包含最后一个索引。
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 2020-04-04
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多