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

SAP UI5页面控件onscrollstart、onscrollstop事件无法触发问题咨询

问题原因

你绑定事件的目标控件不是实际产生滚动的DOM节点,且addEventDelegate里的onscrollstart/onscrollstop不是通用DOM事件,是SAP UI5内部封装给滚动组件使用的专属事件,直接给普通页面控件绑定不会触发。

优先解决方案:使用UI5自带滚动代理

SAP UI5的标准可滚动控件(比如sap.m.Page、sap.m.ScrollContainer)都内置了滚动代理实例,自带适配触控场景的scrollStart和scrollEnd事件,直接绑定即可:

onAfterRendering: async function () {
  const oTargetPage = this.byId("PAGECONTROLID");
  // 等待控件完全渲染加载完成
  await oTargetPage.loaded();
  // 获取控件内置的滚动代理
  const oScrollDelegate = oTargetPage.getScrollDelegate();

  // 绑定滚动开始事件
  oScrollDelegate.attachEvent("scrollStart", () => {
    console.log("滚动开始");
  });

  // 绑定滚动结束事件
  oScrollDelegate.attachEvent("scrollEnd", () => {
    console.log("滚动结束");
    // 此处放入你的视口检测逻辑
    const oLastFieldDom = this.byId("你要检测的最后一个字段控件ID").getDomRef();
    const oRect = oLastFieldDom.getBoundingClientRect();
    const isInViewport = oRect.top >= 0 && oRect.bottom <= window.innerHeight;
  });
}

备选方案:自定义模拟滚动起止事件

如果你的目标控件没有内置滚动代理,可以自己通过定时器实现滚动起止判断,兼容鼠标和触控场景:

onAfterRendering: function () {
  const oTargetPage = this.byId("PAGECONTROLID");
  // 获取实际产生滚动的内部DOM节点,可通过F12元素选择器确认滚动容器的类名修改选择器
  const oScrollDom = oTargetPage.getDomRef().querySelector(".sapMPageEnableScrolling");
  let scrollTimer = null;

  const handleScroll = () => {
    if (scrollTimer) {
      clearTimeout(scrollTimer);
    } else {
      console.log("滚动开始");
    }
    // 200毫秒无滚动事件触发则判定为滚动结束,可根据需求调整阈值
    scrollTimer = setTimeout(() => {
      scrollTimer = null;
      console.log("滚动结束");
      // 此处放入你的视口检测逻辑
    }, 200);
  };

  // 绑定原生滚动事件
  oScrollDom.addEventListener("scroll", handleScroll);

  // 页面销毁前解绑事件,避免内存泄漏
  this.getView().addEventDelegate({
    onBeforeExit: () => {
      oScrollDom.removeEventListener("scroll", handleScroll);
    }
  });
}

注意事项

  • 绑定滚动事件前必须确认绑定的DOM是实际滚动容器:通过浏览器F12工具选中滚动区域,找到overflow属性为auto或scroll的节点即为目标滚动容器。
  • 两种方案都天然适配触控设备的滑动滚动场景,不需要额外适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:18:01