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 相关文章推荐
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
jQuery之按钮组件的深入解析
Jun 19 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
jQuery图片左右滚动代码 有左右按钮实例
Jun 20 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
vue中echarts3.0自适应的方法
Feb 26 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
Vuex中的Mutations的具体使用方法
Jun 01 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
Sep 21 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
Guess欧洲官网:美国服饰品牌
2019/08/06 全球购物
咖啡蛋糕店创业计划书
2014/01/28 职场文书
篮球比赛策划方案
2014/06/05 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
医生见习报告范文
2014/11/03 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js