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 相关文章推荐
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
Feb 28 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
May 07 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
简单实现node.js图片上传
Dec 18 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
深入理解js 中async 函数的含义和用法
May 13 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
Jul 17 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
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
杏林同学录(三)
2006/10/09 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
pow在python中的含义及用法
2019/07/11 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
python实现处理mysql结果输出方式
2020/04/09 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
生物科学专业个人求职信范文
2013/12/05 职场文书
一月红领巾广播稿
2014/02/11 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
企业晚会策划方案
2014/05/29 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
文员岗位职责范本
2015/04/16 职场文书
《我是什么》教学反思
2016/02/16 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js