Web加载一个H5视频如何使其横向全屏播放

Web加载一个H5视频如何使其横向全屏播放

HarmonyOS
2024-05-20 20:51:22
浏览
已于2024-5-21 16:50:09修改
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
xuqing_2000

使用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('t1.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>
分享
微博
QQ
微信
回复
2024-05-21 16:29:30
相关问题
Web能直接加载h5代码吗?
1560浏览 • 2回复 待解决
webview加载Vue h5失败
16044浏览 • 5回复 待解决
Web中webview和H5交互
402浏览 • 1回复 待解决
如何加载字符串形式H5数据
493浏览 • 1回复 待解决
h5如何在鸿蒙设备进行调试
307浏览 • 1回复 待解决
如何实现H5自定义事件
711浏览 • 1回复 待解决
H5页面如何与ArkTS交互
1301浏览 • 1回复 待解决
如何在HarmonyOS中调试h5页面
319浏览 • 1回复 待解决
如何在webview中使用H5中的alert
511浏览 • 1回复 待解决
如何调试H5代码,有人知道吗?
473浏览 • 1回复 待解决
FA里内嵌H5是怎么保持登录状态?
5620浏览 • 1回复 待解决
JS如可开发一个横向拖动的表格
4662浏览 • 1回复 待解决