原文地址:https://www.cnblogs.com/xumengxuan/p/7114721.html

用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中,实现的思路与上面的一样:

 <!DOCTYPE html>
<!-- saved from url=(0064)https://www.xiabingbao.com/demo/css3-infinite-scroll/simple.html -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>CSS3无限滚动</title><style type="text/css">@-webkit-keyframes rowup {0% {-webkit-transform: translate3d(0, 0, 0);transform: translate3d(0, 0, 0);}100% {-webkit-transform: translate3d(0, -307px, 0);transform: translate3d(0, -307px, 0);}}@keyframes rowup {0% {-webkit-transform: translate3d(0, 0, 0);transform: translate3d(0, 0, 0);}100% {-webkit-transform: translate3d(0, -307px, 0);transform: translate3d(0, -307px, 0);}}.demo-list{width: 300px;border: 1px solid #999;margin: 20px auto;position: relative;height: 200px;overflow: hidden;}.demo-list .rowup{-webkit-animation: 10s rowup linear infinite normal;animation: 10s rowup linear infinite normal;position: relative;}</style>
</head>
<body><h1>用CSS3实现无限循环的无缝滚动</h1><p>返回文章: <a href="http://www.xiabingbao.com/css3/2017/07/03/css3-infinite-scroll.html">用CSS3实现无限循环的无缝滚动</a></p><div class="demo-list"><div class="cc rowup"><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 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></body></html>

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();

这样在CSS3与js的结合下,更完美的呈现无缝滚动。

3. 横向滚动
上面讲解的都是向上滚动,那么向左,向右,向下也比较容易理解了,把transform中的值更改为对应的数值即可。

4. 总结
使用CSS来进行动画的展示,会让页面显得更加流畅。如果能用CSS实现,可以尝试尽量用CSS实现下。

CSS3无限滚动(无线循环滚动)相关推荐

  1. 滚动代码循环滚动代码如何怎么样做淘宝轮播代码滚动天猫店铺装修自定义内容代码设置

    滚动代码循环滚动代码如何怎么样做淘宝轮播代码滚动天猫店铺装修自定义内容代码设置

  2. android 桌面循环滚动字幕,循环滚动字幕

    我们知道多媒体文件是由多个stream组成,每个stream对应不同的内容.比如视频,音频,字幕. 如果要用A视频的图像,B视频的音乐,生成C视频.原理就是提取出A视频的视频流数据,B视频的的音频流数 ...

  3. html banner图片滚动,无缝循环滚动(适用banner、图片滚动)

    这个滚动JS适用任何图片滚动,适用按钮,而且不会产生缝隙 代码如下 CSS样式: .catalog{ width: 335px; height: 354px; float: left; margin- ...

  4. php 滚动彩色文字,滚动文字特效大全 -★用彩色生成器加文字,图片加文字,带背景的链接滚动文字...

    霍斯 的 滚动文字特效大全http://www.sudu8.cn/sudu8_article/87/471.html 带背景的链接滚动文字http://font.itbulo.com/ 代码如下: 对 ...

  5. 实现一个横向无限循环滚动的单行弹幕效果

    本期将带领大家实现一个这样的效果,支持无限循环的单行弹幕效果. 实现思路分析 要实现上面的效果,我们先拆分下实现要素: 1.弹幕布局是从屏幕的右侧向左侧滚动,单个弹幕之间的间距是固定的(设计要求) 2 ...

  6. 在线直播系统源码,横向无限循环滚动的单行弹幕效果

    在线直播系统源码,横向无限循环滚动的单行弹幕效果实现的相关代码 实现思路分析 要实现上面的效果,我们先拆分下实现要素: 1.弹幕布局是从屏幕的右侧向左侧滚动,单个弹幕之间的间距是固定的(设计要求) 2 ...

  7. 【Android】ViewPager实现无限循环滚动

    最近做的一个项目,客户要求在ViewPager实现的主页面中滑动到最后一页后继续滑动能返回到第一页,也就是实现无限循环滚动,效果如下: 看了下ViewPager没有滑到尽头的回调方法,因此想到的解决方 ...

  8. JQuery图片无限循环滚动源码

    平常项目中经常用到图片循环滚动,所以就写些必要的CSS定位,JS基本算法,最后就封装成JQuery图片无限循环滚动插件类,其实本质上是li块无限循环滚动,li块里面不管是图片还是其它内容,都OK的. ...

  9. [jQuery基础] jQuery动效案例(二) -- 图标特效、无限循环滚动(简易轮播图)

    图标特效 实现效果展示 实现步骤 第一步(实现静态效果) CSS部分 *{margin: 0;padding: 0; } ul{list-style: none;width: 400px;height ...

最新文章

  1. python三十三:sys模块
  2. 成功解决sub_div.insert(points)cv2.error: OpenCV(3.4.1) C:\projects\opencv-python\opencv\modules\imgproc
  3. 杭电1421java实现
  4. 【算法】算法秋招个人总结
  5. 3.1.1 存储器的分类(半导体-磁芯-磁表面-光存储-ROM-RAM-永久非永久-内存-外存-Cache)
  6. MongoDB 基础教程CURD帮助类
  7. OpenStack的部署T版(六)——Neutron组件
  8. HDLBits答案(10)_D触发器、同步与异步复位、脉冲边沿检测
  9. [转]Eclipse Java注释模板设置详解
  10. 【插件介绍】Lombok
  11. 容器资源可视化隔离的实现方法
  12. 华为主题包hwt下载_华为主题太丑?修改方式它来了
  13. 《Spark The Definitive Guide》Spark 权威指南学习计划
  14. 【CoRL 2018】通过元策略优化的MBRL算法
  15. virtualbox虚拟机下的cdlinux找不到无线网卡的解决方法
  16. 【CS224n】(lecture1)课程介绍和word2vec
  17. 金山词霸2009破解版SP1牛津版完整绿色破解版
  18. 冲突声明(conflicting declaration)解决
  19. excel快捷键设置
  20. springboot冷链物流信息调度系统毕业设计源码210951

热门文章

  1. 第十三届 蓝桥杯青少年创意编程 C++组 省赛
  2. Monotonic Matrix(lemma定理)
  3. eclipse neno高级安装
  4. Excel制作资产负债表
  5. 健身房有哪些令人讨厌的行为?
  6. 2021-2027全球与中国紫外光固化胶市场现状及未来发展趋势
  7. 用“法外狂徒”理解C++中的引用
  8. autojs微信运动自动点赞
  9. 使用Scratch2和ROS进行机器人图形化编程学习
  10. safari 浏览器版本升级后提示“此网页出现问题,已重新载入网页” 解决办法