当前位置: 首页 > news >正文

怎样给网站登录界面做后台公众号怎么制作推文

怎样给网站登录界面做后台,公众号怎么制作推文,网站开发四川,wordpress爱好者起因: app开发过程中遇到需要渲染3000行的列表,页面直接卡顿,所以开始研究起虚拟列表 实现前提条件: item项等高列表 实现思路: 首先是dom结构: 定义一个容器(固定高度)&#…

起因:

app开发过程中遇到需要渲染3000行的列表,页面直接卡顿,所以开始研究起虚拟列表

实现前提条件:

item项等高列表

实现思路:

首先是dom结构:

  1. 定义一个容器(固定高度),监听滚动事件
  2. 容器定义一个内部滚动容器,高度等于列表个数 * 每项高度
  3. 内部滚动容器里面再定义一个容器,具有transform: translateY属性,根据用户滚动动态改变位置,是真正展示的窗口
  4. 再里面就是展示的item项列表

然后是实现逻辑:

  1. 默认展示50条(条数不固定,保证展示能铺满屏幕即可),渲染完成后获取item项高度和最外面容器高度,根据它俩计算出应该展示的item项 Math.ceil(this.containerHeight / this.itemHeight)
  2. 用户滚动时在滚动事件里根据scrollTop设置translateY属性,用scrollTop % this.itemHeight去掉多余高度,保证会在边界上 translateY = scrollTop - (scrollTop % this.itemHeight)
  3. 用户滚动时在滚动事件里根据scrollTop和item项高度判断应该展示的起始项index startIndex = Math.floor(scrollTop / this.itemHeight)
  4. 最后重新渲染列表item项,渲染 startIndex + Math.ceil(this.boxHeight / this.itemHeight)之间的item项

代码展示:

<script lang="ts" setup name="virtual-list-comp">
import { onBeforeMount, ref, computed, nextTick, Ref, onMounted } from 'vue'
import { throttle } from '@/util/util'const props = defineProps({list: {type: Array,default: () => [],},
})// 容器高度
const containerHeight = ref(0)
// item项高度(默认取第一个)
const itemHeight = ref(0)
const getHeight = computed(() => {return itemHeight.value > 0 ? props.list.length * itemHeight.value + 'px' : 'auto'
})// 真正展示的列表
const showList: Ref<any[]> = ref([])
// 需要渲染的起始项
const startIndex = ref(0)
const itemNum = computed(() => {if (containerHeight.value && itemHeight.value) {return Math.ceil(containerHeight.value / itemHeight.value)}return 50
})
const translateY = ref(0)const initShowList = () => {showList.value = props.list.slice(startIndex.value, startIndex.value + itemNum.value)
}
// 获取盒子高度和item项高度
const initHeight = () => {containerHeight.value = document.querySelector('.virtual-list')?.clientHeight || 0itemHeight.value = document.querySelector('.virtual-list__item')?.clientHeight || 0
}const handleScroll = (e: any) => {const { scrollTop } = e.target// 获取 virtual-list__transform 这个展示视口的偏移值translateY.value = scrollTop - (scrollTop % itemHeight.value)startIndex.value = Math.floor(scrollTop / itemHeight.value)initShowList()
}onBeforeMount(async () => {initShowList()await nextTick()initHeight()
})
onMounted(() => {document.querySelector('.virtual-list__container')?.addEventListener('scroll', throttle(handleScroll, 10))
})
</script><template><div class="virtual-list h-full"><divclass="virtual-list__container overflow-y-scroll":style="{height: containerHeight + 'px',}"><div class="virtual-list__scroll" :style="{ height: getHeight }"><div class="virtual-list__transform" :style="{ transform: `translateY(${translateY}px)` }"><div v-for="(item, index) of showList" :key="index" class="virtual-list__item"><slot name="item" :item="item"></slot></div></div></div></div></div>
</template>
http://www.sczhlp.com/news/151258/

相关文章:

  • 做网站第一次见客户绵阳公司网站建设
  • 浅谈京东企业的电子商务网站建设正规软件开发培训学校
  • 网站建设推广新业务云南餐饮网站建设
  • Learning Continuous Image Representation with Local Implicit Image Function
  • 北京天润建设工程有限公司网站动画设计学校
  • 公司网站宣传自己做的灯展在线制作离婚证图片
  • 租房网站开发视频教程做电商平台网站有哪些内容
  • 装修设计公司起名搜索引擎营销优化的方法
  • 波莱网站开发网页视频怎么下载插件
  • 做教育网站宣传策略wordpress插件 自动翻译
  • 网站建设学习内容网页设计模板html代码ie
  • 公司网站制作制作写作网站一稿多投的后果
  • 南宁做网站方案天气预报权威发布
  • 关于网站优化的文章手机网页在线游戏
  • 上海城市建设官方网站免费windows7云主机
  • cpa诱导网站怎么做网站展示怎么做
  • 想学网站搭建与推广游戏开发网站建设
  • 做试试彩网站什么叫门户类网站
  • 百度竞价一个月5000够吗医疗网站怎么做seo
  • 养老做增减的网站广州建站推广
  • 安卓手机怎么做网站重庆市建设造价信息网
  • sqlite做网站数据库如何让网站长尾关键词有排名
  • 网站的黄金看盘软件昆明网络优化
  • 企业做网站排名教育培训机构报名
  • 怎么建设一个漫画网站跨境电商官网
  • 网站建设 淄博 兼职企业注册公司流程
  • 个人网站做淘宝客如何备案网站建设后台需要什么技术
  • 惠州市建设交易中心网站站长统计app软件
  • 开公司网站创建费用怎么制作网站页面
  • 公司网站建设备选方案评价标准扬州整站seo