Angular 7 - HTML5 Fullscreen API 如何工作?我有很多错误

Jér*_*hon 3 html fullscreen typescript angular-cli angular

我使用 Angular 7,我想要一个按钮来让我的应用程序全屏显示。我使用 HTML5 全屏 API 并创建了 2 个函数:

openfullscreen() {
    // Trigger fullscreen
    console.log('gg');
    if (document.documentElement.requestFullscreen) {
      document.documentElement.requestFullscreen();
    } else if (document.documentElement.mozRequestFullScreen) { /* Firefox */
      document.documentElement.mozRequestFullScreen();
    } else if (document.documentElement.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
      document.documentElement.webkitRequestFullscreen();
    } else if (document.documentElement.msRequestFullscreen) { /* IE/Edge */
      document.documentElement.msRequestFullscreen();
    }
    this.isfullscreen = true;
  }

  closefullscreen(){
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.mozCancelFullScreen) { /* Firefox */
      document.mozCancelFullScreen();
    } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */
      document.webkitExitFullscreen();
    } else if (document.msExitFullscreen) { /* IE/Edge */
      document.msExitFullscreen();
    }
    this.isfullscreen = false;
  }
Run Code Online (Sandbox Code Playgroud)

它在开始时有效,但我有很多错误:

错误 TS2339:“HTMLElement”类型上不存在属性“mozRequestFullScreen”。

错误 TS2339:“HTMLElement”类型上不存在属性“mozRequestFullScreen”。

错误 TS2339:“HTMLElement”类型上不存在属性“webkitRequestFullscreen”。

错误 TS2339:“HTMLElement”类型上不存在属性“webkitRequestFullscreen”。

错误 TS2551:“HTMLElement”类型上不存在属性“msRequestFullscreen”。您指的是“requestFullscreen”吗?

错误 TS2551:“HTMLElement”类型上不存在属性“msRequestFullscreen”。您指的是“requestFullscreen”吗?

错误 TS2339:“文档”类型上不存在属性“mozCancelFullScreen”。

错误 TS2339:“文档”类型上不存在属性“mozCancelFullScreen”。

错误 TS2339:“文档”类型上不存在属性“webkitExitFullscreen”。

错误 TS2339:“文档”类型上不存在属性“webkitExitFullscreen”。

错误 TS2551:“文档”类型上不存在属性“msExitFullscreen”。您指的是 'exitFullscreen' 吗?

错误 TS2551:“文档”类型上不存在属性“msExitFullscreen”。您指的是 'exitFullscreen' 吗?

当我重新启动我的代码时,我遇到了同样的错误,但除此之外,我还有:

Failed to compile.
Run Code Online (Sandbox Code Playgroud)

我的应用程序不起作用。我如何编译没有错误?

Vah*_*hid 9

您可以通过使用as关键字来转换documentand的接口来告诉打字稿您将要使用的方法document.documentElement

像这样:

const docElmWithBrowsersFullScreenFunctions = document.documentElement as HTMLElement & {
  mozRequestFullScreen(): Promise<void>;
  webkitRequestFullscreen(): Promise<void>;
  msRequestFullscreen(): Promise<void>;
};

const docWithBrowsersExitFunctions = document as Document & {
  mozCancelFullScreen(): Promise<void>;
  webkitExitFullscreen(): Promise<void>;
  msExitFullscreen(): Promise<void>;
};
Run Code Online (Sandbox Code Playgroud)

请注意,这只是防止编译错误,您仍然应该像您一样检查这些方法是否存在。

所以你的方法会是这样的:

openfullscreen() {
  // Trigger fullscreen
  const docElmWithBrowsersFullScreenFunctions = document.documentElement as HTMLElement & {
    mozRequestFullScreen(): Promise<void>;
    webkitRequestFullscreen(): Promise<void>;
    msRequestFullscreen(): Promise<void>;
  };

  if (docElmWithBrowsersFullScreenFunctions.requestFullscreen) {
    docElmWithBrowsersFullScreenFunctions.requestFullscreen();
  } else if (docElmWithBrowsersFullScreenFunctions.mozRequestFullScreen) { /* Firefox */
    docElmWithBrowsersFullScreenFunctions.mozRequestFullScreen();
  } else if (docElmWithBrowsersFullScreenFunctions.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
    docElmWithBrowsersFullScreenFunctions.webkitRequestFullscreen();
  } else if (docElmWithBrowsersFullScreenFunctions.msRequestFullscreen) { /* IE/Edge */
    docElmWithBrowsersFullScreenFunctions.msRequestFullscreen();
  }
  this.isfullscreen = true;
}

closefullscreen(){
  const docWithBrowsersExitFunctions = document as Document & {
    mozCancelFullScreen(): Promise<void>;
    webkitExitFullscreen(): Promise<void>;
    msExitFullscreen(): Promise<void>;
  };
  if (docWithBrowsersExitFunctions.exitFullscreen) {
    docWithBrowsersExitFunctions.exitFullscreen();
  } else if (docWithBrowsersExitFunctions.mozCancelFullScreen) { /* Firefox */
    docWithBrowsersExitFunctions.mozCancelFullScreen();
  } else if (docWithBrowsersExitFunctions.webkitExitFullscreen) { /* Chrome, Safari and Opera */
    docWithBrowsersExitFunctions.webkitExitFullscreen();
  } else if (docWithBrowsersExitFunctions.msExitFullscreen) { /* IE/Edge */
    docWithBrowsersExitFunctions.msExitFullscreen();
  }
  this.isfullscreen = false;
}
Run Code Online (Sandbox Code Playgroud)


Sab*_*ati 5

定义类型:

type ExitFullscreen = typeof document.exitFullscreen
type RequestFullscreen = typeof document.documentElement.requestFullscreen

declare global {
  interface Document {
    webkitExitFullscreen: ExitFullscreen;
    mozCancelFullScreen: ExitFullscreen;
    msExitFullscreen: ExitFullscreen;
  }

  interface HTMLElement {
    webkitRequestFullscreen: RequestFullscreen;
    mozRequestFullScreen: RequestFullscreen;
    msRequestFullscreen: RequestFullscreen;
  }
}
Run Code Online (Sandbox Code Playgroud)