jQuery实现参数自定义的文字跑马灯效果


Posted in jQuery onAugust 15, 2018

本文为大家分享了jQuery实现文字跑马灯效果的具体代码,供大家参考,具体内容如下

一、明确需求

基本需求:最近在工作中接到一个新需求,简单来说就是实现一行文字从右到左跑马灯的效果,并且以固定的时间间隔进行循环。

原本这是一个很容易实现的需求,但是难点是要求很多参数得是用户可自行设置的,包括文字跑马灯的速度和距离下次出现的间隔。具体需求见下图:

jQuery实现参数自定义的文字跑马灯效果

这样一来实现这个功能就会有点麻烦了,需要烧烧脑细胞了。

二、具体实现过程

HTML中只需要如下几行代码

<div id="swiper">
 <div class="swiper_div">
  <span class="swiper_span custom_span"></span>
  <span class="swiper_span id_span">用户的UID</span>
 </div>
</div>

css样式如下(注意此处采用less的语法)

#swiper{
 position: absolute;
 width: 100%;
 background-color: red;
 z-index: 10000;
 top:0px;
 .swiper_div{
  color: black;
  position: absolute;
  left: 100%;
  white-space: nowrap;
  transition-property: left;
  transition-timing-function: linear;
  .swiper_span{
  font-size: 16px;
  color: black;
  opacity: 1; // 不透明度,范围是0-1
  }
 }
}

下面是相关的js代码

首先定义一套默认值,如果用户未设置的话采用默认值,否则采用用户设置的值。

const WATER_MARK = {
 VERTICAL_AXIS: 200, // 垂直坐标,单位px
 FONT_SIZE: 16, // 文字字体大小,单位px
 FONT_COLOR: '#ffffff', // 文字颜色
 FONT_OPACITY: 1, // 文字不透明度,范围是 0-1,1为完全不透明
 FONT_BACKGROUND: '', // 文字底色
 SPEED: 200, // 跑马灯速度,单位px/s
 TIME_STAMP: 6, // 文字显示间隔时间,单位s
 TEXT_CONTENT: '', // 自定义文字内容
 };

接下来就是核心代码了。

// 通过选择器获取跑马灯相关元素
 let $swiper = $('#swiper');
 let $swiperDiv = $(".swiper_div");
 let $swiperSpan = $(".swiper_span");
 let $customSpan = $(".custom_span");
 let $idSpan = $(".id_span");

function waterMark() {
 // 不能在此处提前获取id为swiper的div的宽度,获取的比实际要大,目前不知道什么原因。
 // let swiperWidth = $swiper[0].offsetWidth;
 let swiperDivWidth = $swiperDiv[0].offsetWidth;

 let verticalAxis = WATER_MARK.VERTICAL_AXIS;
 let fontSize = WATER_MARK.FONT_SIZE;
 let fontColor = WATER_MARK.FONT_COLOR;
 let fontOpacity = WATER_MARK.FONT_OPACITY;
 let fontBackground = WATER_MARK.FONT_BACKGROUND;
 let speed = WATER_MARK.SPEED;
 let timeStamp = WATER_MARK.TIME_STAMP;
 let textContent = WATER_MARK.TEXT_CONTENT;

 $swiper.css('top',verticalAxis+'px');
 $swiperSpan.css('font-size',fontSize+'px');
 $swiperSpan.css('color',fontColor);
 $swiperSpan.css('opacity',fontOpacity);
 $swiperDiv.css('background-color',fontBackground);
 $customSpan.text(textContent);

 setTimeout(function () {
  let totalScrollWidth = swiperDivWidth+$swiper[0].offsetWidth;
  let durationTime = totalScrollWidth/speed; // 3.135s
  $swiperDiv.css("transition-duration",durationTime+"s");
  $swiperDiv.css("left","-"+swiperDivWidth+"px");
  setInterval(function () {
  if($swiperDiv.css('left') === '-'+swiperDivWidth+'px'){
   $swiperDiv.css("left","100%");
   $swiperDiv.css("transition-property",'null');
  }else{
   $swiperDiv.css("transition-property",'left');
   $swiperDiv.css("left","-"+swiperDivWidth+"px");
   $swiperDiv.css("transition-delay",timeStamp+'s');
  }
  },1000);
 },1000);
 }
 waterMark();

当时在想如何控制这个间隔时间时还想了另外一种写法,以时间为比较基准,如下:

let sumeTime=0; // 计算时间的变量
 let durationTime = 5000 ; // 过渡时间,毫秒制,与过度时间保持一致时间
 let jiange = 6000 ; // 自定义间隔时间
 let jisuan = 1000; //设置计算时间的精度
 setTimeout(function () {
 //开始执行滚动
 $swiperDiv.css("left","-"+swiperDivWidth+"px");
 setInterval(function () {
 sumeTime = sumeTime + jisuan; //所加值与 setInterval 设置时间一致
 if((sumeTime >= durationTime) && (sumeTime < (jiange + durationTime))){ 
 //刚好滚动完到最右侧
 $swiperDiv.css("left","100%");
 $swiperDiv.css("transition-property",'null');
 }else if(sumeTime >=(jiange + durationTime)){
 // console.log("间隔时间到啦开始下次执行了啊******");
 $swiperDiv.css("transition-property",'left');
 $swiperDiv.css("left","-"+swiperDivWidth+"px");
 sumeTime = 0;
 }
 },jisuan);
 },1000);

 两种方式说不好哪种好哪种坏,只是第一种看起来更明了。总之,以上代码就可以实现该需求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 jQuery
jQuery实现table表格checkbox全选的方法分析
Jul 04 jQuery
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
Jan 18 jQuery
JQuery事件委托原理与用法实例分析
May 13 jQuery
jQuery Raty星级评分插件使用方法实例分析
Nov 25 jQuery
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
jQuery实现鼠标滑动切换图片
May 27 jQuery
jQuery带控制按钮轮播图插件
Jul 31 jQuery
jquery实现简易验证插件封装
Sep 13 jQuery
jquery插件懒加载的示例
Oct 24 jQuery
jQuery轮播图实例详解
Aug 15 #jQuery
layui中使用jquery控制radio选中事件的示例代码
Aug 15 #jQuery
jQuery仿移动端支付宝键盘的实现代码
Aug 15 #jQuery
jQuery实现的简单拖拽功能示例【测试可用】
Aug 14 #jQuery
jQuery+CSS实现的标签页效果示例【测试可用】
Aug 14 #jQuery
JQuery通过后台获取数据遍历到前台的方法
Aug 13 #jQuery
jQuery实现图片简单轮播功能示例
Aug 13 #jQuery
You might like
一段php加密解密的代码
2007/07/16 PHP
php实现简单文件下载的方法
2015/01/30 PHP
php判断表是否存在的方法
2015/06/18 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
ArrayList类(增强版)
2007/04/04 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
AngularJS语法详解
2015/01/23 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
python实现年会抽奖程序
2019/01/22 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
python中怎么表示空值
2020/06/19 Python
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
会计自荐书
2013/12/02 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
孔庙导游词
2015/02/04 职场文书
升职自荐信怎么写
2015/03/05 职场文书
2014年终个人总结报告
2015/03/09 职场文书
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript