jQuery文字轮播特效


Posted in Javascript onFebruary 12, 2017

闲谈:离开学校那座象牙塔已经也有大半年的事件了,生活中不再充满了茫然只有忙碌。连续加班加点大半个月,做的活动项目终于算是告一段落了,而今天也将是考验其真正价值的时候,现在将这次开发中遇到的问题做一下总结。

项目背景: 这次的项目主要是做一次全国酒店人气排名的营销活动,主要是基于在微信中传播,预计访问量达到亿级,并发做到2000+/s,且有不少的容错预案,我这次主要负责前端首页方面的展示效果。

功能点:

文字无缝轮播(不要在意为什么在移动端还会有这样的需求)

jQuery文字轮播特效

当一说到文字无缝滚动时,大家最先想到的是marquee,但是已经好久没有接触这个标签了,w3c也不对其进行维护了,并且还有最后必须等到全部滚动完毕才会再次滚动,并且对于rem布局采用基于px的滚动体验会非常的
差等等。。

第二个想到的是采用类似jquery实现的图片轮播机制,可以基本完成,但是发现无论是jquery还是zepto文字在滚动的时候会抖动,可用性比较差。

再就是现在用到的css3 + 少量js,采用很少的代码就可以实现文字不同长度,文字条数不定的文字无缝滚动轮播。

下面先看html结构

<div class="outer">
    <ul id="J_scroll">
      <li>1.这是第一条数据</li>
      <li>2.这是第二条数据</li>
      <li>3.这是第三条数据</li>
      <li>4.这是第四条数据</li>
      <li>5.这是第五条数据</li>
      <li>1.这是第一条数据</li> 
    </ul>
  </div>

与图片的无缝滚动一样,也需要将第一条数据拷贝一份放在最后面

其次是css的相关数据

.outer{
    width: 122px;
    height: 80px;
    overflow: hidden;
  }
  .outer ul{
    display:inline-block;
    height: 80px;
    -webkit-transform: translate3d(0, 0, 0); /* 3d渲染,开启硬件加速 */
    transform: translate3d(0, 0, 0);
    font-size: 0;  /* 使inline-block无默认间距 */
    white-space: nowrap; /* 超出不折行 */
  }
  .outer ul li{
    display: inline-block;
    padding-right: 50px;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    font-size: 24px;
  }
  .theanimation{
    animation:theanimation 20s infinite linear;
    -webkit-animation:theanimation 20s infinite linear;
  }
  @keyframes theanimation{
   from {
    transform:translateX(0%);
   } 
   to {
    transform:translateX(-100%);
   } 
  }
  @-webkit-keyframes theanimation{ 
   from {
    -webkit-transform:translateX(0%);
   } 
   to {
    -webkit-transform:translateX(-100%);
   }
  }

由于IOS的一些渲染机制,最好滚动的元素内部都需要启动硬件加速,否则会有卡顿和文字显示不全的问题。

最后是js

$('#J_scroll').width($('#J_scroll').width() - $('#J_scroll li:first-child').innerWidth());
  $('#J_scroll').addClass('theanimation');

这里还是写的jquery,相信大家都能看的懂,就是让滚动元素的宽度等于他的内部元素的总宽度减去第一个(或者最后一个)元素的宽度,这样能保证无缝的效果。

最后要说明为什么要用js动态添加css3的类名实现滚动效果,一开始的时候我也是想直接将css3滚动特效写在滚动的元素上,但是在iPhone上发现首次加载当前页面的时候他不会自动滚动。

Javascript 相关文章推荐
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
基于jquery的可多选的下拉列表框
Jul 20 Javascript
js实现在页面上弹出蒙板技巧简单实用
Apr 16 Javascript
纯javascript移动优先的幻灯片效果
Nov 02 Javascript
Jquery $when done then的用法详解
May 20 Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 Javascript
JS匿名函数实例分析
Nov 26 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
ionic 3.0+ 项目搭建运行环境的教程
Aug 09 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
Feb 12 #Javascript
jQuery、zepto、js常用小技巧
Feb 12 #Javascript
JS中如何实现Laravel的route函数详解
Feb 12 #Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 #Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 #Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 #Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 #Javascript
You might like
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Python常用特殊方法实例总结
2019/03/22 Python
Python单元测试与测试用例简析
2019/11/09 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
前台接待的工作职责
2013/11/21 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
大学新闻系求职信
2014/06/03 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
php访问对象中的成员的实例方法
2021/11/17 PHP