直播平台软件开发,监听WebView滑动到底部的两种方式
直播平台软件开发,监听WebView滑动到底部的两种方式
第一种方式:自定义webView,实现onScrollChanged方法,通过接口的方式暴露出去。
1 | <br> public class ScrollChangeLisWebView extends WebView {<br> public ScrollChangeLisWebView(Context context) {<br> super(context);<br> }<br> //实时滑动监控<br> //参数l代表滑动后当前位置,old代表原来原值<br> @Override<br> protected void onScrollChanged(int l, int t, int oldl, int oldt) {<br> super.onScrollChanged(l, t, oldl, oldt);<br> mScrollInterface.onSChanged(l, t, oldl, oldt);<br> }<br> public ScrollInterface mScrollInterface;<br> //监控滑动<br> public void setOnCustomScrollChangeListener(ScrollInterface scrollInterface) {<br> this.mScrollInterface = scrollInterface;<br> }<br> public interface ScrollInterface {<br> public void onSChanged(int l, int t, int oldl, int oldt);<br> }<br>} |
使用:
1 | <br> webView.setOnCustomScrollChangeListener( new ScrollChangeLisWebView.ScrollInterface() {<br> @Override<br> public void onSChanged(int l, int t, int oldl, int oldt) {<br> //WebView的总高度 有缩放比例<br> float webViewContentHeight = webView.getContentHeight() * webView.getScale();<br> //WebView的现高度<br> float webViewCurrentHeight = (webView.getHeight() + webView.getScrollY());<br> if ((webViewContentHeight - webViewCurrentHeight) < 10) { //尽量不要用==0,有时候精度问题导致无法完全相等(自己调试即可) <br> // 已经处于底端<br> //.....<br> }<br> }<br> }); |
常见的坑:
1.如果前端页面height写成100%,会导致webView.getScrollY()一直为0,这个我没碰到,百度有看到别人出现这种;如果出现这种,找前端沟通调整即可。
2.由于原生WebView兼容性很差,如果使用腾讯的X5WebView,webView.getScrollY()也会一直为0,这时候使用webView.getWebScrollY()即可,这种我碰到了。
第二种方式:注入js
1 | <br> webView.setWebViewClient( new WebViewClient() {<br> @Override<br> public void onPageFinished(WebView webView, String s) {<br> super.onPageFinished(webView, s);<br> //滑动监听<br> String startSave = "\n" +<br> "document.getElementById(\"page-container\").addEventListener('scroll',function () {\n" +<br> "console.log(this.scrollHeight);\n" +<br> "console.log(this.scrollTop);\n" +<br> "console.log(this.clientHeight);\n" +<br> "if(this.scrollHeight-this.scrollTop - this.clientHeight < 50){\n" +<br>// "if(this.scrollHeight-this.scrollTop == this.clientHeight){\n" + 精度计算问题 会有一点误差 无法相等<br> "console.log(\"到达底部\");\n" +<br> "window.java.open(\"到达底部\"); \n" +<br> "}\n" +<br> "});";<br> //注入<br> webView.loadUrl("javascript:" + startSave);<br> }<br> });<br> <br> //注入、反射<br> webView.addJavascriptInterface(new Object() {<br> @JavascriptInterface<br> public void open(String msg) {//滑动到底端<br>//.....<br>//这里更新UI失败的话,可以用runOnUiThread或者webView.post(new Runnable() {}<br> }<br> }, "java"); |
注入js的方式需要与前端约定好调用方法,比如page-container就是前端页面的一个标签。
以上就是直播平台软件开发,监听WebView滑动到底部的两种方式, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现