Vue.js 隐藏当前视口之外的项目

2024-04-20

我正在 Vue.js 中制作一个电子商务类型的菜单,其中的项目是包含大量功能和图像的 div。当渲染大约 200 个这样的项目时,性能相当不错,但是当添加的数量超过这个数量时,网站的性能开始变得缓慢。

如果 Vue 元素位于当前可滚动视图之外(如 iOS 中的 ScrollViews),有条件地从 DOM 中隐藏或删除 Vue 元素的最佳方法是什么?是否有任何插件或库可以帮助提高 Vue.js 中长数据项列表的性能?

Thanks!


我使用我在评论中提到的包制作了一个演示片段。

我制作了一个充当观察者的“信号”项目。当“信号”项离开视口时,“复杂的东西”不再渲染。我这样做是为了让你可以看到“复杂的东西”消失。当“信号”滚动回到视图中时,就会呈现“复杂的东西”。

您可以将观察者放在小部件根元素上,只有当整个小部件不在视图中时,事物才会被隐藏。你不想把v-if但是,在根元素上,否则一旦消失就永远不会再回来。

const containerMonitor = scrollMonitor.createContainer(document.body);

new Vue({
  el: '#app',
  data: {
    ids: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
  },
  components: {
    widget: {
      template: '#widget-template',
      props: ['id'],
      data() {
        return {
          visible: true
        };
      },
      mounted() {
        const elementWatcher = containerMonitor.create(this.$el.querySelector('.signal'));

        elementWatcher.enterViewport(() => {
          this.visible = true;
        });
        elementWatcher.exitViewport(() => {
          this.visible = false;
        });
      }
    }
  }
});
.widget-container {
  height: 200px;
  margin: 10px;
  background-color: #f0f0f0;
  display: flex;
  flex-flow: row wrap; 
}

.signal {
  height: 10px;
  width: 10px;
  margin: 30px;
  background-color: red;
  border: thin solid blue;
}

