如何为sap.m.semantic.FullscreenPage添加滚动事件?现有绑定代码失效
解决sap.m.semantic.FullscreenPage滚动事件绑定失效的问题
嘿,这个问题我做项目时也踩过坑!sap.m.semantic.FullscreenPage和普通sap.m.Page的滚动容器结构有差异,这就是你直接绑定window.onscroll没效果的原因,给你两个实用的修改方案:
方案一:利用ScrollDelegate绑定滚动事件
FullscreenPage内部是通过ScrollDelegate管理滚动行为的,用它的内置滚动事件绑定方法更靠谱:
var oPage = this.byId("__fullscreen_page_worklist"); var oScrollDelegate = oPage.getScrollDelegate(); if (oScrollDelegate) { // 绑定SAPUI5封装的滚动事件 oScrollDelegate.attachScroll(function(oEvent) { console.log("滚动事件触发啦!", oEvent); }); }
这是官方推荐的方式,兼容性和稳定性都更好,不用依赖DOM结构的细节。
方案二:直接绑定内部滚动DOM元素的事件
如果方案一不符合需求,也可以直接获取FullscreenPage内部的滚动容器DOM,绑定原生scroll事件:
var oPage = this.byId("__fullscreen_page_worklist"); // 获取FullscreenPage内部的滚动容器DOM节点 var oScrollContainer = oPage.getDomRef("cont"); if (oScrollContainer) { oScrollContainer.addEventListener("scroll", function(oEvent) { console.log("原生滚动事件触发", oEvent); }); }
这里的"cont"是SAPUI5为FullscreenPage滚动容器分配的固定ID后缀,目前各版本都稳定可用。
为什么普通sap.m.Page可以用window.onscroll?
普通sap.m.Page默认把浏览器窗口(window)作为滚动容器(未开启内部滚动时),所以绑定window的滚动事件会生效;但FullscreenPage默认启用了内部滚动容器,页面滚动行为被限制在自身内部,window的滚动事件自然不会触发啦。
内容的提问来源于stack exchange,提问作者MJBZA
相关产品推荐
相关产品推荐

