首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于长文本虚拟化的ui-滚动

用于长文本虚拟化的ui-滚动
EN

Stack Overflow用户
提问于 2020-01-31 15:42:33
回答 1查看 271关注 0票数 2

使用ui-滚动显示非常长的文本(在MBs中)的最佳方法是什么?文本以数组的形式可用,但需要像文本区域一样以长文本文档的形式显示。我使用ui-滚动,因为文本中的每个单词都是一个可点击的锚标记。

用户界面滚动td显示每个单词为列,行为行是唯一的方式吗?

更多信息

  1. 我有一个包含> 2000元素(words)的大型数组,用户可以动态地更改它(元素的数量和元素本身)。
  2. 我需要将这些元素显示为单个文档,其中每个元素(word)都是一个超链接,单击该链接执行某些操作。
  3. 我需要它看起来像一个简单的可滚动的div,其中有这些单词显示为长自由流动的可点击文本。
  4. 我之前使用$compile动态创建html,但是初始编译时间和元素上的编译更改非常重要(秒),因为每次都必须编译/呈现整个元素列表。
代码语言:javascript
运行
AI代码解释
复制
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.

代码语言:javascript
运行
AI代码解释
复制
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>
         &nbsp; 
     </span>
  </div>

  Hello World This is my first dream
代码语言:javascript
运行
AI代码解释
复制
ui-scroll:
代码语言:javascript
运行
AI代码解释
复制
    <div>
       <span ui-scroll="at in info">
          <a id="at-{{$index}}" ng-click="someAction($index, $event)">
             myList[$index]}}
          </a>
          &nbsp;
       </span>
      </div>


  ui-scroll output (each word in separate line):
  Hello
   World
   This
   is
   my
   first
   dream

请注意,上面的每个字都是一个可点击的锚。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-02-15 10:53:56

不幸的是,这是完全不可能的角用户界面滚动,因为它不支持内联/浮动元素。一些尝试曾在2015年实现这一特性,但现在它似乎永远冻结了。

无限逼近

你正在开发的案例非常有趣。作为一种可能的解决办法,我建议尝试“无限”方法,而不是“虚拟化”方法。可以在没有附加库的情况下实现无限滚动,可以将其分解为以下步骤:

  • 最初在视图中添加N个单词
  • 如果viewport的scrollHeight === clientHeight,再添加N个单词;在滚动条出现之前做一个循环
  • 侦听视图端口的scrollTop更改,在滚动发生时调用以下命令
  • 如果scrollTop + clientHeight === scrollHeight增加N个单词;在一个循环中添加N个单词,直到视图端口(scrollHeight)的高度增加,或者直到单词结束

这将大大降低初始渲染的成本,但由于未销毁视图之外的元素,每个新元素注入的总体性能将下降。

Virtualization

在实现了“无限”方法之后,我认为您可能会尝试将这个特定的无限滚动情况转换为虚拟情况。让我们想想可能需要什么。首先,您需要另外两个元素,例如,顶部和底部填充元素,它们将模拟虚拟单词。然后,您需要通过以下方式扩展“无限”方法的最后一步:

  • 查看相反的方向,找到第一个在视口中可见的元素;这可以通过多种方式完成(这里和数百个其他链接)。
  • 记住scrollHeight,在找到一个元素之前剪掉所有元素,将顶部填充元素的高度设置为记住的值,使结果scrollHeight与裁剪前相同。
  • 取决于环境/需求,您可能还需要纠正滚动位置,因为它可能在裁剪过程中跳起;我不想在这里讨论跳回问题,只是对默认的溢流锚行为感到高兴(尽管您必须忘记边缘和其他悲伤的家伙)。
  • 应该重新考虑处理程序中的条件scrollTop + clientHeight === scrollHeight (例如,“如果我们位于最底层”),因为我们可能有非零的底部填充元素;因此,它应该类似于“如果我们位于最底层,或者如果底部填充元素变为可见的”。
  • 如果满足上述条件,则需要一次又一次地添加N个单词,直到底部填充变得不可见为止,每次注入都应该通过减小底部填充元素的scrollHeight值来完成;只有当“我们在最底部”时的边缘情况才会导致视口的scrollHeight不可撤销的增加。

