发布于:12分钟前
之前的vue项目中用到视频播放器,但是UI不是很好看,索性就打算写一个视频播放器插件紧随着vue3的发布,vue3的生态还不是很完整,就索性把这个视频播放器插件修改成了vue3版,最终使用vite2+vue3开发
先看一下这个播放器(vue3-video-play)的界面吧

vue3-video-play视频播放插件基于原生的HTML5的 <video> 标签 开发,所以支持的视频格式和 <video> 一致,并且支持<video>标签的所有原生属性和方法
npm安装:
npm i vue3-video-play --save
yarn安装:
yarn add vue3-video-play --save
-
import { createApp }
from
'vue'
-
import
App
from
'./App.vue'
-
const app =
createApp(
App)
-
import videoPlay
from
'vue3-video-play'
// 引入组件
-
import
'vue3-video-play/dist/style.css'
// 引入css
-
app.
use(videoPlay) app.
mount(
'#app')
-
import
'vue3-video-play/dist/style.css'
-
import { videoPlay }
from
'vue-video-player'
-
export
default {
-
components: {
-
videoPlay
-
}
-
}
-
<template>
-
<div>
-
<videoPlay
-
v-bind=
"options"
-
@
play=
"onPlay"
-
@
pause=
"onPause"
-
@
timeupdate=
"onTimeupdate"
-
@
canplay=
"onCanplay" />
-
</div>
-
</template>
-
-
<script setup lang="ts">
-
import { reactive }
from
'vue';
-
import { videoPlay }
from
'../lib/index.js';
-
-
const options =
reactive({
-
width:
'800px',
//播放器高度
-
height:
'450px',
//播放器高度
-
color:
"#409eff",
//主题色
-
muted:
false,
//静音
-
webFullScreen:
false,
-
speedRate: [
"0.75",
"1.0",
"1.25",
"1.5",
"2.0"],
//播放倍速
-
autoPlay:
false,
//自动播放
-
loop:
false,
//循环播放
-
mirror:
false,
//镜像画面
-
ligthOff:
false,
//关灯模式
-
volume:
0.3,
//默认音量大小
-
control:
true,
//是否显示控制器
-
title:
'',
//视频名称
-
src:
"http://vjs.zencdn.net/v/oceans.mp4",
//视频源
-
poster:
'',
//封面
-
})
-
const
onPlay = (
ev) => {
-
console.
log(
'播放')
-
}
-
const
onPause = (
ev) => {
-
console.
log(ev,
'暂停')
-
}
-
-
const
onTimeupdate = (
ev) => {
-
console.
log(ev,
'时间更新')
-
}
-
const
onCanplay = (
ev) => {
-
console.
log(ev,
'可以播放')
-
}
-
</script>
-
-
<style scoped>
-
</style>
vue3-video-play支持video原生所有属性 video默认属性 使用方式和props属性使用一致
| 名称 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| width | 播放器宽度 | string | - | 800px |
| height | 播放器高度 | string | - | 450px |
| title | 视频名称 | string | - | - |
| src | 视频资源 | string | - | - |
| color | 播放器主色调 | string | - | #409eff |
| webFullScreen | 网页全屏 | boolean | - | false |
| speedRate | 倍速配置 | array | - | [“0.75”, “1.0”, “1.25”, “1.5”, “2.0”] |
| mirror | 镜像画面 | boolean | - | false |
| ligthOff | 关灯模式 | boolean | - | false |
| muted | 静音 | boolean | - | false |
| autoPlay | 自动播放 | boolean | - | false,为true时会自动静音 |
| loop | 循环播放 | boolean | - | false |
| volume | 默认音量 | 0.3 | 0-1 | 0.3 |
| poster | 视频封面 | string | - | 视频第一帧 |
vue3-video-play支持video原生所有事件 video默认事件
| 事件名称 | 说明 | 回调 |
|---|---|---|
| loadstart | 客户端开始请求数据 | event |
| progress | 客户端正在请求数据 | event |
| error | 请求数据时遇到错误 | event |
| stalled | 网速失速 | event |
| play | 开始播放时触发 | event |
| pause | 暂停时触发 | event |
| loadedmetadata | 成功获取资源长度 | event |
| loadeddata | event | |
| waiting | 等待数据,并非错误 | event |
| playing | 开始回放 | event |
| canplay | 暂停状态下可以播放 | event |
| canplaythrough | 可以持续播放 | event |
| timeupdate | 更新播放时间 | event |
| ended | 播放结束 | event |
| ratechange | 播放速率改变 | event |
| durationchange | 资源长度改变 | event |
| volumechange | 音量改变 | event |
视频没有基于任何插件,所以比较小, js和css加起来只有38kb大小,此插件会不断更新,遇到什么问题也可以在github上提issue
插件Github地址 vue-video-player 不妨点个星星
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU