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 相关文章推荐
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
vue如何实现关闭对话框后刷新列表
Apr 08 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
解决vue中provide inject的响应式监听
Apr 19 Vue.js
Vue3实现简易音乐播放器组件
Aug 14 Vue.js
Vue router配置与使用分析讲解
Dec 24 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 MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
原生JS实现留言板
2020/03/26 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
求职信结尾怎么写
2014/05/26 职场文书
体操比赛口号
2014/06/10 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
Win11快速关闭所有广告推荐
2022/04/19 数码科技