Vue 实现简易多行滚动"弹幕"效果


Posted in Javascript onJanuary 02, 2020

看一下效果:

Vue 实现简易多行滚动"弹幕"效果 

实现任意行数的定时翻滚效果,不使用重复标签的方式,而是根据展示个数判断是否缺省,并添加对应展示个数的重复项来实现。

Vue 的演示代码如下:

<template>
 <div class="demo-comment-container">
 <div
  class="scroll-container"
  :style="{height: `${height/100}rem`}"
 >
  <ul
  class="scroll-ul"
  :style="{transform: `translate3d(0, ${y/100}rem, 0)`, transition: `${transition}`}"
  >
  <div
   v-for="(item, index) in list"
   :key="index"
   v-bind="baseStyle.style"
   :bgColor="baseStyle.style.bgColor__bg"
   :style="{ color: rgba(baseStyle.color__nf) }"
   :class="['c-item-bg', 'c-item', !item.content && 'empty']"
  >
   <li
   class="c-item"
   >
   <div class="avatar">
    <img
    v-if="item.content"
    class="avatar-item"
    :src="item.photo"
    >
   </div>
   <div
    v-if="item.content"
    class="c-content"
    v-html="item.content"
   />
   </li>
  </div>
  </ul>
 </div>
 <div class="comment-entry">
  <div class="f">
  <div class="text-c">
   <span
   v-if="entry.type === 1"
   class="text"
   v-text="entry.text"
   />
   <div
   v-else
   class="img-container"
   >
   <img :src="entry.image">
   </div>
   <i
   v-if="count"
   class="c-c"
   >{{ count }}</i>
  </div>
  <div>
   <span class="fake-input">来发表你的看法吧~</span>
  </div>
  </div>
 </div>
 </div>
</template>
<script>
export default {
 inject: ['rgba'],
 props: {
 urlConfig: {
  type: Object,
  default: function () {
  return {}
  }
 },
 type: {
  type: String,
  default: 'hot'
 },
 pageSize: {
  type: Number,
  default: 50
 },
 open: {
  type: Boolean,
  default: true
 },
 entry: {
  type: Object,
  default: function () {
  return {
   type: 1, // 1 文字 2 自定义
   text: '',
   image: ''
  }
  }
 },
 number: {
  type: Number,
  default: 2
 },
 },
 data () {
 return {
  count: 2334,
  dom: null,
  height: 0, // 单项高度
  y: 0, // 每次移动距离
  list: [], // 接口列表
  originLength: 0, // 原始数组长度
  transition: 'ease all .4s',
  round: 0 // 需要滚动多少轮
 }
 },
 created () {
 this.getCommentList()
 },
 mounted () {
 this.dom = document.querySelector('.c-item')
 // 计算可视区域高度
 this.height = 64 * this.number + (12 * (this.number - 1))
 },
 methods: {
 getCommentList () {
  // 接口数据
  const _list = []
  this.originLength = _list.length
  const mod = this.originLength % this.number
  let need = this.originLength < this.number ? (this.number - this.originLength) : mod > 0 ? this.number - mod : 0 // 计算出要添加的空白元素个数
  this.list = _list

  // set empty item
  const empty = JSON.parse(JSON.stringify(_list[0]))
  empty.content = ''

  // 补齐空白元素
  while (need) {
  this.list.push(empty)
  need--
  }

  // 填充重复元素
  let repeat = this.number
  let index = 0
  while (repeat) {
  this.list.push(_list[index])
  index++
  repeat--
  }

  this.round = this.list.length / this.number

  this.scroll()
 },
 scroll () {
  let count = 1
  setInterval(() => {
  count++
  this.y -= this.height + 12 // 移动可视区域高度 + 最后一个 item 的 margin-bottom
  this.transition = '.4s ease all'
  setTimeout(() => {
   if (count === this.round) {
   count = 1
   this.transition = ''
   this.y = 0
   }
  }, 800)
  }, 2000)
 }
 }
}
</script>

总结

以上所述是小编给大家介绍的Vue 实现简易多行滚动"弹幕",希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
比较详细的关于javascript中void(0)的具体含义解释
Aug 02 Javascript
jquery $.ajax入门应用一
Nov 19 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
Bootstrap布局之栅格系统详解
Jun 13 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
在ABP框架中使用BootstrapTable组件的方法
Jul 31 Javascript
Fetch超时设置与终止请求详解
May 18 Javascript
微信小程序 wx:for遍历循环使用实例解析
Sep 09 Javascript
JS实现秒杀倒计时特效
Jan 02 #Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 #Javascript
JS实现导航栏楼层特效
Jan 01 #Javascript
JS实现旋转木马轮播图
Jan 01 #Javascript
JS实现普通轮播图特效
Jan 01 #Javascript
javascript实现超好看的3D烟花特效
Jan 01 #Javascript
JavaScript工具库MyTools详解
Jan 01 #Javascript
You might like
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
javascript实现表单验证
2016/01/29 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
Vue组件库发布到npm详解
2018/02/17 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python生成随机数组的方法小结
2017/04/15 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
python 列表降维的实例讲解
2018/06/28 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
华为慧通面试题
2012/09/11 面试题
Servlet面试题库
2015/07/18 面试题
岗位职责的定义
2013/11/10 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
精彩的广告词
2014/03/19 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
创先争优承诺书
2015/01/20 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
Go语言读取txt文档的操作方法
2022/01/22 Golang