首页 > 其他分享 >无限滚动

无限滚动

时间:2023-09-25 10:26:34浏览次数:26  
标签:滚动 idx items transform len allItems 无限 height

html

<div class="slide-scroller-wrapper">
	<ul ref="refScroller" class="slide-scroller" @animationiteration="eventHandler.animation">
		<li class="slide-scroller-item">{{ items[0] }}</li>
		<li class="slide-scroller-item">{{ items[1] }}</li>
		<li class="slide-scroller-item">{{ items[2] }}</li>
	</ul>
</div>

scss

@keyframes slide-scroll {
	0% { transform: translate3d(0, 0px, 0); }
	10% { transform: translate3d(0, -32px, 0); }
	50% { transform: translate3d(0, -32px, 0); }
	60% { transform: translate3d(0, -64px, 0); }
	100% { transform: translate3d(0, -64px, 0); }
}
.slide-scroller {
	display: flex; flex-direction: column; align-items: center; white-space: nowrap; color: red; animation: slide-scroll 15s linear infinite forwards;
	&-wrapper { width: fit-content; max-width: 200px; --item-height: 32px; height: var(--item-height); overflow: hidden; }
	&-item {max-width: 100%; line-height: var(--item-height); overflow: hidden; text-overflow: ellipsis; }
}

js

import {shallowReactive} from "vue";
const items = shallowReactive([]);
const allItems = [];
const eventHandler = {
	animation(evt) {
		if (evt.type === 'animationiteration') {
			updateItems();
		}
	}
}
const updateItems = () => {
	const len = allItems.length;
	if (len < 2) {
		items[0] = items[1] = items[2] = allItems?.[0] ?? '';
	} else if (len === 2) {
		items[0] = allItems[0];
		items[1] = allItems[1];
		items[2] = items[0];
	} else {
		let idx = allItems.findIndex(it => it === items[1]);
		if (idx === len - 3) {
			items[0] = allItems[idx + 1];
			items[1] = allItems[idx + 2];
			items[2] = allItems[0];
			return
		} else if (idx === len - 2) {
			items[0] = allItems[idx + 1];
			items[1] = allItems[0];
			items[2] = allItems[1];
			return
		} else if (idx === len - 1) {
			idx = -1;
		}
		items[0] = allItems[idx + 1];
		items[1] = allItems[idx + 2];
		items[2] = allItems[idx + 3];
	}
}
updateItems();

标签:滚动,idx,items,transform,len,allItems,无限,height
From: https://www.cnblogs.com/zh33gl/p/17727305.html

相关文章

  • 无限的技能
    1.密码管理器:帮助用户安全地管理和存储各种密码和敏感信息。组成:前端用户界面、密码加密算法、密钥管理、数据库存储。功能:生成强密码、加密保存密码、自动填充密码、多因素身份验证、密码共享。2.端到端加密的即时通讯应用:保护用户的通讯内容免受窃听和篡改。组成:客户端应......
  • jQuery 指定区域的内容循环滚动
    需求:页面指定区域内的内容循环滚动,但是内容形式、高度都不固定,是接口从编辑器提取出来的内容。代码:<divid="container5"><divclass="content"id="f12red1">自2023年9月20日24时起,国内汽、<br>柴油价格(标准品,下同)每吨分别提高70元。<br>自202......
  • 无限期延迟更新公告~
    博客主站已转移至自建站点KEVIN'SBLOG,目前主站点日渐稳定,博客园博客将无限期延迟更新。本站不会废弃,将作为备份站点,会不定期同步主站内容,双向备份。感谢博客园,这里的朋友个个都是人才,说话又好听,有缘很快再见......
  • selenium 滚动截图参考
       Selenium本身并不直接支持滚动截图,但是你可以通过编程方式实现滚动截图。下面是一个Python的例子,使用Selenium和PIL库实现滚动截图:fromseleniumimportwebdriverfromPILimportImageimporttime#初始化浏览器驱动driver=webdriver.Firefox()......
  • React 虚拟滚动 长列表
    定高版本1"useclient";2importReact,{useCallback,useMemo,useState}from"react";34interfaceIProps{5list:any[];6fixedHeight:number;7}89//Fixedheight10constVirtualView=(props:IProps)=>{1......
  • R语言风险价值:ARIMA,GARCH模型,Delta-normal法滚动估计,预测VaR(Value at Risk)和回测分析
    原文链接:http://tecdat.cn/?p=24492原文出处:拓端数据部落公众号介绍此分析的目的是帮助客户构建一个过程,以在给定时变波动性的情况下正确估计风险价值。风险价值被广泛用于衡量金融机构的市场风险。我们的时间序列数据包括1258天的股票收益。为了解释每日收益率方差的一小部......
  • vue elementplus 使用cellRenderer重写单元格,滑动滚动条渲染复选框出现错误
    使用elementplus的虚拟表格,动态加载表头的时候,第一列为复选框;但是在滚动滑动条的时候出现了一个奇怪的现象;我选择了4和5,当我滑动滚动条的时候如下: 像是复选框跟着在动; 通过跟踪代码,查出问题;在cellRenderer中打印checked的值发现问题,大滚动的时候,打印出来的都是undefined,渲......
  • 一段动态滚动公告栏的js代码
    代码如下:<spanstyle='visibility:hidden;'><spanid="pm1">公园小路上,男正对女发誓。男:我爱你,直到大海干枯。女:不行,冰川期到时,海平面回下降。男:我爱你,直到地球毁灭。女:不行,一颗慧星撞过来,地球就没了。男:我爱你,直到中国电信实行手机单向收费!女:太美了。接吻声——————......
  • 按下按钮后页面的滚动条向下(或向上)滑动,松开之后便停留在当前位置的效果如何实现?
    网友问题?客户要求做一个框架,按下小框架页面中的“上翻”或者“下翻”按钮后,大框架页面便随之向上(或向下)滚动,松开按钮滚动停止,并停留在当前位置,如何解决?解决方案如下:-----------------mm.htm:-----------------<framesetrows="*,20%"><framename="main"src='liu.htm'target="fo......
  • 我觉得人生充满无限可能
    说实话我的大学还是过得挺失败的,至少和我想象中的不太一样现在到了毕业季了,该找工作了,看着别人到了收获的时候,心里没有波动是不可能的但是呢,我希望不要对自己失去信心,我的人生才开始,后面我至少还有50年的时光没必要太焦虑,但是也不能和以前一样,那么的随意,还是得有一些......