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 相关文章推荐
可输入的下拉框
Jun 19 Javascript
用JQuery 实现的自定义对话框
Mar 24 Javascript
JavaScript生成GUID的多种算法小结
Aug 18 Javascript
实现51Map地图接口(示例代码)
Nov 22 Javascript
node.js中的fs.utimes方法使用说明
Dec 15 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
jQuery鼠标事件汇总
Aug 30 Javascript
js实现C#的StringBuilder效果完整实例
Dec 22 Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 Javascript
vue 扩展现有组件的操作
Aug 14 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
提取HTML标签
2006/10/09 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP中cookie知识点学习
2018/05/06 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
细说javascript函数从函数的构成开始
2013/08/29 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
详解VSCode配置启动Vue项目
2019/05/14 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
Python中正则表达式的用法实例汇总
2014/08/18 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
flask框架路由常用定义方式总结
2019/07/23 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
python实现自动清理重复文件
2020/08/24 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
日语专业个人的求职信
2013/12/03 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
2015年党总支工作总结
2015/05/25 职场文书
婚宴父母致辞
2015/07/27 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
git中cherry-pick命令的使用教程
2022/06/25 Servers