.complex-stuff {
  flex-basis: 100%;
  padding: 15px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.6/vue.min.js"></script>
<script src="https://rawgit.com/stutrek/scrollMonitor/master/scrollMonitor.js"></script>

<template id="widget-template">
  <div class="widget-container">
    <div class="signal">
    </div>
    <div v-if="visible" class="complex-stuff">
      This is widget {{id}}.
      Blah blah blah.
    </div>
  </div>
</template>

<div id="app">
  Widgets below:
  <widget v-for="id in ids" :id="id"></widget>
  :widgets above
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js 隐藏当前视口之外的项目 的相关文章

  • 解决方案:动态加载独立编译的 Webpack 2 包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想分享如何捆绑一个充当插件主机以及它如何加载已安装的插件动态地 应用程序和插件都与 Webpack 捆绑在一起 应用程序和插件被编译和分
  • 如何从特定索引渲染 v-for

    我想在 v for 中循环假设从数字 5 到 10 循环希望在 5 点开始并在 10 点结束 我试过这个 div div 但我想要更有效的循环方式 有谁知道如何让循环从 5 开始 对于你的例子来说是可能的 div some code her
  • Cypress:在 JSON 响应中存根特定键

    我想在 Cypress 中存根以下响应 专门存根密钥ds version 可能的值为 0 1 或 2 每个值将在 UI 上显示不同的元素 fixtures user json email email protected cdn cgi l
  • Iphone 上的 Javascript 日期解析

    我正在开发一个针对移动设备的离线 Javascript 网站 iPhone 就是这样的一种移动设备 我正在尝试从 REST API JSON 对象的成员 解析日期 我在用着 Date parse 2010 03 15 10 30 00 这适
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 定时器内嵌套异步等待 - 不返回所需的值

    我必须使用 Mocha 和 chai 测试来测试端点的响应 下面是相同的代码 async function getData userId let response let interval setInterval async gt resp
  • Vuejs 在模板中添加多行?

    我想知道在构建 Vuejs 模板时如何最好地安排新行 我的代码不起作用 因为它破坏了 JavaScript 容器 Vue js 希望我将整个 html 放在一行中 当我计划添加页脚内容时 这有点不切实际 Vue component foot
  • History.pushState和页面刷新

    我开始研究 HTML5 新历史 API 不过 我有一个问题 如何处理页面刷新 例如 用户单击一个链接 该链接由 js 函数处理 该函数 异步加载页面内容 使用history pushState 更改URL 用户刷新页面 但是服务器上当然不存
  • 当 Django 管理弹出窗口(绿色加号图标)完成时,是否有事件或其他方式调用 Javascript 函数?

    假设我们有这些 Django 模型 class Band models Model name models CharField max length 256 default Eagles of Death Metal class Song
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 将 DIV 转换为单击并拖动视口

    有人知道一种不显眼的 基于原型或无框架的方法将具有大内容 例如地图 的 DIV 转换为具有固定尺寸的可点击和可拖动的 地图 容器 非常像 Google 地图 我想在大型输入表单中显示 HTML 块 这些块可能会超出可用空间 每个块可以有大约
  • 如何在 AWS Amplify 上运行 React/Redux 应用程序的代理

    我最近实施了Proxy 在 Express js 中 对于我的反应应用程序发出请求时隐藏 API URL 当我在本地主机上运行代理和应用程序时 它工作得非常好 现在我已准备好将我的应用程序部署到AWS 放大 我对如何让我的代理在那里运行有点
  • 使用 Google 地图 API 进行反向地理编码

    我正在研究 JavaScript Google Map API 版本 3 更准确地说 正在研究反向地理定位 在 的帮助下官方文档 http code google com intl fr apis maps documentation ge
  • JavaScript:嵌套循环?

    我想实现这样的动画 序列 动画以循环开始 想象一下car从 x1 移动到 x2 然后暂停 1 秒 然后再次播放动画 想象一下car从 x2 移动到 x3 等 the car循环是通过向汽车左侧添加 1px 来实现的 值 但我无法弄清楚嵌套循
  • 如何制作实时jquery效果?

    我想制作一个实时提要阅读器 并且我想要一个解决方案 使新项目无需刷新页面即可出现 并且具有像friendfeed一样的滚动效果 你可以在这里看到我在说什么 http www vimeo com 4029954 http www vimeo
  • JQuery 屏蔽输入插件不起作用

    我已将 JQuery Masked 输入插件添加到我的 Web 项目中 但它根本不起作用 该插件可以在这里找到 http digitalbush com projects masked input plugin http digitalbu
  • Google 折线图添加对象数组

    我有一个通过解析 JSON 字符串创建的对象数组 var measurementData Html Raw JsonConvert SerializeObject this Model Item1 var stringifiedData J
  • Apollo 客户端“未找到命名导出‘删除’”

    我正在尝试创建一个apollo client插件Nuxt 3应用 它当前抛出有关名为的包的错误ts invariant file Users my name Repositories project node modules apollo
  • 在javascript中我们如何识别一个对象是Hash还是Array?

    我的 JSON 调用的输出可以是数组或哈希 我如何区分这两者 现代浏览器支持Array isArray obj method See MDN https developer mozilla org en US docs Web JavaSc
  • IE 中带有“删除”方法的 jQuery.ajax 问题

    我有一个页面 用户可以使用按钮编辑各种内容并选择触发 ajax 调用 特别是 一个操作会导致远程调用一个 url 其中包含一些数据和 放置 请求 这 因为我使用的是宁静的 Rails 后端 会触发我的更新操作 我还有一个删除按钮 它调用相同

随机推荐

  • 解析aspx文件中的控件并将其转换为xml

    我需要解析 aspx 文件 来自磁盘 而不是浏览器上呈现的文件 并列出页面上存在的所有服务器端 asp net 控件 然后从中创建一个 xml 文件 哪一个是最好的方法 另外 有没有可用的库 例如 如果我的 aspx 文件包含
  • 在一个响应中返回多个响应数据

    在我的科目表中 我按学期和月份列出了所有学生的课程以及每个月的分数 id 4 this is the subject id userid 1 name bio semester 3 semester month 5 the month po
  • MVC 部分视图模型不刷新

    我有一个部分视图正在加载到 asp net MVC 3 中的 jQuery 模式中 问题是视图未正确刷新 以下是事件的顺序 1 主视图有一个表格 列出了不同的事件记录 表的每一行上都有一个链接来显示事件详细信息 2 当单击此表上的链接时 部
  • name='' 的无效表单控件不可聚焦

    在 Google Chrome 中 某些客户无法进入我的付款页面 当尝试提交表单时 我收到此错误 name 的无效表单控件不可聚焦 这是来自 JavaScript 控制台 我读到问题可能是由于隐藏字段具有必需的属性 现在的问题是我们使用 n
  • 将 dotnet core 应用程序安排为具有数据访问层的 3 层

    我的典型 NET 4 5X Web 应用程序结构至少有 3 层 Web 项目 NET Web 应用程序 域 业务逻辑项目 类库 和数据访问项目 类库 Web项目引用了业务层 业务层又引用了数据访问层 我喜欢这种方法 因为我的 Web 项目没
  • TypeScript 中的语音识别和语音合成

    我能够通过创建如下接口在 TypeScript 中运行 SpeechRecognition 并且工作正常 namespace CORE export interface IWindow extends Window webkitSpeech
  • Java 写入 Windows Server 2016 时文件上次修改时间未更新

    我在 Windows Server 2016 上有一个 Java 10 应用程序 它不断使用 java util logging 写入文件 在 Windows 文件资源管理器中 上次修改 和 大小 列不会更新 按 F5 不会更新详细信息 操
  • 当我们手动将tomcat作为Windows服务运行时,如何更改tomcat的java_opts?

    我在控制台上手动运行 tomcat 6 作为 Windows 服务 我需要在启动之前更改 java opts 我怎么做 另外 有没有办法可以动态查看日志 我知道这是一个旧线程 但需要纠正一些假设 仅供参考 当将 tomcat 作为服务运行时
  • 替换数据框中的重复列

    我有一个data frame in pyspark 该数据框有一些带有特殊字符的列 cols df schema names cols abc test test abc eng test abc test reps def col ren
  • JSON 模式中的小数精度

    我想让我的 JSON 架构验证发送到我的 REST api 的小数位数不超过两位 从我在最新的 JSON Schema RFC v4 中看到的情况来看 不允许这样做 V1 有一个 maxDecimals 验证器 有谁知道为什么被删除 我有一
  • 如何从 Asp Label.Text 加载航路点坐标

    我在其中硬核值的第一个代码
  • 未使用重定向设置实例变量

    什么会导致我的实例变量 product 无法为重定向设置 传递 Product 是一个 ActiveModel 对象 而不是 ActiveRecord 更具体地说 product 变量没有出现在redirect to new service
  • VSCode 文件夹结构

    我想更改文件夹结构 如果您在文件夹 utils 中看到我有另一个名为 mocks 的文件夹 我想要的是更改结构以按文件夹查看1个文件夹 类似这样 就像只有 1 个文件的 services 文件夹一样 我有相同的结构 另一个文件夹中有 1 个
  • 如何从继承的 FromBody 模型中获取正确的类型?

    正文的帖子有几种不同的 XML 传入 所有 XMLS 几乎都是相同的 因此我首先添加一个基类 其他 XMLS 继承自该基类 这是模型 XmlInclude typeof TextMsg XmlRoot xml public class Ba
  • 检查属性是否用特定注释修饰 - Typescript

    如何确定特定属性是否用特定注释修饰 例如这个类 class A DecoratedWithThis thisProp number 我怎么知道thisProp装饰有DecoratedWithThis 我的用例 我使用另一个文件中的类来生成属
  • Android 指纹原始数据

    Android 的指纹传感器实现是否支持直接访问原始指纹数据 即手指上的实际图案 我并不是指用于解锁设备和付款的存储的安全指纹 而是指在扫描手指时按需获取原始数据 如果没有 为什么不呢 Android API 的作用not允许直接访问原始指
  • 在 Unity 中双向旋转门

    我在 Unity 中创建了一扇打开和关闭的门 我可以通过打电话打开那扇门Interact 现在我想创建一扇始终远离玩家打开的门 就像酒吧的门一样 如果玩家在房间前面 门就会旋转到房间 如果玩家在房间里 门就会旋转出去 目前我创建了一个布尔值
  • Python - AttributeError:“NoneType”对象没有属性“findAll”

    我已经编写了第一段 python 代码来抓取网站 import csv import urllib2 from BeautifulSoup import BeautifulSoup c csv writer open data csv wb
  • 尝试将 span 元素设置为等于 JS 石头剪刀布游戏中的变量值

    我正在编写一个玩石头 剪刀 布的程序 当我编码时 一切都很顺利 直到我添加了 userScore span InnerHTML userScore 线 在测试 win 功能时 我添加了 console log you win 它工作得很好
  • Vue.js 隐藏当前视口之外的项目

    我正在 Vue js 中制作一个电子商务类型的菜单 其中的项目是包含大量功能和图像的 div 当渲染大约 200 个这样的项目时 性能相当不错 但是当添加的数量超过这个数量时 网站的性能开始变得缓慢 如果 Vue 元素位于当前可滚动视图之外