HarmonyOS 鸿蒙Next 内嵌h5中video标签,点击全屏video组件实现横屏全屏播放

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 内嵌h5中video标签,点击全屏video组件实现横屏全屏播放

内嵌h5中video标签,点击全屏video组件实现横屏全屏播放

2 回复

使用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 内嵌h5中video标签,点击全屏video组件实现横屏全屏播放的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,内嵌H5页面中的video标签实现全屏播放,特别是横屏全屏播放,可以通过以下方式实现:

  1. CSS样式设置:确保video标签的CSS样式中包含了允许全屏播放的属性,如webkit-playsinline设为falseplaysinline设为false,以及allowfullscreen设为true

  2. JavaScript监听事件:通过JavaScript监听video标签的clickdblclick事件,当触发事件时,调用video元素的requestFullscreen方法。同时,为了处理横屏显示,可以在全屏事件中通过JavaScript调整页面的CSS样式,如transform属性,将页面旋转90度并调整布局以适应横屏。

  3. 系统权限:确保应用已获取必要的权限,包括全屏显示权限和屏幕方向变更权限。

  4. 自定义全屏按钮:如果默认点击video标签不能触发全屏,可以添加一个自定义的全屏按钮,通过按钮的点击事件来触发全屏播放。

示例代码片段(简化):

<video id="myVideo" src="your-video-url.mp4" allowfullscreen></video>
<script>
document.getElementById('myVideo').addEventListener('click', function() {
    this.requestFullscreen();
});
</script>

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部