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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 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自动生成月历代码
2006/10/09 PHP
文章推荐系统(二)
2006/10/09 PHP
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
js实现全选和全不选
2020/07/28 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
django2 快速安装指南分享
2018/01/05 Python
Python之用户输入的实例
2018/06/22 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
python ---lambda匿名函数介绍
2019/03/13 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
python烟花效果的代码实例
2020/02/25 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
小学端午节活动方案
2014/03/13 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
员工试用期工作总结
2019/06/20 职场文书
Python开发简易五子棋小游戏
2022/05/02 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript