查找浏览器将分类为溢出的第一个单词
Finding the first word that browsers will classify as overflow
我希望构建一个没有滚动的页面,并能识别主div内容溢出的位置。代码将记住这一点,并构造一个从该单词或元素开始的单独页面。
我花了几个小时的时间,以下是过去的问题所采用的方法:
1.克隆div,逐渐去掉单词,直到克隆的高度/宽度小于原始的高度/宽
太慢了。我想我可以通过指数级地剥离单词,然后慢慢地填充它来加快速度——跑过目标,然后慢慢后退,直到我准确地击中它——但这种方法本身似乎有点暴力。
2.对div的尺寸进行计算,计算出水平和垂直方向适合多少ems如果所有内容都是统一的文本,那就太好了,就像一本书一样,但我希望处理标题和图像之类的内容,这会给这本书带来麻烦。浏览器不同的默认字体偏好(100%?144%?)也使情况变得复杂
3.将项目渲染为令牌,当用户在屏幕上看不到有问题的元素(即一个角色)时停止这将是我的首选方法,因为它只需要对渲染的元素进行某种isVisible()检查。不过,我不知道这是否与浏览器选择的渲染方式一致。
关于如何做到这一点,有什么建议吗?或者浏览器的设计是为了在决定是否需要滚动条之前呈现整个页面的长度?
您不需要克隆div,只需要有一个overflow:hidden
div,并在每次需要推进"页面"时设置div.scrollTop += div.height
。(即使浏览器不会显示滚动条,您仍然可以通过编程使div滚动。)
通过这种方式,您可以让浏览器处理设计要做的事情(内容流)。
以下是一个将自动在页面中前进的片段:(演示)
var div = $('#pages'), h = div.height(), len = div[0].scrollHeight, p = $('#p');
setInterval(function() {
var top = div[0].scrollTop += h;
if (top >= len) top = div[0].scrollTop = 0;
p.text(Math.floor(top/h)+1 + '/' + Math.ceil(len/h)); // Show 'page' number
}, 1000);
如果你不想(例如)标题被切成两半,你也可以做一些麻烦来确保"页面"不会从块级元素的中间开始。不幸的是,要确保一行文本不会被切成两半要困难得多(也许是不可能的)。
- 字母计数:返回重复字母数最多的第一个单词
- 我如何从字符串中选出第一个单词的第一个字母,然后再选出第二个单词
- 查找表单输入的第一个单词
- JavaScript只接收句子中的第一个单词
- 突出显示自动完成输入框中的第一个单词
- 我怎样才能只从带有 javascript 的字符串中获取第一个单词
- Javascript从2个单词短语中删除第二个单词,而无需更改第一个单词
- 除句子的第一个单词之外的每个单词的正则表达式
- 获取字符串的第一个单词
- 如何锁定文本区域的第一个单词
- 在CodeMirror中查找自定义语言模式的段落的第一个单词和最后一个单词
- CoffeeScript:捕获字符串中的第一个单词
- 获取java脚本websockets中的第一个单词
- 检查文本区域(PHP)中的第一个单词
- 如何获取字符串中的第一个单词
- 获取第一个单词和换行符之间的内容
- 选择容器中的第一个单词
- 第一个单词的正则表达式是星期几
- 如何获取字符串的第一个单词并将其转换为int?jQuery
- 查找浏览器将分类为溢出的第一个单词