1

我有一个 UIWebView,里面有一本大书。我正在通过javascript更改它的字体大小,使用"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust='150%';

Html 页面变大,但滚动位置保持不变,导致文本移出用户视线。

我唯一的想法真的很奇怪而且效率低下:

  1. <span>用标签包裹每个单词;
  2. 找到屏幕上的第一个<span>并记住它id
  3. 调整字体大小;
  4. 滚动到跨度,这是我在步骤 2 中找到的。

有没有更好的方法来保留用户正在阅读的位置?

4

1 回答 1

1

最后我找到了一种可以接受的方式:

在更改字体大小之前,我使用了一些 javascript 来查找并存储页面上第一个字母的位置:

var range = document.caretRangeFromPoint(0,0); // get a range of a first onscreen letter
var textContainer = range.startContainer.parentNode;// get an element to which it belongs
var path = getElementXPath(textContainer); // get an XPath for that element (this function is not biult in, but you can find it in some other question)
path+='|'+range.startOffset; // stick XPath and index of the letter together

之后我更改字体大小,通过 XPath 找到需要的元素,<a>在我的字母之前插入 invisible ,滚动到那个 invisible <a>,不要忘记删除它。

完毕。这不是一个简单的想法,但至少它可以工作并且不会消耗太多 CPU 或 RAM,就像我在原始问题中解释的想法一样。

这里是获取getElementXPath()函数的地方

于 2013-10-03T11:09:21.300 回答