Webkit列可查找可见文本的范围
Webkit columns find range of visible text
我有一段HTML,我正在使用Webkit样式表属性在UIWebView
中显示它。我使用Webkit在列中显示HTML,以便模拟一本书。
一次只能看到一列(一列表示一页)。现在,我正试图找到可见HTML的范围,这样我就可以在第一个可见单词之前插入一个span元素。
我使用JavaScript函数document.elementAtPoint
(我可能弄错了函数名)获得了包含第一个可见单词的HTML元素,并更改了它的CSS类。但这对我来说还不够准确。我需要它准确到第一个可见的单词。
这个想法是在字体大小增加或减少时,在第一个可见单词处创建一个分栏符。我可以使用JavaScript来确定元素在哪一列,并以编程方式将用户滚动到该列,但首先我需要将元素放入其中。
有人能帮我吗?
CSOM视图模块规范将caretPositionFromPoint(x, y)
添加到Document
接口,该接口返回指定x和y坐标的插入符号位置。WebKit支持caretRangeFromPoint
,这是早期规范中的一个近似值,它返回一个Range
。
该单词可能已连字符,因此跨越了两列,因此与其将第一个单词包装在一个跨度中,您可能希望考虑直接在光标点插入span
的更简单的方法。这里有一个例子:
var caretPos = document.caretRangeFromPoint(x, y);
if (caretPos)
caretPos.insertNode(document.createElement('span'));
演示(仅限WebKit--单击可插入跨度):http://jsfiddle.net/Jordan/Aw9aV/
最后一个考虑因素是:WebKit最终可能会停止支持caretRangeFromPoint
而不是caretPositionFromPoint
;如果是这样,您将需要调整您的代码。还要注意,后者返回可能不实现insertNode
方法的CaretPosition
。规格仍在WD,因此请注意它仍在变化中。
好的,我完全不确定你目前在做什么,但至少我应该能够给出一些有用的提示,因为我在用javascript构建页面浏览系统方面有一些经验。
- 首先,在CSS3中,您可以定义列https://developer.mozilla.org/en/CSS3_Columns,它将自动将内容拆分为单个元素内的不同列(其中单个列具有uiwebview的全宽),然后添加浏览控件,移动包含该元素的整个元素(使用css33d翻译实现流畅的硬件加速运动,并且您知道列的宽度,因此无需担心页面上的第一个单词是什么)。在这种情况下,您不需要担心拆分列会打断自己。(不过,正如我所说,我不确定你已经在多大程度上这样做了)
- 或者,您可以决定将所有内容封装在小的内联块中(就像以前的列实现一样),甚至封装到单个内联元素,每个元素都包含一个单词。(尽管这似乎不再必要了)
- 最后,正在进行http://www.w3.org/TR/css3-regions/这将使这在未来变得更加容易,但目前它只提供chrome和ie10版本
另一方面,你可能已经在做了,或者我可能没有抓住要点,在这种情况下,我需要查看一些代码,然后才能给你一个更具体的答案。(我可以想出各种javascript技巧来处理文本中的字母,但在您的情况下似乎没有必要)
- Angular JS-文本框未在独立范围内更新
- 如何在JavaScript中获取文本区域的选定文本范围
- 对象内部函数内的对象文本的范围
- 如何按从当前单词到段落中该句子(.)结尾的范围选择文本
- 如何在 Chrome 的文本区域中“替换”选定的文本范围
- 根据输入范围更新显示的文本量
- 返回Javascript中给定正则表达式的文本范围数组
- 根据输入范围更新显示的文本量
- 如何使用javascript将文本框中的值限制为1-999之间的值范围
- 使用jQuery获取h4 class=“”的文本内容;ng结合”;超出Angular范围
- 如何允许用户在文本框中插入角度范围变量
- 使用jquery感知文本字符串中的时间范围
- 如何放置日期范围从周选择器用于两个文本输入
- 否则,无法使用 Jquery 更改范围内的文本
- 单击时更改范围文本
- “更改范围文本”按钮
- HTML范围文本切换
- 由范围文本控制的 Onclick 事件
- j查询或下划线 按范围文本对列表进行排序
- 使用jQuery从各自的值更新多个范围文本