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 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
vue 数据操作相关总结
Dec 17 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue使用echarts画组织结构图
Feb 06 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
vue实现简易音乐播放器
Aug 14 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
详解Node 定时器
2018/02/26 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
numpy中索引和切片详解
2017/12/15 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python函数不定长参数使用方法解析
2019/12/14 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
如何通过python检查文件是否被占用
2020/12/18 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
冬季安全检查方案
2014/05/23 职场文书
工会工作先进事迹
2014/08/18 职场文书
安阳殷墟导游词
2015/02/10 职场文书
上班旷工检讨书
2015/08/15 职场文书
Python 图片添加美颜效果
2022/04/28 Python