vue实现循环跑马灯效果,vue跑马灯插件

  vue实现循环跑马灯效果,vue跑马灯插件

  本文主要详细介绍了如何使用Vue ticker的marquee组件。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  在本文中,我们分享了Vue ticker的marquee组件的具体代码,供大家参考。具体内容如下

  

一、实现效果

  

二、实现过程

  前言:一开始用间隔器方案做了一个ticker,但是放在移动终端会出现严重的掉帧和卡顿现象,于是在整理思路后,采用过渡方案,从右到左做了一个动画来处理问题。

  思路整理:

  1.过渡需要一定的时间,但是滚动条中的文本可能有不同的长度。

  解决方案:根据文本的总宽度(即文本的总长度)设置过渡时间。假设文字宽度为500px,我们除以50,即转场时间为10s。

  原生js表示如下:

  const text=document . getelementsbyclassname( text )[0]//text

  const text width=text.clientwidth//The文本的总宽度

  constrantime=text width/50//根据文本宽度设置过渡时间

  text . style . transition= left trantime的线性//在滚动前绑定转换属性

  2.如果要保持滚动,需要重复触发滚动的事件。

  解决方案:通过上面的过渡时间设置重复时间。

  原生js表示如下:

  constant time=Trantime * 1000 1000//重新开始滚动时间计算(动态)

  //开始滚动

  函数textRoll() {

  //滚动操作

  //``````

  setTimeout(()={

  textRoll()

  },again time);

  }

  3.接下来,实现文字滚动效果。

  1)首先在容器的最右侧设置文本。

  2)为文本绑定设置好过渡属性,例如:过渡:左10s线性

  3)由于过渡属性,此时将文本设置到容器的最左侧将导致从右到左的过渡。

  原生js表示如下:

  函数textRoll() {

  text . style . transition= left trantime的线性//在滚动前绑定转换属性

  text . style . left=-text width px //移动到容器的最左侧

  setTimeout(()={

  setTimeout(()={

  textRoll()

  }, 0);

  },again time);

  }

  4.至此,可以有一个完整的滚动,下一步是定义重新滚动

  让文本回到容器的最右侧,但目前,文本已经有了一个过渡属性。如果你改变它的左边,会导致它从左向右滚动,所以你要先清除transition属性,然后把它的左边改变到容器的最右边,再用第一次设置的滚动时间重新绑定定时器。

  函数textRoll() {

  text . style . transition= left trantime的线性//在滚动前绑定转换属性

  text . style . left=-text width px //移动到容器的最左侧

  setTimeout(()={

  //恢复文本位置

  Text.style.transition= //还原前清除过渡。

  text . style . left=wrap perwidth px

  setTimeout(()={

  textRoll()

  }, 0);

  },again time);

  }

  

三、js版本源码

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  meta http-equiv= X-UA-Compatible content= IE=edge

  meta name= viewport content= width=device-width,initial-scale=1.0

  字幕/标题

  风格

  * {

  边距:0;

  填充:0;

  }

  正文{

  身高:100vh

  显示器:flex

  justify-content:居中;

  对齐-项目:居中;

  }。包装{

  宽度:60%;

  高度:30px

  背景色:# 000;

  溢出:隐藏;

  位置:相对;

  }。文本{

  颜色:# fff

  空白:nowrap

  行高:30px

  位置:绝对;

  }

  /风格

  /头

  身体

  div class=wrapper

  Div= text 第四纪怎么会是天子,还不如陆家的莫愁呢?/div

  /div

  脚本

  const wrapper=document . getelementsbyclassname( wrapper )[0]//容器

  const text=document . getelementsbyclassname( text )[0]//text

  const wrapper width=wrapper.clientwidth//The集装箱的总宽度

  const text width=text.clientwidth//The文本的总宽度

  text . style . left=wrapper width px //在开始滚动之前,将文本设置在容器的最右侧之外。

  const tranTime=textWidth/50 //根据文本宽度设置过渡时间

  再次常量时间=传输时间* 1000 1000//重新开始滚动时间计算(动态)

  setTimeout(()={

  textRoll()

  }, 0);

  //开始滚动

  函数textRoll() {

  文字。风格。transition= left transtime s linear //滚动前绑定过渡属性

  文字。风格。left=-文本宽度 px //向容器最左移动

  setTimeout(()={

  //还原文本位置

  text.style.transition= //还原前需清除过渡

  文字。风格。left=换行全宽 px

  setTimeout(()={

  textRoll()

  }, 0);

  },再一次);

  }

  /脚本

  /body

  /html

  

四、Vue组件源码

  模板

  div class=移动字幕

  img src= ~ assets/img/home/notice/notice。png alt= /

  div class= mobile-marquee-wrapper ref= wrapper

  差异

  class=mobile-marquee-text

  ref=text

  :style={ left: textLeft, transition: textTransition }

  {{ text }}

  /div

  /div

  /div

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  文本:

  海外徒闻更九州,他生未卜此生休。空闻虎旅传宵柝,无复鸡人报晓筹。此日六军同驻马,当时七夕笑牵牛。如何四纪为天子,不及卢家有莫愁。,

  url: ,

  textLeft: ,

  文本转换:""

  };

  },

  方法:{

  //跑马灯运作

  marquee() {

  const _this=这个

  const wrapperWidth=this .$参考文献。包装纸。客户端宽度;//容器的总宽度

  const textWidth=this .$参考文献。文字。客户端宽度;//文本的总宽度

  const trans time=文本宽度/50;//根据文本宽度设置过渡时间

  const再次时间=trans时间* 1000 1000;//重新开始滚动时间计算(动态)

  这个。text left=包装宽度 px ;//开始滚动前设定文本在容器最右侧以外

  setTimeout(()={

  textRoll()

  }, 0);

  函数textRoll() {

  _这个。text transition= left transTime s linear ;//滚动前绑定过渡属性

  _这个。text left=-文本宽度“px”;//向容器最左移动

  setTimeout(()={

  //还原文本位置

  _ this.textTransition= none//还原前需清除过渡

  _这个。text left=wrap perwidth px

  setTimeout(()={

  文字滚动();

  }, 0);

  },再一次);

  }

  },

  },

  已安装(){

  这个。marquee();

  }

  };

  /脚本

  风格。移动字幕{

  显示器:flex

  对齐-项目:居中;

  高度:40px

  边距:0 16px

  }。移动字幕包装器{

  flex:1;

  高度:40px

  溢出:隐藏;

  位置:相对;

  }。移动字幕img {

  宽度:14px

  高度:12px

  右边距:7px

  }。移动字幕文本{

  颜色:# 333;

  空白:nowrap

  行高:40px

  位置:绝对;

  }

  /风格

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: