You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Oracle Apex卡片区域完全渲染,以恢复用户浏览位置?

Oracle Apex 卡片区域渲染完成后执行滚动定位的解决方案

场景回顾

  • 第1页包含一个分页卡片区域(每页显示32张卡片),用户点击卡片跳转至第11页,第11页有返回按钮可回到第1页。
  • 为实现返回第1页时恢复之前的浏览位置,原代码使用以下JS逻辑:
    apex.region("prods").call('gotoPage', $v("P1_CARDS_PAGE"));
    $(window).scrollTop(apex.item("P1_SCROLL_POS").getValue());
    
    其中P1_CARDS_PAGE记录跳转前的卡片页码(如示例中的第2页),P1_SCROLL_POS记录点击卡片时的页面滚动位置。

现有问题

返回第1页时,JS代码在卡片区域完全渲染前执行,虽能跳转至对应页码,但无法正确保持卡片的滚动位置。

解决方案

可以利用Oracle Apex提供的区域就绪事件或回调方法,确保在卡片区域渲染完成后再执行滚动定位逻辑,以下是两种可行方案:

方案1:使用whenReady()回调

apex.region().whenReady()方法会在目标区域完成渲染并准备就绪后执行回调函数,适合页面加载时触发的场景:

apex.region("prods").whenReady(function() {
    // 先跳转至目标页码
    apex.region("prods").call('gotoPage', $v("P1_CARDS_PAGE"));
    // 再恢复滚动位置
    $(window).scrollTop(apex.item("P1_SCROLL_POS").getValue());
});

方案2:监听apexafterrefresh事件

卡片区域分页跳转属于区域刷新操作,apexafterrefresh事件会在区域刷新完成后触发,可绑定此事件执行滚动定位:

// 绑定区域刷新完成事件
$("#prods").on("apexafterrefresh", function() {
    $(window).scrollTop(apex.item("P1_SCROLL_POS").getValue());
});

// 触发页码跳转,完成后自动执行滚动
apex.region("prods").call('gotoPage', $v("P1_CARDS_PAGE"));

原理说明

卡片区域的分页渲染是异步过程,直接执行滚动逻辑时,区域DOM尚未完成更新,导致滚动位置失效。通过上述方法等待区域渲染完成后再执行滚动,就能准确定位到之前的浏览位置。

内容的提问来源于stack exchange,提问作者Ahsan Anwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:33