有时候在页面的某个模块中,需要无限循环的滚动一些消息。那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个模块是向上滚动的)?

  1. 克隆A一份完全一样的数据B放在原数据A的后面;

  2. 使用setInterval向上滚动A的父级容器;

  3. 当向上滚动的距离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, -307px, 0);transform: translate3d(0, -307px, 0);display: none;}}.list{width: 300px;border: 1px solid #999;margin: 20px auto;position: relative;height: 200px;overflow: hidden;}.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="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>

运行的效果如下查看实例1:

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中的值更改为对应的数值即可

本文转自lzwxx 51CTO博客,原文链接:http://blog.51cto.com/13064681/1944338

CSS3实现无限循环的无缝滚动相关推荐

  1. 用CSS3实现无限循环的无缝滚动

    有时候在页面的某个模块中,需要无限循环的滚动一些消息.那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个模块是向上滚动的)? 克隆A一份完全一样的数据B放在原数据A的后面: 使用setIn ...

  2. html图片墙 无限滚动,尝试用CSS3实现无限循环的无缝滚动

    有时候在页面的某个模块中,需要无限循环的滚动一些消息.那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个模块是向上滚动的)?克隆A一份完全一样的数据B放在原数据A的后面: 使用setInt ...

  3. CSS3中的animation属性实现无限循环的无缝滚动

    在页面中循环展示信息的功能之前一般是用js来实现的,那么用CSS3该如何实现实现呢 有时候在页面的某个模块中,需要无限循环的滚动一些消息.那么如果我们用js实现无缝衔接滚动的思路是什么呢(比如我们这个 ...

  4. CSS3--用CSS3实现无限循环的无缝滚动

    用CSS3实现无限循环的无缝滚动 致敬原文:https://www.xiabingbao.com/css3/2017/07/03/css3-infinite-scroll.html 原文作者是前端大佬 ...

  5. css动画无限循环转圈,css3 – 具有无限循环的链CSS动画

    简而言之,没有(一些可以解决的问题) 你的行动画计数:infinte当前正在做的是元素:动画:ani1 3s 0s无限,ani2 3s 9s无限;因此,由于声明的第一个动画的迭代次数为无限,因此永远不 ...

  6. Css3 实现无限循环

    @-webkit-keyframes gogogo {0%{-webkit-transform: rotate(0deg);}50%{-webkit-transform: rotate(180deg) ...

  7. php循环读取mysql_PHP无限循环获取MySQL数据

    本篇文章主要介绍PHP无限循环获取MySQL数据的方法,感兴趣的朋友参考下,希望对大家有所帮助. 具体如下: public function get_data($limit){ $sql=" ...

  8. react无缝滚动_react 实现一个无限循环的轮播器 附github地址

    一个简单的轮播 为了更具有通用和参考性,轮播组件中,轮播只使用了react,没有添加其他的状态管理,或者参数类型限制的库. 所以这个轮播的方法,同样可以用于vue 等其他框架 github地址 最终效 ...

  9. CSS3 用动画实现无缝滚动图效果

    如何用CSS实现一串图片在一个固定的盒子里无缝连接的滚动效果: 如上图(想象它是一个无缝连接的滚动图), 那么怎么才能这个无缝滚动的效果呢? 1.首先准备一组长宽一样图片, 六七个就差不多了, 然后创 ...

最新文章

  1. 2020 CCPC-Wannafly Winter Camp Day1 总结
  2. NIST 人脸识别竞赛 FRVT(Face Recognition Vendor Test)
  3. sql的加减乘除运算_实现四则运算的一条sql语句
  4. android APP常用的颜色及代码
  5. python 列表比较不同_python实现比较两段文本不同之处的方法
  6. python globals() 动态函数调用_[Python] 动态函数调用(通过函数名)
  7. c语言让系统蓝屏,0x000000116,教您解决电脑蓝屏代码0x000000116
  8. (48)Xilinx Adder IP核配置(九)(第10天)
  9. vue表格刷新数据_Vue.js的列表数据的同步更新方法
  10. android 360状态栏显示,Android高仿UC浏览器和360手机卫士消息常驻栏(通知栏)
  11. 关于配置tomcat多版本同eclipse的配置问题
  12. 最大流模板(Edmonds-Karp)
  13. 软件教程给MyEclipse 10增加SVN功能
  14. 思科模拟器启用CHAP协议
  15. 阿里云大数据ACP专业认证实验之05-MaxCompute内置函数(上)
  16. 热血传奇之周星弛[转载]【出处:未知】
  17. Easy Excel生成压缩包文件,自定义表头样式
  18. 学习篇之华为快应用的开发(一)
  19. Android 解析JSON数据填充到Listview中
  20. 1010: 求圆的周长和面积(C语言)

热门文章

  1. Eclipse中新建安卓模拟机报错:ANDROID_SDK_HOME is defined but could not find Test.ini file in $ANDROID_SDK_HOME\
  2. 【原】2009.NET年技术大会总结,有图片,说说我理解的技术大会 【下】
  3. 用opencv的人脸识别来分辨明星似乎不太灵光
  4. 明星大侦探数据分析-第一季~第五季
  5. r生成新的dataframe_R语言中数据框的定义与使用
  6. pyhton 对列表按照日期进行排序
  7. 什么是Java语言?java语言简介
  8. 多元线性回归之Spss实现
  9. 帐号激活与忘记密码 实例
  10. ti linux sdk 使用方法,关于AM335x 最新SDK ti-processor-sdk-linux-am335x-evm-06.03.00.106使用中遇到的问题...