vue实现轮播图帧率播放


Posted in Vue.js onJanuary 26, 2021

本文实例为大家分享了vue实现轮播图帧率播放的具体代码,供大家参考,具体内容如下

需求

传入一个数组,数组中放的是目录名称,通过本目录名称,读取文件目录下的所有图片,并循环播放,形成一个每1s播放多少张图片的效果,最后目录播放完毕后,在跳到第一个目录循环播放。

核心: 用 webpack的一个API require.contex读取目录下的文件名,具体想了解的可以查一查。

代码

HTML

<template>
 <div id="imgPlay" ref="container" :style="[style]">
 <img :src="imgsrc" :style="[{height:style.height,width:style.width}]">
 <div id="but">
  <button @click="start()">开始</button>
  <button @click="stop()">停止</button>
 </div>
 </div>
</template>

javascript

<script>
export default {
 name: 'ZxImgPlay',
 data () {
 return {
  style:[
 width:"50px",
 height:"50px"
 ],
  interval: null, // 定时器id
  flag: true, // 定时器的开关
  setIntervalNumber: 0, // 当前展示的图片下标
  imgsrc: "", // 要展示的图片路径
  imgUrls: [], // 所有的图片路径
  frameRate: 0 // 帧率
 }
 },
 computed: {},
 watch: {},
 created () { },
 mounted () {
 this.zxInit()
 },
 beforeDestroy () { },

 methods: {
 zxInit () {
 // 这里的 this.DisplayParam 是公司内部的一套东西,混入的对象
 // this.DisplayParam.frameRate 是一个数组["目录名1","目录名2"]
 // this.DisplayParam.imgUrls 是死图当没有目录的时候就用死图
 // this.DisplayParam.frameRate 是传入的帧率
  this.frameRate = this.DisplayParam.frameRate && (1000 / this.DisplayParam.frameRate)
  this.imgUrls = this.DisplayParam.imgUrls
  this.DisplayParam.imageFileName != 0 ? this.readdir(this.DisplayParam.imageFileName) : this.showImages(true)
 },

 start () {
  if (this.flag) return
  this.showImages()
  this.flag = true
 },

 stop () {
  this.flag = false
  clearInterval(this.interval)
 },

 readImages (imageFileName, _A) {
  this.stop()
  let req = require.context("@/../static/images", true, /\.(?:bmp|jpg|gif|jpeg|png)$/).keys();
  let path = new RegExp(imageFileName[_A])
  req.forEach(item => {
  if (path.test(item)) {
   this.imgUrls.push({ img: "@/../static/images/" + imageFileName[_A] + item.substring(item.lastIndexOf('/')) })
  }
  })
  this.showImages()
 },
 readdir (imageFileName) {
  this.imgUrls = []
  for (let i = 0; i < imageFileName.length; i++) {
  this.readImages(imageFileName, i)
  }
 },

 showImages (_B) {
  if (_B) this.imgUrls = this.imgUrlsSort(this.imgUrls, 'sort')
  console.log(this.imgUrls)
  this.interval = setInterval(this.setIntervalFun, this.frameRate)
 },

 imgUrlsSort (ary, key) {
  return ary.sort((a, b) => {
  let x = a[key];
  let y = b[key];
  return ((x < y) ? -1 : (x > y) ? 1 : 0)
  })
 },

 setIntervalFun () {
  if (this.setIntervalNumber >= this.imgUrls.length) {
  this.setIntervalNumber = 0
  }
  this.imgsrc = this.imgUrls[this.setIntervalNumber++].img || ''
 }
 }
}
</script>

问题

上述这么做已经实现了功能,但是目前来说是发现了两个问题

1、require.context() 这个API它的第一个参数不能用一个可变的值,比如变量,会有警告。
2、上述代码一直更换图片的src实现的,也就是说每次换src时都会发送http请求获取图片,导致了内存不会被释放一直增加。

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

Vue.js 相关文章推荐
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
Vue基本指令实例图文讲解
Feb 25 Vue.js
vue+django实现下载文件的示例
Mar 24 Vue.js
详解vue身份认证管理和租户管理
May 25 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
vue封装数字翻牌器
Apr 20 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
vue 组件基础知识总结
Jan 26 #Vue.js
深入了解Vue动态组件和异步组件
Jan 26 #Vue.js
如何在 Vue 表单中处理图片
Jan 26 #Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 #Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 #Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 #Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 #Vue.js
You might like
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
php源码的使用方法讲解
2019/09/26 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python pdb调试方法分享
2014/01/21 Python
python中__call__内置函数用法实例
2015/06/04 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
干部培训自我鉴定
2014/01/22 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
摩登时代观后感
2015/06/03 职场文书
立春观后感
2015/06/18 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server