我根据我在为 android 和 ios 开发原生 epub 播放器的经验给出这个答案。
我以这种方式实现了它。
这是我完成文本突出显示的方式
- 一旦你的 url 在 onload 回调中加载到 webview 中,像这样将 jquery lib 注入到 webview dom
私人无效 addJQueryJS()
{
字符串路径 = "file:///android_asset/JSLibraries/jquery.min.js";
字符串数据 = "{\"MethodName\":\"onJQueryJSLoaded\",\"MethodArguments\":{}}";
String callBackToNative = " jsInterface.callNativeMethod('jstoobjc:"+data+"');";
字符串脚本 = "函数 includeJSFile()"
+"{"
+“函数加载脚本(网址,回调)”
+"{"
+"var script = document.createElement('script');"
+"script.type = '文本/javascript';"
+"script.onload = function () {"
+“回调();”
+"};"
+"script.src = url;"
+"if(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0])"
+"{"
+"(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);"
+"}"
+“其他{回调();}”
+"}"
+"loadScript('"+path+"', function ()"
+"{"
+callBackToNative
+"});"
+"} ; includeJSFile();";
loadUrl("javascript:"+script);
}
将每个单词包装成具有唯一 id 的 span
然后创建一个js文件并注入与jquery相同的内容并在其中编写触摸方法
函数 onTouchMove(e)
{
e.preventDefault();
if((touchendStartStick == true || touchendEndStick == true) && currHVO != undefined)
{
var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
var obj = document.elementFromPoint(touch.pageX-window.pageXOffset,touch.pageY-window.pageYOffset);
if($(obj).is('span'))
{
$(obj).css('背景色','rgba(0,0,255,0.3)');
}
}
};
您还可以获得单词 x,y 宽度高度值。因此您可以在本机视图上显示开始、结束可拖动引脚。
您可以通过将突出显示的第一个和最后一个单词 id 保存到 db 或某个持久存储中来保存突出显示。下次当用户打开这本书时,获取这些单词 id 并突出显示这些跨度。