# Video 视频播放器 ### 介绍 原生video实现的视频播放器 ### 安装 ``` ts import { Video } from '@nutui/nutui-react'; ``` ## 代码演示 ### 基础用法 :::demo ```tsx import React, { useState } from "react"; import { Cell, Video } from '@nutui/nutui-react'; const App = () => { const [source, setSource] = useState({ src: 'https://storage.360buyimg.com/nutui/video/video_NutUI.mp4', type: 'video/mp4', }) const options = { controls: true, } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) return ( <>

基础用法

) } export default App; ``` ::: ### 自动播放 autoplay 属性设置视频自动播放 :::demo ```tsx import React, { useState } from "react"; import { Cell, Video } from '@nutui/nutui-react'; const App = () => { const [source, setSource] = useState({ src: 'https://storage.360buyimg.com/nutui/video/video_NutUI.mp4', type: 'video/mp4', }) const options = { autoplay: true, muted: true, controls: true, } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) return ( <>

自动播放

) } export default App; ``` ::: ### 初始化静音 muted属性设置视频初始化静音 :::demo ```tsx import React, { useState } from "react"; import { Cell, Video } from '@nutui/nutui-react'; const App = () => { const [source, setSource] = useState({ src: 'https://storage.360buyimg.com/nutui/video/video_NutUI.mp4', type: 'video/mp4', }) const options = { muted: true, controls: true, } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) return ( <>

初始化静音

) } export default App; ``` ::: ### 视频封面海报设置 poster 属性设置视频海报 :::demo ```tsx import React, { useState } from "react"; import { Cell, Video } from '@nutui/nutui-react'; const App = () => { const [source, setSource] = useState({ src: 'https://storage.360buyimg.com/nutui/video/video_NutUI.mp4', type: 'video/mp4', }) const options = { controls: true, poster: 'https://img12.360buyimg.com/ling/s345x208_jfs/t1/168105/33/8417/54825/603df06dEfcddc4cb/21f9f5d0a1b3dad4.jpg.webp', } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) return ( <>

视频封面海报设置

) } export default App; ``` ::: ### 行内播放 playsinline 属性设置移动端视频行内播放,阻止新打开页面播放(兼容 ios,兼容部分安卓机) :::demo ```tsx import React, { useState } from "react"; import { Cell, Video } from '@nutui/nutui-react'; const App = () => { const [source, setSource] = useState({ src: 'https://storage.360buyimg.com/nutui/video/video_NutUI.mp4', type: 'video/mp4', }) const options = { controls: true, playsinline: true, } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) return ( <>

行内播放

) } export default App; ``` ::: ### 视频背景图 当设置视频为背景图时需要将 muted 静音、 disabled 禁止操作、loop 循环播放、autoplay 自动播放设置为 true,移动端需要设置 playsinline 行内展示 :::demo ```tsx import React, { useState } from "react"; import { Cell, Video } from '@nutui/nutui-react'; const App = () => { const [source, setSource] = useState({ src: 'https://storage.360buyimg.com/nutui/video/video_NutUI.mp4', type: 'video/mp4', }) const options = { controls: false, autoplay: true, disabled: true, muted: true, playsinline: true, loop: true, } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) return ( <>

设置视频为背景图

) } export default App; ``` ::: ### 视频切换 当视频地址发生变化时,重置视频 :::demo ```tsx import React, { useState } from "react"; import { Cell, Video, Button } from '@nutui/nutui-react'; const App = () => { const [source1, setSource1] = useState({ src: 'https://storage.360buyimg.com/nutui/video/legao-%E6%9D%A8%E8%BF%9B%E5%86%9B.mp4', type: 'video/mp4', }) const options = { controls: true, } const play = (elm: HTMLVideoElement) => console.log('play', elm) const pause = (elm: HTMLVideoElement) => console.log('pause', elm) const playend = (elm: HTMLVideoElement) => console.log('playend', elm) const changeVideo = () => { setSource1({...source1, src: 'https://vjs.zencdn.net/v/oceans.mp4'}) } return ( <>

视频切换

) } export default App; ``` ::: ## API ### Props | 字段 | 说明 | 类型 | 默认值 | | ------------------- | ------------------------------------------ | ------- | -------- | | source | 视频地址和类型设置 | Object | - | | options | 控制视频播放属性 | Object | - | | options.autoplay | 是否自动播放 | boolean | `false` | | options.poster | 海报设置 | string | - | | options.loop | 是否循环播放 | boolean | `false` | | options.controls | 是否展示操作栏 | boolean | `true` | | options.muted | 是否静音 | boolean | `false` | | options.playsinline | 是否设置为行内播放元素(解决安卓兼容问题) | boolean | `false` | ### Events | 事件名称 | 说明 | 回调参数 | | -------- | ------------ | -------- | | play | 播放 | - | | pause | 暂停 | - | | playend | 播放完成回调 | - | | onPlay `v2.0.0` | 播放 | - | | onPause `v2.0.0` | 暂停 | - | | onPlayEnd `v2.0.0` | 播放完成回调 | - |