用CSS3实现无限循环的无缝滚动
有时候在页面的某个模块中,需要无限循环的滚动一些消息。那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个模块是向上滚动的)?
克隆A一份完全一样的数据B放在原数据A的后面;
使用
setInterval
向上滚动A的父级容器;当向上滚动的距离L正好的A的高度时(L==A.height()),L=0,重新开始滚动,无限循环。
克隆一份数据放在后面,是为了当A向上移动时,后面有数据能填补漏出来的空白。当B移动到可视区域的顶部时,此时A刚好移出可视区域,那么此时将容器重新归0,用户是没有感知的,以为还是B中的第一条数据。然后继续向上滚动。
1. 使用CSS3来实现
若要用CSS3的属性实现的话,非animation
莫属,因为transition是需要手动的触发,而且不能无限次执行下去,而animation
恰好能解决这个问题。
假如数据是在写死的情况下时,我们完全可以手动复制一份数据放在后面,然后把原数据的高度写到css中,实现的思路与上面的一样:
css样式:
@keyframes rowup {0% {-webkit-transform: translate3d(0, 0, 0);transform: translate3d(0, 0, 0);}100% {-webkit-transform: translate3d(0, -240px, 0);transform: translate3d(0, -240px, 0);}
}
.list{width: 300px;border: 1px solid #999;margin: 20px auto;position: relative;height: 200px;overflow: hidden;font-size: 15px;font-family: 'Microsoft Yahei';
}.list .rowup{-webkit-animation: 10s rowup linear infinite normal;animation: 10s rowup linear infinite normal;position: relative;
}
html格式:
<div class="list"><div class="cc rowup"><div class="s"><div class="item">1- 121233fffffr国家认可更健康进口价格困扰</div><div class="item">2- 3123233</div><div class="item">3- 个人口结构俄跨入国际科技馆客人感觉</div><div class="item">4- ggrgerg</div><div class="item">5- fvdgdv</div><div class="item">6- 德国南部巴士与卡车相撞起火 31人受伤11人死亡朴槿惠庭审时突然昏迷 支持者:她死了法官要负责!</div><div class="item">7- 外交部再次回应印军越界:要求立即将越界部队撤回</div><div class="item">8- 德国网红致信默克尔</div><div class="item">9- 国资委原</div></div><div class="s"><div class="item">1- 121233fffffr国家认可更健康进口价格困扰</div><div class="item">2- 3123233</div><div class="item">3- 个人口结构俄跨入国际科技馆客人感觉</div><div class="item">4- ggrgerg</div><div class="item">5- fvdgdv</div><div class="item">6- 德国南部巴士与卡车相撞起火 31人受伤11人死亡朴槿惠庭审时突然昏迷 支持者:她死了法官要负责!</div><div class="item">7- 外交部再次回应印军越界:要求立即将越界部队撤回</div><div class="item">8- 德国网红致信默克尔</div><div class="item">9- 国资委原</div></div></div>
</div>
2. 数据不确定时
在上面的小节中,数据是死的,高度也是写死到了CSS3中。可是如果从接口获取到的数据个数不定呢,每条数据的长度也不确定,怎么办呢?
这里就需要根据数据来重新计算高度,并写到CSS里,可是keyframes修改起来还比较麻烦,那么我们就用覆盖的方式来重新keyframes中的数据:
// 设置keyframes属性
function addKeyFrames(y){var style = document.createElement('style');style.type = 'text/css';var keyFrames = '\@-webkit-keyframes rowup {\0% {\-webkit-transform: translate3d(0, 0, 0);\transform: translate3d(0, 0, 0);\}\100% {\-webkit-transform: translate3d(0, A_DYNAMIC_VALUE, 0);\transform: translate3d(0, A_DYNAMIC_VALUE, 0);\}\}\@keyframes rowup {\0% {\-webkit-transform: translate3d(0, 0, 0);\transform: translate3d(0, 0, 0);\}\100% {\-webkit-transform: translate3d(0, A_DYNAMIC_VALUE, 0);\transform: translate3d(0, A_DYNAMIC_VALUE, 0);\}\}';style.innerHTML = keyFrames.replace(/A_DYNAMIC_VALUE/g, y);document.getElementsByTagName('head')[0].appendChild(style);
}
计算出原始数据A的高度后,执行 addKeyFrames 方法,往head中添加css属性,那么这里的rowup就会覆盖掉之前设置的,每次滚动的距离就是数据A的高度:
function init(){var data = '塞下秋来风景异,衡阳雁去无留意。四面边声连角起,千嶂里,长烟落日孤城闭。浊酒一杯家万里,燕然未勒归无计。羌管悠悠霜满地,人不寐,将军白发征夫泪。', //样例数据data_len = data.length,len = parseInt(Math.random()*6)+6, // 数据的长度html = '<div class="ss">';for(var i=0; i<len; i++){var start = parseInt( Math.random()*(data_len-20) ),s = parseInt( Math.random()*data_len );html += '<div class="item"v>'+i+'- '+data.substr(start, s)+'</div>';}html += '</div>';document.querySelector('.list .cc').innerHTML = html+html; // 复制一份数据var height = document.querySelector('.list .ss').offsetHeight; // 一份数据的高度addKeyFrames( '-'+height+'px' ); // 设置keyframesdocument.querySelector('.list .cc').className += ' rowup'; // 添加 rowup
}
init();
3. 横向滚动
上面讲解的都是向上滚动,那么向左,向右,向下也比较容易理解了,把transform
中的值更改为对应的数值即可。
4. 总结
使用CSS来进行动画的展示,会让页面显得更加流畅。如果能用CSS实现,可以尝试尽量用CSS实现下。
原文链接 用CSS3实现无限循环的无缝滚动 - SegmentFault 思否
用CSS3实现无限循环的无缝滚动相关推荐
- html图片墙 无限滚动,尝试用CSS3实现无限循环的无缝滚动
有时候在页面的某个模块中,需要无限循环的滚动一些消息.那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个模块是向上滚动的)?克隆A一份完全一样的数据B放在原数据A的后面: 使用setInt ...
- CSS3实现无限循环的无缝滚动
有时候在页面的某个模块中,需要无限循环的滚动一些消息.那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个模块是向上滚动的)? 克隆A一份完全一样的数据B放在原数据A的后面: 使用setIn ...
- CSS3中的animation属性实现无限循环的无缝滚动
在页面中循环展示信息的功能之前一般是用js来实现的,那么用CSS3该如何实现实现呢 有时候在页面的某个模块中,需要无限循环的滚动一些消息.那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个 ...
- CSS3--用CSS3实现无限循环的无缝滚动
用CSS3实现无限循环的无缝滚动 致敬原文:https://www.xiabingbao.com/css3/2017/07/03/css3-infinite-scroll.html 原文作者是前端大佬 ...
- css动画无限循环转圈,css3 – 具有无限循环的链CSS动画
简而言之,没有(一些可以解决的问题) 你的行动画计数:infinte当前正在做的是元素:动画:ani1 3s 0s无限,ani2 3s 9s无限;因此,由于声明的第一个动画的迭代次数为无限,因此永远不 ...
- Css3 实现无限循环
@-webkit-keyframes gogogo {0%{-webkit-transform: rotate(0deg);}50%{-webkit-transform: rotate(180deg) ...
- php循环读取mysql_PHP无限循环获取MySQL数据
本篇文章主要介绍PHP无限循环获取MySQL数据的方法,感兴趣的朋友参考下,希望对大家有所帮助. 具体如下: public function get_data($limit){ $sql=" ...
- react无缝滚动_react 实现一个无限循环的轮播器 附github地址
一个简单的轮播 为了更具有通用和参考性,轮播组件中,轮播只使用了react,没有添加其他的状态管理,或者参数类型限制的库. 所以这个轮播的方法,同样可以用于vue 等其他框架 github地址 最终效 ...
- CSS3 用动画实现无缝滚动图效果
如何用CSS实现一串图片在一个固定的盒子里无缝连接的滚动效果: 如上图(想象它是一个无缝连接的滚动图), 那么怎么才能这个无缝滚动的效果呢? 1.首先准备一组长宽一样图片, 六七个就差不多了, 然后创 ...
最新文章
- 使用Axure制作无限循环展示图片效果
- angular select设置默认选中_技术分享 | Charset 和 Collat??ion 设置对 MySQL 性能的影响...
- Application.DoEvents()的使用
- 基于LZ77算法的文件压缩
- 机器学习的最佳学习路线原来只有四步
- jQuery选择器案例之——index.js
- jq上传file到php,jQuery文件上传
- 诗与远方:无题(五十七)
- java持久层用文件_Java持久层框架MyBatis简单实例
- 使用Python合成gif动图
- 数据结构上机实践第10周项目1 - 二叉树算法验证
- java io 字符流操作工具类
- python label字体_Matplotlib xlabel,Arial格式,带一个斜体字
- TIPTOP实施基础资料收集计划表
- MATLAB加入螺旋相位板调制,螺旋相位板原理及使用手册
- 鸿蒙之始有几个老婆,先天五太
- 什么是路由守卫?vue-router有哪几种路由守卫?
- 2020 博客之星评选【票数排行榜】每日更新
- unity 查找游戏中隐藏的物体
- 手机修改设备信息之安装xposed框架
热门文章
- ImageJ自动批量多通道图片无损分离为单色荧光图
- 基于CT107D开发板的控制ne555方波发生器输出200Hz-20kHz频率
- java集合之HashMap相关原理 方法
- 【事件图谱】事件抽取与事件关系抽取
- 关闭/开启“此电脑”左边的导航栏win10
- 挪威是这样养三文鱼的--转帖
- 不允许指针指向不完整的类类型
- 【微信公众号】7、SpringBoot整合WxJava新增临时、永久素材
- mvcnn代码详解_使用colab运行tensorflow版本的faster-rcnn
- 用Java编写程序实现从键盘读入学生成绩,找出最高分,并输出学生成绩和学生的等级。