使用ui-滚动显示非常长的文本(在MBs中)的最佳方法是什么?文本以数组的形式可用,但需要像文本区域一样以长文本文档的形式显示。我使用ui-滚动,因为文本中的每个单词都是一个可点击的锚标记。
用户界面滚动td显示每个单词为列,行为行是唯一的方式吗?
更多信息
1. So I thought of using ui-scroll to display which virtualizes and renders only the displayed content.
2. But ui-scroll always display each element in a separate line like a row which is not the desired behavior for my use case.
Input:
myList = ["Hello", "World", "This", "is", "my", "first", "dream"].
desired Output (each word in same line with auto wrap just like a div):
<div>
<span ng-repeat="w in myList">
<a ng-click="someAction()">myList[$index]</a>
</span>
</div>
Hello World This is my first dream
ui-scroll:
<div>
<span ui-scroll="at in info">
<a id="at-{{$index}}" ng-click="someAction($index, $event)">
myList[$index]}}
</a>
</span>
</div>
ui-scroll output (each word in separate line):
Hello
World
This
is
my
first
dream
请注意,上面的每个字都是一个可点击的锚。谢谢。
发布于 2020-02-15 10:53:56
不幸的是,这是完全不可能的角用户界面滚动,因为它不支持内联/浮动元素。一些尝试曾在2015年实现这一特性,但现在它似乎永远冻结了。
无限逼近
你正在开发的案例非常有趣。作为一种可能的解决办法,我建议尝试“无限”方法,而不是“虚拟化”方法。可以在没有附加库的情况下实现无限滚动,可以将其分解为以下步骤:
scrollHeight
=== clientHeight
,再添加N个单词;在滚动条出现之前做一个循环scrollTop
更改,在滚动发生时调用以下命令scrollTop
+ clientHeight
=== scrollHeight
增加N个单词;在一个循环中添加N个单词,直到视图端口(scrollHeight
)的高度增加,或者直到单词结束这将大大降低初始渲染的成本,但由于未销毁视图之外的元素,每个新元素注入的总体性能将下降。
Virtualization
在实现了“无限”方法之后,我认为您可能会尝试将这个特定的无限滚动情况转换为虚拟情况。让我们想想可能需要什么。首先,您需要另外两个元素,例如,顶部和底部填充元素,它们将模拟虚拟单词。然后,您需要通过以下方式扩展“无限”方法的最后一步:
scrollHeight
,在找到一个元素之前剪掉所有元素,将顶部填充元素的高度设置为记住的值,使结果scrollHeight
与裁剪前相同。scrollTop
+ clientHeight
=== scrollHeight
(例如,“如果我们位于最底层”),因为我们可能有非零的底部填充元素;因此,它应该类似于“如果我们位于最底层,或者如果底部填充元素变为可见的”。scrollHeight
值来完成;只有当“我们在最底部”时的边缘情况才会导致视口的scrollHeight
不可撤销的增加。这样我们就能适当地覆盖向下滚动。您显然需要考虑向上滚动,并运行类似的过程时,“顶部填充变得可见或我们在最顶端”。此外,“我们处于非常顶部/底部”和“元素变得可见”的条件可以通过一些对用户友好的三角洲进行扩展,例如,“我们几乎在.”“元素几乎是可见的”。
我不认为这个计划涵盖或应该涵盖所有可能的边缘情况和需求,这只是一个想法,如何可以从零开始,我猜这是唯一的方式,我的意思是完全由自己实现。如果我错了,我会很高兴的,我很想看看别人现成的解决方案。
https://stackoverflow.com/questions/60012682
复制相似问题