一、效果预览
最近在做一个活动页面,遇到幸运用户中奖的滚动公告需求。下面是实现效果:
(gif录制略显卡顿,实际效果很流畅)
二、无缝滚动原理
1、容器宽高固定,超出内容隐藏;
2、内容准备2份,现参与滚动的内容有A、B两份,向左滚动;
3、滑动过程中,B份紧随A份之后,营造出无缝滚动回来的效果;
4、在A部分内容完全滚出容器的一瞬间,立刻将AB内容位置复原,由于A、B内容一模一样,这个复原过程很难看出来;
5、循环第3步;
三、代码
1、html部分
<template> <div class="lucky-user"> <!-- 容器 --> <ul class="user-list" :style="`animation-duration: ${luckyUsers.length * 4}s;`"> <!-- 内容区容器 --> <li v-for="(item, index) in luckyUsers" :key="index">{{ item }}</li> <!-- 内容A --> <li v-for="(item, index) in luckyUsers" :key="index+'copy'">{{ item }}</li> <!-- 内容B --> </ul> </div> </template>
2、CSS部分
.lucky-user { width: 540px; //容器定宽高 height: 30px; margin: 0 auto; font-size: 18px; line-height: 30px; color: #E9B65F; overflow: hidden; //超出内容隐藏 .user-list { width: fit-content; // Q1 white-space: nowrap; // 内容不换行 animation-name: seamless-scrolling; // Q3 animation-timing-function: linear; // 动画速度曲线,匀速 animation-iteration-count: infinite; // 动画循环无限次播放 li { display: inline-block; margin-right: 30px; } } } @keyframes seamless-scrolling { 0% { transform: translateX(0px); } 100% { transform: translateX(-50%); //Q2 } }
Q1:因为滚动内容一般都不是固定的,需要接口获取,所以内容区的宽度也就无法确定,这里使用CSS3的新特性width: fit-content,使宽度自适应内部内容,至于为什么这里需要设置宽度属性,见下文
Q2:设置动画。由于内容区实际有AB两份,B是A的副本,所以一段动画的终点就是内容区向左位移50%(内容区width的50%),这也就解释了Q1中为什么一定要设置宽度属性了:如果不设置,width的值不会随内容撑开,此时的50%是父容器width的50%,终点值就错了
Q3:为什么animation不采用简写形式,而是拆开? 因为animation-duration 动画时长不能固定,如果接口获取到的数据很多,动画时长固定5s,那滚动地得有多快?所以animation-duration采用属性绑定形式,根据数据长度进行延长 :style="animation-duration: ${luckyUsers.length * 4}s;" 具体乘几看自己喜欢。
我也试过采用简写形式进行style属性绑定,结果发现动画不生效。
3、JS部分
export default { name: 'app', data() { return { luckyUsers: [] } }, created() { this.getLuckyUsersList() }, methods: { getLuckyUsersList () { //调接口拿取数据 this.luckyUsers = [ '000000抽中了xxx奖品', '111111抽中了xxx奖品', '222222抽中了xxx奖品', ] } } }
四、总结
无缝滚动的实现主要借助了css3中的animation、width:fit-content自适应属性、translate位移等特性;
从实现原理上看,其实就是一个欺骗眼睛的小伎俩而已~
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]