这样我们就能适当地覆盖向下滚动。您显然需要考虑向上滚动,并运行类似的过程时,“顶部填充变得可见或我们在最顶端”。此外,“我们处于非常顶部/底部”和“元素变得可见”的条件可以通过一些对用户友好的三角洲进行扩展,例如,“我们几乎在.”“元素几乎是可见的”。

我不认为这个计划涵盖或应该涵盖所有可能的边缘情况和需求,这只是一个想法,如何可以从零开始,我猜这是唯一的方式,我的意思是完全由自己实现。如果我错了,我会很高兴的,我很想看看别人现成的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60012682

复制
相关文章
滚动截图:更人性化的长截图工具
文章更新:   20170129 初次成文 应用名称:滚动截图 应用包名:me.pkhope.longscreenshot 备注说明:仅支持安卓5.0及以上系统   Hello~懒癌晚期的小苏又跑来更新博客了~   在之前的文章中呢,小苏已经给大家推荐过一款长截图工具了:PPIICC,最近,小苏又发现一款长截图工具,用起来更加简单高效(小苏你这是和长截图应用肛上了还是咋滴?)于是赶紧跑来推荐给大家~   在之前推荐给大家的PPIICC这款应用中呢,我们既可以进行截图操作,也可以使用系统自带的截图功能截好图
美丽应用
2018/07/20
1.4K0
react虚拟滚动的实现
github地址https://github.com/theanarkh/react-virtual-scroll
theanarkh
2019/12/23
1.7K0
电脑长截图滚动截图FastStone Capture
下载地址:https://asjfxk.lanzoum.com/ikt1N0vltzfc
素颜520
2023/05/13
1.4K0
电脑长截图滚动截图FastStone Capture
JavaScript实现竖直文本滚动
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119017.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
6790
虚拟滚动的 3 种实现方式!
工作中一直有接触大量数据渲染的业务,使用react-window多之又多,所以对虚拟列表有了些浅显的理解。今天,我们就照着react-window的使用方式来实现三种虚拟列表。
zz_jesse
2023/09/11
2.2K0
虚拟滚动的 3 种实现方式!
虚拟滚动之原理及其封装
前端的业务开发中会遇到一些不分页且数据条数超过1000加载的列表(长列表),不分页的需求在一般前端程序员看来是不可思议的。正常的思考逻辑是,当数据量20w+时,后端报文可去到30+M,查询时间可能去到几十秒。但是前端如果尝试渲染这些数据,花费的时间必定是以分钟计算。通常是3分钟以上。相比之下,由前端优化这个问题更为迫切,责任更为突出(锅更大)。
一粒小麦
2020/07/10
10K1
虚拟滚动之原理及其封装
用于文本生成的GAN模型
生成对抗网络(GAN)包含两个部分:一个是生成器(generator),一个是判别模型(discriminator)。生成器的任务是生成看起来逼真与原始数据相似的样本。判别器的任务是判断生成模型生成的样本是真实的还是伪造的。换句话说,生成器要生成能骗过判别器的实例,而判别器要从真假混合的样本中揪出由生成器生成的伪造样本。生成器和判别器的训练过程是一个对抗博弈的过程,最后博弈的结果是在最理想的状态下,生成器可以生成足以“以假乱真”的样本。
智能生信
2021/10/08
4.3K0
用于文本生成的GAN模型
Flash/Flex学习笔记(28):动态文本的滚动控制
虽然label组件很好用,但是达人们都好象不太喜欢用组件(用组件后最明显的问题:会使swf文件增大好多),所以我也慢慢开始习惯能不用组件则尽量不用 import flash.events.Event; import flash.events.MouseEvent; var flag:int = 0; txtMsg.text = "这是一首很好听的歌:Going Home\nnot very often have we met \nbut the musics been too bad \ncan onl
菩提树下的杨过
2018/01/23
9490
一款用于 Vue.js 的无限滚动插件
Web 项目经常会用到下拉滚动加载数据的功能,今天就来种草一款 Vue-infinite-loading 插件,讲解一下使用方法!(文末附链接)
一个正经的程序员
2023/09/13
4840
一款用于 Vue.js 的无限滚动插件
Informer:用于长序列时间序列预测的新型transformer 模型
transformer 彻底改变了自然语言处理,并在神经机器翻译,分类和命名实体识别等领域进行了重大改进。最初,transformer 在时间序列领域很难应用。但是在过去的一年半中,出现了一些用于时间序列分类和预测的transformer 变体。我们已经看到了诸如时间融合,卷积,双阶段注意力模型以及更多尝试进入时间序列的模型。最新的Informer模型建立在这一趋势的基础上,并合并了几个新的组件。
deephub
2021/04/16
3.2K0
嵌入式Qt-表格使用测试
QTableWidget是Qt中的表格组件类,相关使用函数可以参考Qt Creator中自带的帮助文档。
xxpcb
2022/12/29
1K0
嵌入式Qt-表格使用测试
C/C++ Qt 选择夹TabWidget组件应用
在Qt中通过使用选择夹组件可以实现在一个页面中集成多种功能,我们以TabWidget选择夹组件为例,实现在单个页面中集成多个功能,并给每一个子夹增加对应的Ico图标。
王瑞MVP
2022/12/28
6230
C/C++ Qt 选择夹TabWidget组件应用
C/C++ Qt 选择夹TabWidget组件应用
在Qt中通过使用选择夹组件可以实现在一个页面中集成多种功能,我们以TabWidget选择夹组件为例,实现在单个页面中集成多个功能,并给每一个子夹增加对应的Ico图标。
王瑞MVP
2022/12/23
5570
C/C++ Qt 选择夹TabWidget组件应用
虚拟化的分类
虚拟化是云计算的底层支撑技术。以前一台主机的各种硬件设备只能被操作系统管理、使用。有了虚拟化技术(VMM/Hypervisor 虚拟机监控器、QEMU、Intel-VT...),一台主机的各种硬件设备可以“分割成”几个部分分别被运行在主机上的不同的(Guest)操作系统使用。
dhyuan
2022/05/30
5420
虚拟化技术(2)——存储虚拟化
存储虚拟化 随着存储的需求呈螺旋式向上增长,公司内的存储服务器和阵列都无一例外地随之成倍增长。对于这种存储管理困境的一种解决办法便是存储虚拟化。存储虚拟化可以使管理程序员将不同的存储作为单个集合的资源来进行识别、配置和管理。存储虚拟化是存储整合的一个重要组成部分,它能减少管理问题,而且能够提高存储利用率,这样可以降低新增存储的费用。 权威机构S N I A(存储网络工业协会)给出的定义 “通过将存储系统/子系统的内部功能从应用程序、计算服务器、网络资源中进行抽象、隐藏或隔离,实现独立于应用程序、网络的存储与
cloudskyme
2018/03/20
7.1K0
虚拟ip的概念_虚拟化的概念
要是单讲解虚拟 IP,理解起来很困难,所以干脆把 动态 IP 、固定 IP 、实体 IP 与虚拟 IP都讲解一下,加深理解和知识扩展
全栈程序员站长
2022/11/01
1.7K0
虚拟ip的概念_虚拟化的概念
强大的 Gensim 库用于 NLP 文本分析
NLP就是处理自然语言,可以是文本、音频和视频。本文将重点了解如何使用文本数据并讨论文本数据的构建块。
数据STUDIO
2022/05/24
2.7K0
强大的 Gensim 库用于 NLP 文本分析
虚拟化
我们常说的虚拟化可以分为两种类型: TYPE I 和 TYPE II。 我们常见的 VMWare Workstation、VirtualBox、Parallels Desktop、Hyper-V 等均属于二型虚拟化软件,他们需要运行于宿主操作系统。 而企业级虚拟化平台例如 VMWare vSphere、KVM、Hyper-V server 等则属于一型虚拟化,他们直接运行于裸金属服务器。
1ess
2021/10/29
2.2K0
点击加载更多

相似问题

反应虚拟化x滚动

39

用于长(滚动)下拉菜单的CSS

32

反应-虚拟化:无限滚动列表

13

滚动多个虚拟化项目控件

10

滚动到虚拟化ItemsControl的元素

55
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档