HarmonyOS 鸿蒙Next:web组件加载H5时,html里的video控件点击全屏显示异常
HarmonyOS 鸿蒙Next:web组件加载H5时,html里的video控件点击全屏显示异常
使用web组件加载一个html里的视频,当点击全屏时,通过html中的js和css无法实现横屏,可以通过web组件中监控点击全屏的回调里调用转屏方法在应用侧实现转屏,从而实现点击全屏按钮后横向全屏
import web_webview from ‘@ohos.web.webview’
import mediaquery from ‘@ohos.mediaquery’;
import window from ‘@ohos.window’;
import common from ‘@ohos.app.ability.common’;
@Entry
@Component
struct MediaQueryExample {
@State color: string = ‘#DB7093’;
@State text: string = ‘Portrait’;
@State portraitFunc:mediaquery.MediaQueryResult|void|null = null;
handler: FullScreenExitHandler | null = null
// 当设备横屏时条件成立
listener:mediaquery.MediaQueryListener = mediaquery.matchMediaSync(’(orientation: landscape)’);
controller: web_webview.WebviewController = new web_webview.WebviewController()
onPortrait(mediaQueryResult:mediaquery.MediaQueryResult) {
if (mediaQueryResult.matches as boolean) { // 若设备为横屏状态,更改相应的页面布局
this.color = ‘#FFD700’;
this.text = ‘Landscape’;
} else {
this.color = ‘#DB7093’;
this.text = ‘Portrait’;
}
}
aboutToAppear() {
// 绑定当前应用实例
// 绑定回调函数
this.listener.on(‘change’, (mediaQueryResult:mediaquery.MediaQueryResult) => { this.onPortrait(mediaQueryResult) });
}
// 改变设备横竖屏状态函数
private changeOrientation(isLandscape: boolean) {
// 获取UIAbility实例的上下文信息
let context:common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
// 调用该接口手动改变设备横竖屏状态
window.getLastWindow(context).then((lastWindow) => {
lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
});
}
build() {
Column() {
Web({ src: $rawfile(‘video.html’), controller: this.controller })
.javaScriptAccess(true)
.domStorageAccess(true)
.onFullScreenEnter((event) => {
console.log(“onFullScreenEnter…”)
this.handler = event.handler
this.changeOrientation(true);
})
.onFullScreenExit(() => {
console.log(“onFullScreenExit…”)
if (this.handler) {
this.handler.exitFullScreen()
this.changeOrientation(false);
}
})
}
.width(‘100%’).height(‘100%’)
}
}
```
html:
```
<!doctype html>
<html>
<head>
<title>浏览器全屏时横屏播放的demo</title>
<style type="text/css">
body {
margin: 0;
padding: 0;
overflow: hidden;
}
video {
width: 100%;
height: 100%;
object-fit: fill;
}
</style>
</head>
<body>
<video
src="https://download.pingan.com.cn/mingyuanfund/2021_qinghuaci.mp4"
autoplay
controls
></video>
<script type="text/javascript">
var video = document.querySelector('video') // 进入全屏
function requestFullscreen() {
video.webkitRequestFullscreen()
return 1
}
// 退出全屏
function exitFullscreen() {
document.webkitExitFullscreen()
return 0
}
// 监听全屏变化事件
document.addEventListener('fullscreenchange', function () {
if (document.fullscreenElement) {
// 进入全屏时,将视频旋转90度-->
video.style.transform = 'rotate(90deg)'
video.style.width = '100vh'
video.style.height = '100vw'
} else {
// 退出全屏时,将视频旋转回来-->
video.style.transform = 'none'
video.style.width = '100%'
video.style.height = '100%'
}
})
// 监听窗口大小变化事件
window.addEventListener('resize', function () {
if (document.fullscreenElement) {
// 窗口大小变化时,调整视频大小
video.style.width = '100vh'
video.style.height = '100vw'
}
})
// 点击播放按钮时,进入全屏
video.addEventListener('play', function () {
requestFullscreen()
video.style.transform = 'rotate(90deg)'
video.style.width = '100vh'
video.style.height = '100vw'
})
// 点击退出按钮时,退出全屏
video.addEventListener('ended', function () {
exitFullscreen()
})
</script>
</body>
</html>
```
更多关于HarmonyOS 鸿蒙Next:web组件加载H5时,html里的video控件点击全屏显示异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,当web组件加载H5页面时,如果html中的video控件在全屏显示时出现异常,通常可能是由于系统对全屏视频处理的兼容性问题或者权限设置不当所导致。
-
检查全屏API支持:确保video控件使用的全屏API(如requestFullscreen)在鸿蒙系统中被正确支持。鸿蒙系统可能有自己的全屏处理机制,需要查阅相关文档确认是否需要做特殊处理。
-
视频容器样式:检查video控件的CSS样式,确保在全屏模式下没有样式冲突导致显示异常。特别是关于宽高、定位、溢出等属性的设置。
-
权限配置:确认应用是否已获取必要的权限,如显示悬浮窗权限,这在全屏视频显示时可能是必需的。
-
系统版本兼容性:检查该问题是否仅在特定版本的鸿蒙系统上出现,如果是,可能是系统版本的一个bug,需要等待系统更新或寻求鸿蒙系统的官方解决方案。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html